Matura 2018 (maj). Zadanie 5. Zbiornik

Matura 2018 (maj). Zadanie 5. Zbiornik

Rzeka Wirka co roku wylewała. Aby temu zapobiec, wybudowano na rzece zbiornik retencyjny. W kolejnych wierszach pliku woda.txt znajdują się dane dotyczące dziennego dopływu wody z rzeki Wirki do zbiornika retencyjnego w kolejnych dniach z lat 2008–2017. Plik zawiera 3 653 wiersze. W każdym wierszu podane są dane: data (rrrr-mm-dd) oraz liczba metrów sześciennych wody, jaka dopływała do zbiornika w ciągu doby. Dane oddzielone są znakami tabulacji.

Przykład:
2008-01-01 2275
2008-01-02 2831
2008-01-03 4615
2008-01-04 4084
2008-01-05 3258

Za pomocą dostępnych narzędzi informatycznych podaj odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku wyniki.txt, a każdą odpowiedź poprzedź numerem odpowiedniego zadania.

Dodanie danych do programu:

Krok 1. Wybieramy opcje z pliku tekstowego.

Krok 2. Wybieramy odpowiedni plika zawierający dane.

Krok 3. 

Krok 4.

Krok 5.

Krok 6. Wskazanie miejsca gdzie ma importować dane.

Zadanie 1.

Podaj rok, w którym zbiornik retencyjny został zasilony łącznie największą liczbą metrów sześciennych wody z rzeki Wirki.

Rozwiązanie:

Rozpocząć musimy od wybrania roku z daty za pomocą funkcji =ROK(A2).

Do uzyskania odpowiedzi wykorzystamy sum częściowych.

Wybieramy sumy częściowe ze wstążki Dane.

W ustawieniach sum częściowych wybieramy Rok, Suma dla pola m3. Po wykonaniu sum mamy wynik, suma wszystkich metrów sześciennych dla każdego roku.

Do wybrania roku w którym największą liczbą metrów został zasilony zbiornik retencyjny wykorzystamy sortowanie A-Z (lub Z-A).

Odpowiedź:

Rok 2015 – 5364691 m3

Zadanie 2. 

Jaki był najdłuższy okres liczony w dniach, w którym codziennie dopływało do zbiornika retencyjnego co najmniej 10 000 metrów sześciennych wody z rzeki Wirki? Jest tylko jeden taki okres. Podaj datę początkową i datę końcową tego okresu.

Rozwiązanie:

Do obliczenia ilości dni proponuje wykonać następujące czynności. Po pierwsze sprawdzamy którego dnia powyżej 10000 m3 wody dopływa do zbiornika z rzeki. Jeżeli jest tak, należy obliczyć ile dni pod kolei spełnia ten warunek.

Po wykonaniu funkcji: =jeżeli(B2>10000;1;0) i =jeżeli(C3=1;C3+D2;0) należy sprawdzić jaki okres był najdłuższy oraz możemy sprawdzić daty od kiedy to było.

Odpowiedź:

Ilość takich dni to: 55.
Pierwsza data to: 2015-03-17.
Ostatnia data to: 2015-05-10.

Zadanie 3. 

Utwórz i podaj zestawienie łącznej liczby metrów sześciennych wody dopływającej do zbiornika retencyjnego w kolejnych miesiącach 2008 roku (od stycznia 2008 do grudnia 2008). Na podstawie zestawienia wykonaj wykres kolumnowy. Pamiętaj o czytelnym opisie wykresu (tytuł wykresu i opisy osi).

Rozwiązanie:

Przed rozpoczęciem obliczenia należy wybrać z daty nr miesiąca w 2008 roku za pomocą funkcji =MIESIĄC(A2). Następnie do uzyskania odpowiedzi wykorzystam sumy częściowe dla zaznaczonego obszaru m3 i wybrany miesiąc z daty (tylko 2008 rok).

Należy utworzyć wykres dla danych:

Odpowiedź:

m[3]Miesiąc
954331
947302
1094393
6329314
3292035
856286
1665977
1397478
2823429
17072910
22244011
17207212

Zadanie 4. 

Poniżej opisano cykl pracy zbiornika retencyjnego.

1) Na początku doby, zaraz po północy, wykonywany jest pomiar objętości wody w zbiorniku i na jego podstawie realizuje się pozostałe działania.

2) Jeśli pomiar wskazuje w zbiorniku więcej niż 1 000 000 m3 wody, to nastąpiło tzw. przepełnienie zbiornika. W takiej sytuacji, niezwłocznie po wykonaniu pomiaru i stwierdzeniu przepełnienia, nadmiar wody powyżej 1 000 000 m3 jest wypuszczany ze zbiornika.

3) Codziennie rano (o godzinie 8) ze zbiornika wypuszcza się 2% objętości wody wykazanej przez pomiar zaraz po północy. Ilość wypuszczanej wody zaokrągla się w górę do pełnych metrów sześciennych.

Uwaga: pomiar wykonany po północy 2008-02-01 wskazał 338 406 m3 wody.

Uwzględnij opisany cykl pracy zbiornika retencyjnego oraz codzienne dopływy wody z Wirki i przyjmij, że pomiar w dniu 2008-01-01 wskazywał 500 000 m3 wody, a następnie:

a) podaj dzień, w którym pierwszy raz wypuszczono nadmiar wody po przepełnieniu,

b) podaj, w ilu dniach z podanego okresu (tj. od 2008-01-01 do 2017-12-31) w zbiorniku w momencie pomiaru znajdowało się co najmniej 800 000 m3 wody,

c) podaj, ile najwięcej wody znalazłoby się w podanym okresie (tj. od 2008-01-01 do 2017-12-31) w zbiorniku (w momencie pomiaru), gdyby całkowicie zrezygnować z procedury wypuszczania nadmiaru wody powyżej 1 000 000 m3, a zbiornik miałby nieograniczoną pojemność.

Rozwiązanie:

Pkt. a)

Do wykonania punktu należy sprawdzić poprzez utworzenie tabeli z danymi takimi jak na rysunku:

Wykonałem formułę zliczającą ilość wody każdego dnia o północy poprzez policzenie w kolumnie pomocniczej ilość wody o 8 rano, ponieważ każdego dnia rano jest wylewane 2% objętości całkowitej wody.

W kolumnie ilość wody o północy znajduje się formuła:

=JEŻELI(D6+B6>1000000;1000000;D6+B6)

Musiałem wykonać funkcję jeżeli do sprawdzenia czy ilość wody w zbiorniku o północy nie przekracza 1 000 000 m3. Jeżeli przekroczyła ilość wody 1 000 000 m3 to musimy zmniejszyć ilość wody do 1 000 000 m3.

Odpowiedź zaznaczona została na czerwono, ponieważ jest pytanie: Którego dnia pierwszy raz wypuszczono nadmiar wody po przepełnieniu? Wydawać się może, że jest to dzień wcześniej, ale jest błędna odpowiedź, ponieważ tego dnia było równo 1 000 000 m3 wody w zbiorniku, zaś wylano wodę ze zbiornika 2015-04-19. W kolumnie przepełnienie zbiornika wykorzystałem funkcję:

=JEŻELI(C8>=1000000;”tak”;””)

Odpowiedź:

pkt. a)  2015-04-19

Rozwiązanie:

Pkt. b)

To zadanie należy obliczyć wykorzystując funkcję, która policzy nam ilość komórek zawierających 800 000 m3 lub więcej w danym dniu:

=LICZ.JEŻELI(C6:C3658;”>=800000″)

Odpowiedź:

pkt. b) 188

Rozwiązanie:

Pkt. c)

Punkt c w tym zadaniu wykonać należy za pomocą funkcji już wcześniej wykorzystanej licząc ilość wody w zbiorniku, tylko należy usunąć funkcję obniżająca ilość wody w zbiorniku, kiedy przekroczy 1 000 000 m3. Następnie wybrać należy największa wartość za pomocą funkcji MAX.

=MAX(G6:G3658)

Odpowiedź:

pkt. c) 1 399 242 m3

Matura 2018 (maj). Zadanie 2. Krajobraz

Matura 2018 (maj). Zadanie 2. Krajobraz

W pewnym paśmie górskim znajduje się n szczytów, które będziemy przedstawiać jako punkty w układzie kartezjańskim na płaszczyźnie. Wszystkie punkty leżą powyżej osi OX, tzn. druga współrzędna (y) każdego punktu jest dodatnia.

W punkcie (0,0) stoi obserwator. Jeśli dwa szczyty A i B mają współrzędne (xA, yA) oraz (xB, yB), to mówimy, że:

• szczyt A jest dla obserwatora widoczny na lewo od B, jeśli xA/yA < xB/yB;
• szczyt B jest widoczny na lewo od A, jeśli xA/yA > xB/yB.

Wiemy, że żadne dwa szczyty nie leżą w jednej linii z obserwatorem, a zatem dla obserwatora te szczyty nie zasłaniają się nawzajem. Ilustrację przykładowego położenia szczytów można zobaczyć na poniższym rysunku:

W tym przykładzie, patrząc od lewej do prawej strony, obserwator widzi kolejno szczyt D, szczyt A, szczyt B i szczyt C.

Współrzędne szczytów dane są w dwóch tablicach X[1..n] oraz Y[1..n] – szczyt numer i ma współrzędne (X[i], Y[i]).

Zadanie 1. 

Napisz algorytm (w pseudokodzie lub wybranym języku programowania), który znajdzie i poda współrzędne skrajnie lewego szczytu, tzn. widocznego dla obserwatora na lewo od wszystkich pozostałych szczytów.

Specyfikacja:

Dane:

n – liczba całkowita dodatnia
X[1..n] – tablica liczb całkowitych
Y[1..n] – tablica liczb całkowitych dodatnich
Para (X[i], Y[i]) to współrzędne jednego szczytu, i = 1, 2, …, n.
Żadne dwa szczyty nie leżą w jednej linii z obserwatorem.

Wynik:

x, y – współrzędne skrajnie lewego szczytu spośród tych opisanych w tablicach X i Y.

Algorytm:

#include <iostream>
using namespace std;
int main()
{
int n=4;
int X[n]={1,3,2,-2};
int Y[n]={3,4,1,2};
int x,y;
for (int i=0; i<n-1; i++)
  if (float(X[i])/float(Y[i]) < float(X[i+1])/float(Y[i+1])) {
    x = X[i];
    y = Y[i];
  }
cout << x << " " << y << endl;
return 0;
}

Zadanie 2.

Napisz algorytm (w pseudokodzie lub wybranym języku programowania), który przestawi elementy tablic X i Y tak, aby szczyty były uporządkowane w kolejności, w której obserwator widzi je od lewej do prawej strony. Aby otrzymać maksymalną ocenę, Twój algorytm powinien mieć złożoność czasową kwadratową lub mniejszą. Algorytm może używać wyłącznie instrukcji sterujących, operatorów arytmetycznych, operatorów logicznych, porównań i przypisań do zmiennych. Zabronione jest używanie funkcji bibliotecznych dostępnych w językach programowania.

Specyfikacja:

Dane:

n – liczba całkowita dodatnia
X[1..n] – tablica liczb całkowitych
Y[1..n] – tablica liczb całkowitych dodatnich
Para (X[i], Y[i]) to współrzędne jednego szczytu, i = 1, 2, …, n.
Żadne dwa szczyty nie leżą w jednej linii z obserwatorem.

Wynik:

X[1..n], Y[1..n] – tablice zawierające współrzędne danych szczytów, uporządkowanych w kolejności, w której obserwator widzi je od lewej do prawej strony.

Algorytm:

#include <iostream>
using namespace std;
int main()
{
 int n=4;
 int X[n]={1,3,2,-2};
 int Y[n]={3,4,1,2};
 for (int j=0; j<n-1; j++)
   for (int i=0; i<n-1; i++) { 
     if (float(X[i])/float(Y[i]) > float(X[i+1])/float(Y[i+1])) {
       swap(X[i],X[i+1]);
       swap(Y[i],Y[i+1]);
     }
   }
 for (int i=0; i<n; i++) {
   cout << "X[" << i << "]= " << X[i] << " ";
   cout << "Y[" << i << "]= " << Y[i];
   cout << endl;
 }
return 0;
}

Matura 2018 (maj). Zadanie 1. Analiza algorytmu

Matura 2018 (maj). Zadanie 1. Analiza algorytmu

Rozważamy następujący algorytm:

Dane:

n – liczba całkowita dodatnia

Wynik:

p – liczba całkowita dodatnia

p ← 1
 q ← n
 dopóki p < q wykonuj
 s ← (p+q) div 2
 (*) jeżeli s*s*s < n wykonaj
 p ← s+1
 w przeciwnym wypadku
 q ← s

Uwaga: zapis div oznacza dzielenie całkowite.

Zadanie 1.

Podaj wynik działania algorytmu dla wskazanych w tabeli wartości n.

n p
28
64
80

Miejsce na obliczenia.

Algorytm:

#include <iostream>

using namespace std;

int main()
{
 cout << "Podaj n = ";
 int n, p=1;
 cin >> n;
 int q=n;
 int s;
 while (p<q) {
   s = (p+q)/2;
   if (s*s*s<n)
     p=s+1;
   else
     q=s;
 }
 cout << "p = " << p << endl;
 return 0;
}

Zadanie 2.

Podaj najmniejszą oraz największą liczbę n, dla której wynikiem działania algorytmu będzie p = 10.

Miejsce na obliczenia.

Najmniejsza liczba n to 9*9*9+1=730, ponieważ musi być spełniony warunek s3<n. Największa liczba n to 10*10*10=1000, ponieważ musi być spełniony warunek s3<n.

Odpowiedź: Najmniejsza liczba to 730, największa liczba to 1000.

Zadanie 3. 

Dokończ zdanie. Wybierz i zaznacz właściwą odpowiedź spośród podanych. Dla każdej liczby całkowitej n > 1 instrukcja oznaczona w algorytmie symbolem (*) wykona się

A. mniej niż 2*log2n razy.
B. więcej niż n/2, ale mniej niż n razy.
C. więcej niż n+1, ale mniej niż 2n razy.
D. więcej niż n2 razy.

Komentarz:

Odpowiedź A ponieważ, 2*log2n -> 2 * log264 = 2 * 6 = 12. Jest to mniej niż 12.

log264=x
2x = 64
26 = 64

Matura 2016 (maj). Zadanie 6. Liczby

Matura 2016 (maj). Zadanie 6. Liczby

Liczba pierwsza to liczba naturalna większa od 1, która ma dokładnie dwa dzielniki naturalne: 1 i samą siebie. Przykłady liczb pierwszych: 11, 17, 23.

Liczba 21 nie jest liczbą pierwszą, ponieważ oprócz liczb 1 i 21 jej dzielnikami są także 3 i 7.

W pliku dane_6.txt znajduje się 2000 liczb całkowitych o wartościach z zakresu <0;30000>, każda liczba zapisana jest w osobnym wierszu.

Napisz program, który da odpowiedzi do poniższych zadań. Każdą odpowiedź zapisz w pliku wyniki_6.txt, poprzedź ją numerem odpowiedniego zadania.

Dane do pobrania.

Zadanie 1.

Podaj, ile liczb zapisanych w pliku dane_6.txt to liczby pierwsze.

Rozwiązanie:

#include <iostream>
#include <fstream>
#define N 2000
using namespace std;
bool liczba_pierwsza(int a) {
 int i=2;
 bool wynik = true;
 while (a>i) {
   if (a%i==0) {
     wynik = false;
     break;
   }
   i++;
 }
 return wynik;
}
int main()
{
 int tab[N];
 int ile=0;
 ifstream plik;
 plik.open("dane4.txt");
 for (int i=0; i<N; i++){
   plik >> tab[i];
   if (liczba_pierwsza(tab[i]))
     ile++;
   }
 cout << ile << endl;;
 plik.close();
 ofstream wynik;
 wynik.open("wynik_6.txt");
 wynik << "Liczb pierwszych jest : " << ile;
 wynik.close();
 return 0;
}

Zadanie 2. 

Podaj, jaka jest największa oraz jaka jest najmniejsza liczba pierwsza z pliku dane_6.txt.

Rozwiązanie:

#include <iostream>
#include <fstream>
#define N 2000
using namespace std;
bool liczba_pierwsza(int a) {
 int i=2;
 bool wynik = true;
 while (a>i) {
   if (a%i==0) {
     wynik = false;
     break;
   }
   i++;
 }
 return wynik;
}

int main()
{
 int tab[N];
 int maksimum=0, minimum=30000;
 ifstream plik;
 plik.open("dane4.txt");
 for (int i=0; i<N; i++){
   plik >> tab[i];
   if (liczba_pierwsza(tab[i])) {
     if (tab[i]>maksimum)
       maksimum=tab[i];
     if (tab[i]<minimum)
       minimum=tab[i];
   }
 }
 cout << maksimum << endl;
 cout << minimum << endl;
 plik.close();
 ofstream wynik;
 wynik.open("wynik_6.txt");
 wynik << "Maksymalana liczba pierwsza jest to : " << maksimum << endl;
 wynik << "Minimalna liczba pierwsza jest to : " << minimum;
 wynik.close();
 return 0;
}

Zadanie 3.

Liczby bliźniacze to takie dwie liczby pierwsze, które różnią się o 2, np.: (3, 5), (5, 3), (11, 13) lub (19, 17).

Zbadaj w pliku dane_6.txt kolejne pary sąsiadujących ze sobą liczby, tzn. pierwszą i drugą liczbę, drugą i trzecią liczbę, …, przedostatnią i ostatnią liczbę. Podaj liczbę par liczb bliźniaczych oraz wypisz wszystkie te pary. Każdą parę wypisz w osobnym wierszu.

Przykład:

Dla poniższych danych

11698
13234
1999
1997
16444
15173
5927

odpowiedzią jest:

1
1999 i 1997.

Rozwiązanie:

#include <iostream>
#include <fstream>
#define N 2000
using namespace std;
bool liczba_pierwsza(int a) {
 int i=2;
 bool wynik = true;
 while (a>i) {
   if (a%i==0) {
     wynik = false;
     break;
   }
   i++;
 }
 return wynik;
}
int main()
{
 int tab[N];
 ifstream plik;
 plik.open("dane4.txt");
 for (int i=0; i<N; i++){
   plik >> tab[i];
 }
 plik.close();
 ofstream wynik;
 int w=0;
 wynik.open("wynik_6.txt");
 for (int i=0; i<N-1; i++)
   if (liczba_pierwsza(tab[i]) && liczba_pierwsza(tab[i+1]))
     if ((tab[i]==tab[i+1]+2) || (tab[i]==tab[i+1]-2)) {
       w++;
       wynik << tab[i] << " " << tab[i+1] << endl;
     }
 wynik << w;
 wynik.close();
 return 0;
}

Matura 2016 (maj). Zadanie 5. Sklep internetowy

Matura 2016 (maj). Zadanie 5. Sklep internetowy

Sklep internetowy Matrix zajmuje się sprzedażą sprzętu komputerowego. W plikach produkty.txt, klienci.txt oraz zamowienia.txt znajdują się dane dotyczące działalności sklepu w okresie od maja 2012 roku do maja 2013 roku włącznie. W każdym pliku pierwszy wiersz jest wierszem nagłówkowym.

Plik produkty.txt zawiera zestawienie dostępnych produktów – identyfikator produktu, nazwę produktu, grupę towarową, producenta i cenę brutto.

Fragment pliku produkty.txt:

ID_Produktu Nazwa_produktu Grupa_towarowa Producent Cena_brutto
1 98PDF Monitory CRT 19″ Smar 240,34
8 FINEPIXA400 Aparaty cyfrowe CER 414,4
446 EXPRESSP1-J224Y Notebooki HW 5350,52

Plik klienci.txt zawiera dane osób składających zamówienia – identyfikator klienta, imię i nazwisko.

Fragment pliku klienci.txt:

ID_klienta imie nazwisko
TL518 Tymoteusz Legierski
AZ877 Anna Zakopianska
AB721 Antoni Borek

Plik zamowienia.txt zawiera następujące informacje: identyfikator zamówienia, datę zamówienia, identyfikator zamawianego produktu, identyfikator klienta, który złożył zamówienie, oraz liczbę sztuk zamówionego produktu.

Fragment pliku zamowienia.txt:

ID_zamowienia Data ID_Produktu ID_klienta Liczba_sztuk
1/2012 2012-05-14 405 TC563 1
2/2012 2012-05-15 417 HS605 1
3/2012 2012-05-16 180 JP555 1

Wykorzystując dane zawarte w tych plikach oraz dostępne narzędzia informatyczne, wykonaj podane polecenia. Odpowiedzi zapisz w pliku wyniki_5.txt, poprzedzając je numerami zadań.

Pobieranie danych do programu. Zadanie zostało rozwiązane za pomocą MS Access.

Krok 1. Pobieranie danych zapisanych w plikach tekstowych do aplikacji.

Krok 2. Wybór pliku do pobrania.

Krok 3. Kreator pobierania danych z pliku do tabeli.

Krok 4. 

Krok 5. Sprawdzenie czy pobierane dane są odpowiedniego typu.

Krok 6. Wybór klucza podstawowego dla pola w tabeli.

Krok 7.

Krok 8. Tworzenie relacji.

Zadanie 1.

Podaj imiona i nazwiska wszystkich osób, które zakupiły notebooki firmy HW. Nazwiska posortuj alfabetycznie.

Rozwiązanie:

Zadanie 2.

Podaj nazwy produktów zakupionych przez klienta Anna Kotnicka, grupy towarowe oraz producentów tych produktów.

Rozwiązanie:

Zadanie 3.

Podaj imię i nazwisko osoby, która złożyła największą liczbę zamówień w sklepie internetowym Matrix, oraz liczbę tych zamówień.

Rozwiązanie:

Zadanie 4.

Podaj imiona i nazwiska trzech osób, które zapłaciły za wszystkie zamówione przez siebie towary najwięcej spośród wszystkich klientów. Zwróć uwagę, że klient mógł zamówić w jednym zamówieniu kilka sztuk tego samego produktu.

Rozwiązanie:

Zadanie 5.

Podaj, ile notebooków zamówiono w marcu 2013 roku.

Rozwiązanie:

Matura 2016 (maj). Zadanie 4. Demografia

Matura 2016 (maj). Zadanie 4. Demografia

W pliku demografia.txt znajdują się informacje o urodzeniach, zgonach i ruchu naturalnym ludności w Polsce w roku 2009, w podziale na województwa i powiaty. Pierwszy wiersz w pliku jest wierszem nagłówkowym.

Fragment pliku demografia.txt:

powiat wojewodztwo ludnosc_ogolem wsp_urodzen wsp_zgonow saldo_migracji
augustowski podlaskie 58763 10,4 10,5 -1,1
bedzinski slaskie 150950 9,4 13 3,1
belchatowski lodzkie 112993 11,5 9,1 -1,6

Korzystając z dostępnych narzędzi informatycznych oraz danych zawartych w pliku demografia.txt, wykonaj podane polecenia. Odpowiedź do każdego zadania poprzedź numerem tego zadania.

Pobieranie danych do programu.

Zadanie 1.

Podaj liczbę powiatów należących do województwa mazowieckiego, w których saldo migracji było ujemne.

Rozwiązanie:

Komentarz:

Do obliczenia ilości powiatów z województwa mazowieckiego, których saldo migracji jest ujemne należy użyć filtra dla województwa – ustalamy mazowieckie, zaś dla kolumny saldo_migracji używamy filtra liczb -> mniejsza niż -> ustalamy wartość na 0 (zero). Ilość wyświetlonych wierszy jest równa 24.

Zadanie 2.

Współczynnik przyrostu naturalnego to różnica pomiędzy współczynnikiem urodzeń a współczynnikiem zgonów. Utwórz zestawienie 10 powiatów o największym współczynniku przyrostu naturalnego zawierające nazwę powiatu i współczynnik przyrostu naturalnego. Zestawienie uporządkuj alfabetycznie.

Rozwiązanie:

Komentarz:

Współczynnik przyrostu naturalnego obliczamy w nowej kolumnie G wykorzystując funkcję =D2-E2. Następnie sortujemy Z-A wg kolumny G. Następnie ukrywamy kolumny od B-F, a potem sortujemy wg powiatu tylko pierwszych dziesięć powiatów.

Zadanie 3.

Podaj nazwy czterech województw o największej liczbie ludności oraz liczbę ludności w tych województwach.

Rozwiązanie:

Komentarz:

W pierwszej kolejności należy wybrać wszystkie występujące województwa w naszym zestawieniu. Kolejnym krokiem jest obliczanie ilości mieszkańców dla każdego województwa, wykonujemy to za pomocą funkcji:

=SUMA.JEŻELI($B$2:$B$380;I2;$C$2:$C$380)

Zakres komórek z których sumujemy to wszystkie nazwy województw $B$2:$B$380, zaś suma to liczba mieszkańców w każdym powiecie należącym do województwa $C$2:$C$380. W funkcji tej występuję jeszcze I2, jest to nazwa województwa wpisana wcześniej. Sortujemy malejąco wg ilości sumy mieszkańców w danym województwie. Wybieramy pierwsze cztery rekordy.

Zadanie 4.

Współczynnik urodzeń to liczba urodzeń na 1000 mieszkańców, czyli:

Na podstawie podanej liczby ludności każdego powiatu (ludność ogółem) oraz współczynnika urodzeń w tym powiecie wykonaj dla województwa opolskiego zestawienie powiatów oraz liczby urodzeń w 2009 roku w każdym powiecie. Obliczoną liczbę urodzeń zaokrąglij w dół do najbliższej liczby całkowitej. Zestawienie posortuj alfabetycznie. Na podstawie powyższego zestawienia utwórz wykres kolumnowy ilustrujący liczbę urodzonych dzieci w poszczególnych powiatach. Pamiętaj o prawidłowym opisie wykresu.

Rozwiązanie:

Komentarz:

Rozwiązywanie zadania należy rozpocząć od wykonania sortowania wg województw, ponieważ musimy wykonać tylko dla województwa opolskiego. Następnie dla nowej kolumny tworzymy formułę odwrotną obliczającą liczbę urodzeń ze wzoru:

dzięki przekształceniu wzoru została utworzona formuła: =ZAOKR.DÓŁ(D180*C180/1000;0)

Na zakończenie tworzymy wykres z danych: nazwy powiatu województwa opolskiego i danych z kolumny G.

Plik z rozwiązaniem

Matura 2016 (maj). Zadanie 2. Zapis liczb

Matura 2016 (maj). Zadanie 2. Zapis liczb

Dowolną liczbę n ∈ N można zapisać za pomocą sumy: sumy jej cyfr i iloczynu pewnego współczynnika k oraz liczby 9, gdzie k ∈ N .

Przykłady:

19 = 1 + 9 + (1 * 9)
123 = 1 + 2 + 3 + (13 * 9)

Zadanie 1.

Uzupełnij tabelę – wpisz dla podanej liczby n jej rozkład i współczynnik k.

n Rozkład liczby k
11 1 + 1 + ( k * 9 ) = 2 + 1 * 9 1
42 4 + 2 + ( k * 9 ) = 6 + 4 * 9   4
375 3 + 7 + 5 + ( k * 9 ) = 15 + 40 * 9 40
913 9 + 1 + 3 + ( k * 9 ) = 13 + 100 * 9 100

Obliczenia:

Wykonujemy sumowanie poszczególnych cyfr podanej liczby n. Następnie mamy liczbę z jedną niewiadomą. Ogólny wzór to:
Sc + k * 9 = n
k = ( n – Sc ) / 9
gdzie k – szukany współczynnik, n – liczba, Sc –  suma cyfr składających się na liczbę n.

n= 42
k = ( 42 – 6 ) / 9 = 4

Zadanie 2. 

Zapisz algorytm w wybranej przez siebie notacji obliczający sumę cyfr w zapisie dziesiętnym danej liczby n ∈ N . W zapisie algorytmu możesz korzystać tylko z następujących operacji arytmetycznych: dodawania, odejmowania, mnożenia, dzielenia całkowitego i obliczania reszty z dzielenia.

Specyfikacja:

Dane:

n ∈ N

Wynik:

s – suma cyfr liczby n

Algorytm:

#include <iostream>
using namespace std;
int main()
{
 int n = 913;
 int suma=0;
 while (n>0) {
   suma=suma+n%10;
   n=n/10;
 }
 cout << suma << endl;
 return 0;
}

Zadanie 3.

Zapisz algorytm w wybranej przez siebie notacji, który oblicza współczynnik k dla n ∈ N. W zapisie algorytmu możesz korzystać tylko z następujących operacji arytmetycznych: dodawania, odejmowania, mnożenia, dzielenia całkowitego i obliczania reszty z dzielenia. Możesz również zastosować funkcję suma_cyfr(n) obliczającą sumę cyfr liczby n.

Specyfikacja:

Dane:

n ∈ N

Wynik:

współczynnik k w rozkładzie liczby n

Algorytm:

#include <iostream>
using namespace std;
int Sc(int n) {
 int suma=0;
 while (n>0) {
   suma=suma+n%10;
   n=n/10;
 }
 return suma;
}
int main()
{
 int n = 3;
 cout << "k= " << (n-Sc(n))/9 << endl;
 return 0;
}

Matura 2016 (maj). Zadanie 1. Kompresja

Matura 2016 (maj). Zadanie 1. Kompresja

Rozważmy algorytm kompresji, który zlicza liczbę kolejnych wystąpień tego samego znaku, a następnie zamiast całej grupy identycznych znaków podaje ten znak tylko jeden raz, poprzedzając go liczbą jego kolejnych wystąpień. Liczba kolejnych wystąpień każdego znaku nie przekracza 9, więc do zapisania tej liczby wystarczy jeden znak.

Przykład:

tekst źródłowy tekst skompresowany rozmiar tekstu w liczbie znaków
źródłowego skompresowanego
 FFFYYYYYYYYYFFFHAAAAA  3F9Y3F1H5A  21 10

Zadanie 1.

Skompresuj powyższym algorytmem tekst podany w tabeli, oblicz rozmiar tekstu przed kompresją i po kompresji.

tekst źródłowy tekst skompresowany rozmiar tekstu w liczbie znaków
źródłowego skompresowanego
***##!!* 3*2#2!1* 8 8

Zadanie 2.

Ile powinna wynosić minimalna liczba kolejnych znaków w grupie, aby jej kompresja była opłacalna?

Rozwiązanie:

W tekście musi występować powyżej dwa takie same znaki lub minimum dwa razy występować trzy takie same znaki.

Zadanie 3.

Czy opisana metoda kompresji jest stratna, czy – bezstratna?

Rozwiązanie:

Opisana kompresja jest bezstratna, ponieważ tekst, który został skompresowany, możliwe jest przywrócić tekst źródłowy bez jakiejkolwiek straty.

Zadanie 4.

Napisz (w postaci listy kroków, schematu blokowego, pseudokodu lub w wybranym języku programowania) algorytm obliczający rozmiar skompresowanego tekstu.

Specyfikacja:

Dane:

n – dodatnia liczba całkowita, długość kompresowanego tekstu
T[1..n] – tablica zawierająca tekst do skompresowania; T[i] – i-ty znak w tekście

Wynik:

b – rozmiar skompresowanego tekstu T

Algorytm:

#include <iostream>
using namespace std;
int main()
{
 string tekst = "***##!!*";
 string nowy = "";
 int dl = tekst.length();
 int ile=1;
 char szyfr = tekst[0];
 for (int i=1; i<dl; i++){
   if(szyfr==tekst[i])
     ile++;
   else {
     nowy+=(48+ile);
   nowy+=szyfr;
   ile=1;
   szyfr = tekst[i];
   }
 }
 nowy+=(48+ile);
 nowy+=szyfr;
 cout << nowy.length();
 return 0;
}

Matura 2017 (maj). Zadanie 6. Wybory

Matura 2017 (maj). Zadanie 6. Wybory

W plikach tekstowych uczniowie.txt, glosy.txt oraz kandydaci.txt zapisano wyniki głosowania w wyborach do Parlamentu Uczniowskiego pewnego liceum. Pierwszy wiersz każdego z plików jest wierszem nagłówkowym, poszczególne informacje w każdym wierszu rozdzielone są znakami tabulacji.

Plik o nazwie uczniowie.txt zawiera 2100 wierszy z informacjami dotyczącymi wszystkich uczniów szkoły. W każdym wierszu znajdują się: identyfikator ucznia (id_ucznia), imię (imie), nazwisko (nazwisko) oraz oznaczenie klasy (klasa) i rok nauki ucznia (rok_nauki).

Przykład:

id_ucznia imie nazwisko klasa rok_nauki
1600 Mateusz Zgid A 3
1601 Teresa Budzisz A 3
1602 Klaudia Antczak A 3

W pliku glosy.txt, w każdym z 4100 wierszy, zapisane są: identyfikator głosu (id_glosu), identyfikator głosującego ucznia (id_ucznia), identyfikator kandydata, na którego oddano ten głos (id_kandydata).

Przykład:

id_glosu id_ucznia id_kandydata
1 1739 67
2 1639 16
3 1746 11
4 1613 77

Uwaga: jeden uczeń mógł głosować na kilku kandydatów.

W pliku kandydaci.txt zapisano 78 wierszy z informacjami o kandydatach do Parlamentu Uczniowskiego: identyfikator kandydata (id_kandydata), imię (imie), nazwisko (nazwisko).

Przykład:

id_kandydata imie nazwisko
1 Faustyn Augustowski
2 Karolina Adamczyk
3 Milena Karwik

Wykorzystaj dane zawarte w plikach oraz dostępne narzędzia informatyczne i wykonaj poniższe zadania. Odpowiedzi zapisz w pliku wyniki6.txt, a każdą odpowiedź poprzedź numerem odpowiedniego zadania.

Pobieranie danych do programu. Zadanie zostało rozwiązane za pomocą MS Access.

Krok 1. Pobieranie danych zapisanych w plikach tekstowych do aplikacji.

Krok 2. Wybór pliku do pobrania.

Krok 3. Kreator pobierania danych z pliku do tabeli.

Krok 4. 

Krok 5. Sprawdzenie czy pobierane dane są odpowiedniego typu.

Krok 6. Wybór klucza podstawowego dla pola w tabeli.

Krok 7.

Krok 8. Tworzenie relacji.

Krok 9. Należy zaznaczyć „Wymuszaj więzy integralności” przy tworzeniu relacji.

Krok 10.

Plik z danymi do pobrania.

Plik do pracy w MS Access.

Zadanie 1.

Imiona wszystkich dziewcząt w zestawieniu kończą się literą „a”, natomiast imiona chłopców nie kończą się literą „a”. Podaj ile dziewcząt i ilu chłopców jest uczniami szkoły, w której przeprowadzono wybory.

Rozwiązanie:

Komentarz:

Pierwszy krokiem jest utworzenie nowej kolumny z informacją, czy podane imię jest męskie czy żeńskie. Wykonać to można za pomocą instrukcji warunkowej IIF oraz należy wybrać ostatnią literę imienia poprzez wykorzystanie funkcji RIGHT i zwrócenie ostatniej litery. Po sprawdzeniu imienia, należy policzyć ile razy występuje wyrażeniu 1 wybrana litera. Po uruchomieniu mamy wynik: K = 976, M = 1124.

Wykorzystane funkcje:
Wyr1: IIf(Right([Uczniowie]![imie];1)=”a”;”K”;”M”)
Wyr2: Policz([Wyr1])

Zadanie 2.

Prezydium Parlamentu Uczniowskiego (w skrócie: PPU) składa się z 10 osób, które uzyskały największą liczbę głosów. Podaj skład PPU – dla każdej osoby podaj imię, nazwisko oraz uzyskaną liczbę głosów. Zestawienie posortuj nierosnąco ze względu na liczbę uzyskanych głosów.

Rozwiązanie:

Komentarz:

Należy utworzyć kwerendę zawierająca pola imie, nazwisko z tabeli Kandydaci orz id_kandydata z tabeli Glosy. Po wybraniu należy wybrać podsumowanie i dla pola id_kandydata należy wybrać funkcję policz. Dodatkowo należy posortować malejąca wg uzyskanych głosów (id_kandydata z tabeli Glosy). Na zakończenie należy wybrać ilość zwracanych rekordów (należy zwrócić 10).

Zadanie 3.

Podaj, ilu uczniów nie wzięło udziału w wyborach (nie oddało żadnego głosu).

Rozwiązanie:

Komentarz:

Do rozwiązania zadania należy utworzyć kwerendę wyszukującą niedopasowane dane. Tworzymy taką kwerendę dodajemy pola id_ucznia z tabeli Uczniowie oraz id_ucznia z tabeli Glosy. Należy policzyć pola id_ucznia z tabeli Uczniowie, zaś w kryteriach należy dodać kryteria IsNull dla pola id_ucznia z tabeli Glosy. Po uruchomieniu kwerendy mamy wynik: 697 uczniów nie głosowało.

Zadanie 4.

Dla każdego rocznika (rok_nauki) podaj średnią liczbę głosów oddanych przez uczniów jednej klasy tego rocznika. Wyniki podaj zaokrąglone do dwóch miejsc po przecinku.

Rozwiązanie:

Komentarz:

Zadanie zostało wykonane poprzez utworzenie dwóch kwerend pomocniczych. Kwerendy te mają na celu wybranie ilość klas w danym roczniku. Na przykład rocznik pierwszy może zawierać inną ilość klas niż rocznik drugi. Średnia na rok jest obliczona z ilorazu ilości głosów oddanych przez uczniów w jednym roczniku na ilość klas w obliczanym roczniku.