Matura 2014. Zadanie 4. Działki

W pliku DZIALKI.TXT znajduje się 5000 wierszy z informacjami o działkach w gminie Bajtocja, poprzedzonych wierszem nagłówkowym. W każdym wierszu znajdują się dane jednej działki, rozdzielone średnikami: numer (Numer), powierzchnia w metrach kwadratowych (Powierzchnia), oznaczenie rodzaju działki (Rodzaj), typ ulgi (Ulga).

Przykład:
Numer;Powierzchnia;Rodzaj;Ulga
517/10;1293,99;B;B
517/11;971,09;B;A
517/12;1259,19;R;B

Właściciele działek płacą gminie podatek. Podatek od działki jest obliczany jako iloczyn powierzchni działki i następującej stawki za metr kwadratowy [m2]:

rodzaj działki oznaczenie stawka za m2
rolna R 0,65 zł
budowlana B 0,77 zł
siedliskowa S 0,21 zł
leśna L 0,04 zł
rekreacyjna X 0,43 zł

Obliczona kwota podatku powinna jest zaokrąglana do dwóch miejsc po przecinku.

W gminie obowiązują cztery kategorie ulg. Kwota podatku pomniejszona jest o wielkość ulgi według następujących stawek:

oznaczenie ulgi ulga w procentach
A 20%
B 50%
C 90%
D 0%

Kwota podatku po uwzględnieniu ulgi również jest zaokrąglana do dwóch miejsc po przecinku.

Przykład:

Dla następującego wiersza danych: 517/12;1259,19;R;B, pełny podatek wynosi 1259,19 * 0,65 zł = 818,47 zł, a po uwzględnieniu ulgi jest on równy 409,24 zł i taka kwota jest wpłacana do kasy gminy.

Wykorzystując dane zawarte w pliku DZIALKI.TXT i dostępne narzędzia informatyczne, wykonaj podane polecenia. Odpowiedzi do poszczególnych podpunktów zapisz w kolejnych wierszach pliku tekstowego ZADANIE4.TXT. Odpowiedź do każdego podpunktu poprzedź literą oznaczającą ten podpunkt.

  1. Dodawanie danych do programu Excel.

2. Wybór pliku z danymi (DZIALKI.TXT).

3. Za pomocą kreatora dodajemy dane rozdzielone średnikiem.

4. Wskazujemy miejsce importowania danych.

a) Podaj powierzchnię i rodzaj najmniejszej działki oraz powierzchnię i rodzaj największej działki.

Rozwiązanie:

Należy wykonać dwie czynności, po pierwsze należy znaleźć najmniejszą i największą powierzchnię działki wykorzystując odpowiednio funkcję:

= MIN(B2:B5001)

= MAX(B2:B5001)

Jak zostały znalezione powierzchnie najmniejsza i największa, musimy sprawdzić jaki jest rodzaj działki wykorzystując funkcję:

=WYSZUKAJ.PIONOWO(G9;B1:C5001;2;FAŁSZ)

Opis tej funkcji znajdziemy na stronie: MICROSOFT OFFICE

Rozwiązanie zadania:

powierzchnia rodzaj
najmniejsza 500,18 S
największa 1500 X

b) Utwórz zestawienie zawierające, dla każdego z rodzajów działek, następujące informacje: rodzaj działki, liczbę działek tego rodzaju, średnią powierzchnię (zaokrągloną do dwóch miejsc po przecinku) działek tego rodzaju.

Do rozwiązania tego zadania będziemy musieli posortować dane wg rodzaju działki.

Następnie wykorzystam sumy częściowe do zebrania wszystkich danych, pierwsze dane to liczba poszczególnych działek:

Drugie dane to średnia powierzchnia każdego rodzaju:

Rodzaj działki B L R S X
Liczba działek tego rodzaju 1775 559 708 964 994
Średnia powierzchnia 999,59 1016,75 989,98 986,12 989,94

 

c) Utwórz zestawienie, w którym podasz ile jest działek, od których trzeba zapłacić podatek (według stawek i ulg wyszczególnionych w tabelach) w podanych poniżej tabeli przedziałach:

 

Wielkość podatku Liczba działek
do 100 zł włącznie
ponad 100 zł, ale do 500 zł włącznie
ponad 500 zł

Sporządź wykres procentowy ilustrujący otrzymane zestawienie. Pamiętaj o prawidłowym i czytelnym opisie wykresu.

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.

Matura 2017 (maj). Zadanie 5. Kemping

Matura 2017 (maj). Zadanie 5. Kemping

Polskie Towarzystwo Podróżnicze prowadzi ośrodek wypoczynkowy „Cichy Kącik”. W ośrodku znajdują się domki kempingowe następujących typów: 2-, 3-, 4-, 5- i 6-osobowe. Towarzystwo rozważa zmianę sposobu naliczania opłat i w tym celu planuje analizę działalności ośrodka wypoczynkowego w roku 2014. W pliku wynajem.txt zapisana jest historia wynajmu z 2014 roku.

W każdym wierszu zapisano: datę wynajęcia domku (data_przyjazdu), datę opuszczenia domku (data_wyjazdu), koszt zużytej energii (energia), koszt zużytej wody (woda) oraz wielkość wynajętego domku (typ). Daty w pliku są podawane w formacie: RRRR-MM-DD.

Pierwszy wiersz pliku jest wierszem nagłówkowym.

Poszczególne dane w każdym wierszu rozdzielone są znakami tabulacji.

Przykład:

data_przyjazdu data_wyjazdu energia woda typ
014-01-02 2014-01-11 39,35 1,04 5
014-01-02 2014-01-23 3,79 0,10 6
014-01-02 2014-01-14 3,88 0,10 6
014-01-02 2014-01-22 6,43 0,17 5

Wykorzystaj dane zawarte w pliku wynajem.txt oraz dostępne narzędzia informatyczne i wykonaj poniższe zadania. Odpowiedzi do poszczególnych zadań zapisz w pliku tekstowym o nazwie wyniki5.txt (z wyjątkiem wykresu w zadaniu 4). Odpowiedź do każdego zadania poprzedź numerem oznaczającym to zadanie.

Dane do pobrania.

Plik z danymi utworzony w programie MS Excel 2007.

Pobranie danych do programu:

Krok 1.

Krok 2.

Krok 3.

Krok 4.

Krok 5.

Zadanie 1.

Podaj, jakiego typu domki były wynajmowane najwięcej razy.

Komentarz:

Należy policzyć każdy typ domu ile razy był wynajmowany. Występują tylko typy: 2, 3, 4, 5, 6. Wykonam to za pomocą funkcji (licz.jezeli):

=LICZ.JEŻELI($E$2:$E$1001;H3)

Rozwiązanie:

Odpowiedź:

Najczęściej wynajmowanym typem domku był typ 2, został wynajęty 204 razy.

Zadanie 2.

Dla każdego typu domków oblicz łączną liczbę dób, przez które te domki były wynajmowane.

Przykład:

data_przyjazdu data_wyjazdu energia woda typ
014-01-02 2014-01-11 39,35 1,04 5
014-01-02 2014-01-23 3,79 0,10 6
014-01-02 2014-01-14 3,88 0,10 6
014-01-02 2014-01-22 6,43 0,17 5

Domki typu 5 były wynajmowane łącznie przez 29 dób, domki typu 6 były wynajmowane łącznie przez 33 doby.

Komentarz:

Pierwsza część zadania polega na obliczeniu ile dni każdy pokój był wynajmowany. Wykonać to można na zasadzie odejmowania pamiętając, że data to liczba (odejmujemy datę młodszą od starszej).

=B2-A2

Kolejna część rozwiązania zadania polega na wykorzystaniu funkcji suma.jeżeli. Funkcja ta sumuje ilość dni każdego typu dnia.

=SUMA.JEŻELI($E$2:$E$1001;I4;$F$2:$F$1001) 

Rozwiązanie:

 

 

Zadanie 3.

Klient wynajmujący domek obowiązany jest uiszczać opłatę w wysokości czynszu oraz opłatę za zużyte media (energia elektryczna i woda). Czynsz uzależniony jest od wielkości domku oraz od czasu, na jaki wynajęto domek. Przyjęto, że:

czynsz najmu = 10 zł * liczba osób w domku (typ) * liczba dób wynajmu

Przykład:

Domek 5-osobowy był wynajęty od 1 do 10 stycznia 2014 (czyli na 9 dób). Zużyto energię elektryczną za kwotę 39,35 zł oraz wodę za 1,04 zł. Czynsz wynosi: 10 zł*5 osób*9 dób = 450 zł. Opłata za wynajem zatem wyniesie: 450 zł + 39,35 zł+1,04 zł = 490,39 zł

Utwórz zestawienie zawierające dla każdego typu domku łączną sumę opłat za wynajęcie domków tego typu. Zestawienie posortuj nierosnąco ze względu na kwotę opłat.

Komentarz:

Dodajemy kolejną kolumnę w której obliczamy opłatę za wynajem w następujący sposób (funkcja):

=E2*F2*10+C2+D2

Obliczenie sumy łącznej dla każdego typu doku wykonujemy analogicznie jak przy obliczeniu ilości dni w zadaniu 2, za pomocą funkcji:

=SUMA.JEŻELI($E$2:$E$1001;J21;$G$2:$G$1001)

W tabeli obliczamy sumę opłat za każdy typ domku, ale należy jeszcze te wartości posortować w sposób Z-A.

Rozwiązanie:

Zadanie 4.

Utwórz zestawienie zawierające łączne koszty mediów (zużycie energii i wody) w poszczególnych miesiącach. Sporządź wykres kolumnowy ilustrujący otrzymane zestawienie. Pamiętaj o prawidłowym i czytelnym opisie wykresu.

Uwaga: każdy wynajem domku przyporządkuj do miesiąca odpowiadającego dacie przyjazdu (data_przyjazdu).

Komentarz:

W pierwszej części rozwiązywania tego zadania należy dodać wartości kwot za media, tj. zużycie energii i wody w kolumnie H. To zostało wykonane za pomocą funkcji suma:

=SUMA(C2:D2)

W kolumnie I wybrałem nr miesiąca, w którym został wynajęty domek za pomocą funkcji:

=MIESIĄC(A2)

W dalszej części należy wykonać sumowanie wartości z warunkiem przypisania do poszczególnych miesięcy wynajęcia domku. Funkcja ta wygląda następująco:

=SUMA.JEŻELI($I$2:$I$1001;L31;$H$2:$H$1001)

Po wykonaniu tej czynności zostało wykonać wykres z danych znajdujących się w nowo utworzonej tabeli. Wykres w arkuszu kalkulacyjnym MS Excel wstawia się poprzez menu wstaw, wybierając wykres kolumnowy.

Rozwiązanie:

PLIK Z PRZYKŁADOWYM ROZWIĄZANYM ZADANIA.

Matura 2017 (maj). Zadanie 4. Trójki liczb

Matura 2017 (maj). Zadanie 4. Trójki liczb

W pliku liczby.txt znajduje się 1000 trójek liczb całkowitych dodatnich rozdzielonych pojedynczymi odstępami, każda trójka – w osobnym wierszu. Liczby zapisane w pliku należą do przedziału [1, 32 767].

Plik do pobrania.

Fragment danych z pliku liczby.txt:

20634 31423 261
11009 21970 32126
26318 16336 5158
24196 14586 3545

Napisz program(y), który(e) da(dzą) odpowiedzi do poniższych zadań. Odpowiedzi zapisz
w pliku wyniki4.txt, a każdą odpowiedź poprzedź odpowiednim numerem zadania.

Zadanie 1.

Podaj, w ilu wierszach pliku z danymi liczby w trójkach są uporządkowane rosnąco.

Przykład:

Dla danych
4587 9351 28950
15010 28342 31848
30172 7492 6768
29120 21664 32328

odpowiedzią jest 2 (w dwóch wyróżnionych wierszach liczby są uporządkowane rosnąco).

Rozwiązanie:

#include <iostream>
#include <fstream>
#define N 1000
#define T 3
using namespace std;
int main()
{
 int t[T][N];
 fstream plik;
 plik.open("liczby.txt");
 if (!plik.good()) cout << "brak pliku!";
   else {
     for (int i=0; i<N;i++)
     plik >> t[0][i] >> t[1][i] >> t[2][i];
 }
 plik.close();
 // zadanie 1
 int wiersz=0;
 for (int i=0; i<N;i++)
   if ((t[0][i] < t[1][i]) && (t[1][i] < t[2][i])) {
     cout << t[0][i] << " " << t[1][i] << " " << t[2][i] << endl;
     wiersz++;
   }
 fstream wynik;
 wynik.open("wynik4.txt", ios::out);
 wynik << wiersz << endl;
 wynik.close();
 return 0;
}

Komentarz:

Pobieramy dane z pliku do zmiennych tablicowych t[0][1000], t[1][1000], t[2][1000]. Następnie sprawdzamy czy liczba t1 jest mniejsza od t2 oraz cz liczba t2 jest mniejsza od t3, jeśli tak to zwiększamy wartość wiersz o jeden.

Zadanie 2.

Dla każdego wiersza wyznacz największy wspólny dzielnik (NWD) trójki liczb w nim zapisanych i podaj sumę tych dzielników.

Przykład:

Dla danych
3 6 9
34 10 4
36 20 28
16 40 56

odpowiedzią jest 17, ponieważ NWD trójek liczb w kolejnych wierszach to: 3, 2, 4, 8 (3+2+4+8=17).

Rozwiązanie:

#include <iostream>
#include <fstream>
#define N 1000
#define T 4
using namespace std;
int NWD(int a, int b) {
 while (a!=b) {
 if (a>b) a-=b;
 else b-=a;
 }
 return a;
}
int main()
{
 int t[T][N];
 fstream plik;
 plik.open("liczby.txt");

if (!plik.good()) cout << "brak pliku!";
 else {
 for (int i=0; i<N;i++)
 plik >> t[0][i] >> t[1][i] >> t[2][i];
 }
 plik.close();
 // zadanie 2
 int suma = 0;
 for (int i=0; i<N;i++) {
 t[3][i] = NWD(NWD(t[0][i],t[1][i]),t[2][i]);
 suma+=t[3][i];
 }
 fstream wynik;
 wynik.open("wynik4.txt", ios::out);
 wynik << suma << endl;
 wynik.close();
 return 0;
}

Komentarz:

Pobieramy dane z pliku do zmiennych tablicowych t[0][1000], t[1][1000], t[2][1000]. Następnie obliczamy dla każdej trójki NWD metodą Euklidesa i wynik przypisujemy do tablicy nr 4. Na koniec wykonujemy sumowanie wartości zapisanych w tablicy.

Zadanie 3.

Dla każdego wiersza oblicz sumę cyfr wszystkich liczb znajdujących się w tym wierszu.
Podaj:

  • liczbę wierszy, dla których suma cyfr ze wszystkich trzech zapisanych liczb jest równa
    35;
  • największą sumę cyfr w wierszu oraz liczbę wierszy, w których suma cyfr równa jest
    tej największej wartości.

Przykład:

Dla danych
45 9151 2800
2882 15040 2800 (*)
30172 2592 1102
29121 23564 320 (*)
3 243 765

W dwóch wierszach suma cyfr jest równa 35 (wytłuszczone wiersze). Maksymalną sumą jest 40, która wystąpiła 2 razy – w wierszach oznaczonych (*).

Rozwiązanie:

#include <iostream>
#include <fstream>
#define N 1000
#define T 4
using namespace std;
int sumacyfr(int c) {
 int s=0;
 while (c>0) {
 int tmp=c%10;
 c/=10;
 s+=tmp;
 }
 return s;
}
int main()
{
 int t[T][N];
 fstream plik;
 plik.open("liczby.txt");
 if (!plik.good()) cout << "brak pliku!";
 else {
 for (int i=0; i<N;i++)
 plik >> t[0][i] >> t[1][i] >> t[2][i];
 }
 plik.close();
 // zadanie 3
 int ile = 0;
 int suma = 0;
 int maksimum = 0;
 int ile_maks = 0;
 for (int i=0; i<N;i++) {
 t[3][i] = sumacyfr(t[0][i])+sumacyfr(t[1][i])+sumacyfr(t[2][i]);
 if (t[3][i] == 35)
   ile++;
   if (maksimum<t[3][i]) maksimum = t[3][i];
 }
 for (int i=0; i<N;i++)
   if (t[3][i] == maksimum)
   ile_maks++;
 fstream wynik;
 wynik.open("wynik4.txt", ios::out);
 wynik << "ilosc sumy cyfr rownych 35 : "<< ile << endl;
 wynik << "wartosc maksimalnej sumy cyfr rowna jest : "<< maksimum << endl;
 wynik << "ilosc wystepowan maksimum jest rowna : "<< ile_maks << endl;
 wynik.close();
 return 0;
}

 

Matura 2017 (maj). Zadanie 2. Liczby pierwsze

Matura 2017 (maj). Zadanie 2. Liczby pierwsze

Parą liczb bliźniaczych nazwiemy dwie liczby pierwsze różniące się o 2. Liczbami bliźniaczymi są 11 i 13, gdyż obie liczby są pierwsze i różnica pomiędzy nimi wynosi 2. Para 13 i 15 nie jest parą liczb bliźniaczych, gdyż 15 jest liczbą złożoną.

Zadanie 1.

Uzupełnij poniższą tabelę. Wykonaj obliczenia i podaj odpowiedź, czy istnieje taka liczba, z którą liczba a tworzy parę liczb bliźniaczych.

Liczba a Czy liczba a jest pierwsza? Liczba b1=a+2 Czy liczba b1 jest pierwsza? Liczba b2=a–2 Czy liczba b2 jest pierwsza? Czy istnieje taka liczba b, z którą liczba a tworzy parę liczb bliźniaczych?
17 tak 19 tak 15 nie TAK
5 tak 7 tak 3 tak TAK
31 tak  33  nie  29 tak  TAK
41 tak  43  tak  39  nie  TAK
49 nie  51  nie  47  tak  NIE

Rozwiązanie:

Liczba pierwsza jest to taka liczba naturalna większa od 1, która posiada dokładnie dwa dzielniki: 1 i samą siebie. Sprawdzamy każdą liczby a czy jest to liczba pierwsza, jeśli nie to nawet nie musimy sprawdzać kolejnych liczb, zaś jeśli tak to sprawdzamy liczby b1=a-2 oraz b2=a+2. Jeśli, któraś z liczb b1, b2 jest liczbą pierwszą to wtedy mówimy, że liczby tworzą parę liczb bliźniaczych.

Zadanie 2.

Zapisz algorytm (w postaci listy kroków, schematu blokowego lub w wybranym języku programowania) sprawdzający, czy dana liczba należy do pary liczb bliźniaczych. Twój algorytm powinien być zgodny z poniższą specyfikacją.

Uwaga: w zapisie możesz wykorzystać tylko operacje dodawania, odejmowania, mnożenia, dzielenia, dzielenia całkowitego i brania reszty z dzielenia całkowitego, operacje logiczne oraz samodzielnie napisane funkcje.

Specyfikacja algorytmu:

Dane:

a – dodatnia liczba całkowita, a ≥ 3

Wynik:

komunikat TAK, jeżeli a należy do pary liczb bliźniaczych
komunikat NIE, jeżeli a nie należy do pary liczb bliźniaczych

Algorytm:

#include <iostream>
#include <math.h>
using namespace std;
bool czypierwsza(int a) {
  bool spr;
  if(a<2) spr = false;
  //gdy liczba jest mniejsza niz 2 to nie jest pierwsza
  for(int i=2;i<=sqrt(a);i++) {
    if(a%i==0) {
      spr = false;
      break;
    }
    spr = true;
  }
  return spr;
}
int main()
{
 cout << "Podaj liczbe: ";
 int liczba;
 cin >> liczba;
 if (( czypierwsza(liczba)&& czypierwsza(liczba-2)) || (czypierwsza(liczba) && czypierwsza(liczba+2)))
   cout << "TAK";
 else
   cout << "NIE" << endl;
 return 0;
}