Zadanie zostało stworzone przez Centralną Komisję Egzaminacyjną i pojawiło się na egzaminie maturalnym z informatyki (poziom podstawowy, część II) w roku. Cały arkusz można znaleźć na stronie internetowej CKE.
W pliku dane.txt zapisano 1000 numerów PESEL osób urodzonych w latach , po jednym numerze w wierszu.
Fragment pliku dane.txt (10 pierwszych wierszy pliku):
Linia 1. 87062374513.
Linia 2. 70042949368.
Linia 3. 57070843873.
Linia 4. 68100217281.
Linia 5. 80071113568.
Linia 6. 58121156393.
Linia 7. 55042672243.
Linia 8. 73091424567.
Linia 9. 89100324122.
Linia 10. 60062195366.
Plik przyklad.txt zawiera 15 przykładowych numerów PESEL.
Napisz program(y), za pomocą którego(ych) uzyskasz odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku wyniki6.txt, a odpowiedź do każdego zadania poprzedź numerem oznaczającym to zadanie.
Plik przyklad.txt
Rkf8dTxDCB5eE
Zadanie 1.1
Przedostatnia, dziesiąta cyfra numeru PESEL określa płeć jego właściciela. W numerach PESEL kobiet cyfra ta jest parzysta, u mężczyzn – nieparzysta. Podaj liczbę numerów PESEL kobiet i liczbę numerów PESEL mężczyzn z pliku dane.txt.
Przykład:
Dla numerów PESEL zawartych w pliku przyklad.txt odpowiedzią jest 8 numerów dla kobiet i 7 dla mężczyzn.
Polecenie 1
Napisz program, który obliczy, ile numerów PESEL w pliku dane.txt należy do kobiet, a ile do mężczyzn, i zapisze odpowiedź w pliku wyniki6_1.txt w osobnych liniach.
Do oceny oddajesz:
plik wyniki6_1.txt z odpowiedzią (dwie liczby naturalne; liczba numerów PESEL należąca do kobiet i liczba numerów PESEL należących do mężczyzn)
plik(i) zawierający(e) kody źródłowe.
Kompletne dane do zadania znajdują się w załączonym poniżej pliku dane.txt
R1X743kPsLmYR
Rozwiąż zadanie dla danych wejściowych znajdujących się w załączonym pliku. Wykorzystaj w tym celu jeden z języków programowania: C++, Java lub Python. Odpowiedź do zadania znajdziesz w osobnym pliku tekstowym umieszczonym po omówieniu przykładowego rozwiązania.
Rozwiązanie
Na egzaminie maturalnym mamy możliwość wybrania dowolnego z dostępnych języków programowania, jednak tutaj nie będziemy dokonywać implementacji rozwiązania tego zadania w konkretnym języku. Zamiast tego przedstawimy rozwiązanie zapisane za pomocą pseudokodu. Twoim zadaniem będzie przełożenie go na język, w którym programujesz.
Pierwszym krokiem, jaki musimy wykonać, tworząc nasz program, jest wczytanie danych z pliku. Dane te zapiszemy w tablicy o rozmiarze równym liczbie numerów PESEL w pliku. Ponieważ mamy obliczyć liczbę numerów PESEL należących do kobiet i liczbę numerów PESEL należących do mężczyzn, stworzymy również zmienne do przechowywania tych wartości. Zmienne te inicjujemy wartością 0.
Linia 1. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 2. liczba podkreślnik kobiet ← 0.
Linia 3. liczba podkreślnik mezczyzn ← 0.
Na płeć osoby, do której należy numer PESEL, wskazuje parzystość jego przedostatniej cyfry. Dane w plikach przechowywane są w postaci tekstowej. Aby korzystać z nich jak z liczb, trzeba je przekonwertowaćkonwersja typówprzekonwertować do typu liczbowego. Na potrzeby tego zadania wystarczy znać zatem wartość wyłącznie przedostatniej cyfry numeru PESEL, zatem stworzymy funkcję pomocniczą, która pozwoli nam na odczytanie wartości danej cyfry zapisanej jako znak. Będzie ona zwracała kod ASCII znaku pomniejszony o 48 (wartość dziesiętna kodu znaku '0').
Linia 1. funkcja liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły znak zamknij nawias okrągły.
Linia 2. ascii otwórz nawias okrągły znak zamknij nawias okrągły minus 48.
Ważne!
W językach programowania C++, Java oraz Python istnieją funkcje wbudowane (będące odpowiednikiem zaprezentowanej funkcji liczba_ze_znaku(), które pozwalają na konwersję znaku na liczbę.
C++
Linia 1. int otwórz nawias okrągły znak zamknij nawias okrągły.
Java
Linia 1. Integer kropka parseInt otwórz nawias okrągły znak zamknij nawias okrągły.
Python
Linia 1. int otwórz nawias okrągły znak zamknij nawias okrągły.
Po zapewnieniu możliwości traktowania pojedynczych cyfr numerów PESEL jak liczb możemy przystąpić do rozwiązania właściwego zadania. W tym celu będziemy potrzebować pętli, która pozwoli na przejście po całej tablicy z numerami PESEL.
Linia 1. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 2. liczba podkreślnik kobiet ← 0.
Linia 3. liczba podkreślnik mezczyzn ← 0.
Linia 5. dla i znak równości 0 przecinek 1 przecinek 2 przecinek kropka kropka kropka przecinek 999 wykonuj.
Następnie dla każdego numeru PESEL w tablicy sprawdzamy parzystość jego przedostatniej cyfry. Jeżeli jest ona parzysta, oznacza to, że PESEL należy do kobiety i musimy zwiększyć o 1 wartość zmiennej liczba_kobiet. Jeśli zaś liczba ta nie jest parzysta, rozważany numer PESEL należy do mężczyzny i musimy zwiększyć o 1 wartość zmiennej liczba_mezczyzn.
Linia 1. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 2. liczba podkreślnik kobiet ← 0.
Linia 3. liczba podkreślnik mezczyzn ← 0.
Linia 5. dla i znak równości 0 przecinek 1 przecinek 2 przecinek kropka kropka kropka przecinek 999 wykonuj.
Linia 6. jeżeli liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły numery podkreślnik pesel otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 9 zamknij nawias kwadratowy zamknij nawias okrągły mod 2 znak równości 0.
Linia 7. liczba podkreślnik kobiet ← liczba podkreślnik kobiet plus 1.
Linia 8. w przeciwnym razie.
Linia 9. liczba podkreślnik mezczyzn ← liczba podkreślnik mezczyzn plus 1.
Gdy już policzymy, ile numerów PESEL należy do kobiet, a ile do mężczyzn, pozostaje nam zapisać te wyniki do pliku.
Na końcu zamykamy pliki.
Oto kompletny kod rozwiązujący to zadanie:
Linia 1. funkcja liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły znak zamknij nawias okrągły.
Linia 2. zwróć kod ASCII podanego argumentu minus 48.
Linia 4. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 5. liczba podkreślnik kobiet ← 0.
Linia 6. liczba podkreślnik mezczyzn ← 0.
Linia 8. dla i znak równości 0 przecinek 1 przecinek 2 przecinek kropka kropka kropka przecinek 999 wykonuj.
Linia 9. jeżeli liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły numery podkreślnik pesel otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 9 zamknij nawias kwadratowy zamknij nawias okrągły mod 2 znak równości 0.
Linia 10. liczba podkreślnik kobiet ← liczba podkreślnik kobiet plus 1.
Linia 11. w przeciwnym razie.
Linia 12. liczba podkreślnik mezczyzn ← liczba podkreślnik mezczyzn plus 1.
Linia 14. zapisz liczba podkreślnik kobiet do pliku cudzysłów wyniki6 podkreślnik 1 kropka txt cudzysłów.
Linia 15. zapisz liczba podkreślnik mezczyzn do pliku cudzysłów wyniki6 podkreślnik 1 kropka txt cudzysłów w nowej linii.
Linia 16. zamknij plik cudzysłów wyniki6 podkreślnik 1 kropka txt cudzysłów.
Linia 17. zamknij plik cudzysłów dane kropka txt cudzysłów.
Schemat oceniania
3 pkt – za podanie poprawnej odpowiedzi.
2 pkt – za podanie tylko poprawnej liczby mężczyzn lub kobiet.
0 pkt – za błędną odpowiedź albo za brak odpowiedzi.
Uwaga: Nie przyznaje się 1 pkt.
Odpowiedź
Odpowiedź do zadania została zawarta w pliku tekstowym dostępnym w załączniku.
R1HcGl8Ne0FQE
Zadanie 1.2
Cyfry trzecia i czwarta numeru PESEL oznaczają miesiąc urodzenia, przy czym osoby urodzone przed rokiem mają numer miesiąca podany w sposób naturalny, czyli od 01 do 12, a osoby urodzone w roku i później mają do numeru miesiąca dodaną liczbę 20, czyli od 21 do 32. Dla danych z pliku dane.txt podaj, ile osób łącznie urodziło się w listopadzie.
Przykład:
Dla numerów PESEL zawartych w pliku przyklad.txt odpowiedzią jest liczba 2.
Polecenie 2
Napisz program, który obliczy, ile numerów PESEL w pliku dane.txt należy osób, które urodziły się w listopadzie, i zapisze odpowiedź w pliku wyniki6_2.txt.
Do oceny oddajesz:
plik wyniki6_2.txt z odpowiedzią (liczba naturalna; liczba numerów PESEL w pliku dane.txt należących osób, które urodziły się w listopadzie)
plik(i) zawierający(e) kody źródłowe
Kompletne dane do zadania znajdują się w załączonym pliku dane.txt
R1dPwMzEPXlrK
Rozwiąż zadanie dla danych wejściowych znajdujących się w załączonym pliku. Wykorzystaj w tym celu jeden z języków programowania: C++, Java lub Python. Odpowiedź do zadania znajdziesz w osobnym pliku tekstowym umieszczonym po omówieniu przykładowego rozwiązania.
Rozwiązanie
Podobnie jak w zadaniu 1.1, tutaj również zaczynamy od wczytania danych z pliku i stworzenia zmiennej do przechowywania wyniku:
Linia 1. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 2. wynik ← 0.
Do rozwiązania tego zadania potrzebne nam będą dwie funkcje pomocnicze. Jedna z nich została przedstawiona w poprzednim zadaniu. Jest to funkcja odczytująca wartość cyfry zapisanej jako znak:
Linia 1. funkcja liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły znak zamknij nawias okrągły.
Linia 2. zwróć kod ASCII zmiennej znak minus 48.
Drugą funkcją pomocniczą będzie funkcja, która z podanego w argumencie numeru PESEL będzie wyodrębniała liczbę oznaczającą miesiąc urodzenia jego właściciela. Funkcja będzie zwracała miesiąc wyznaczony z trzeciej i czwartej cyfry numeru PESEL, do czego wykorzystamy przedstawioną wyżej funkcję liczba_ze_znaku. Miesiąc urodzenia właściciela numeru PESEL będzie obliczany jako suma czwartej cyfry numeru PESEL i jego trzeciej cyfry pomnożonej przez 10.
Linia 1. funkcja odczytaj podkreślnik miesiac otwórz nawias okrągły pesel zamknij nawias okrągły.
Linia 2. a1 ← 10.
Linia 3. a0 ← 1.
Linia 4. x1 ← liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły pesel otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 5. x0 ← liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły pesel otwórz nawias kwadratowy 3 zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 6. zwróć a1 asterysk x1 plus a0 asterysk x0.
Następnie, skoro mamy już przygotowane funkcje pomocnicze, możemy przystąpić do rozwiązania właściwego zadania. W tym celu potrzebna nam będzie pętla, która przejdzie po wszystkich odczytanych z pliku numerach PESEL.
Linia 1. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 2. wynik ← 0.
Linia 4. dla i znak równości 0 przecinek 1 przecinek 2 przecinek kropka kropka kropka przecinek 999 wykonuj.
Kiedy mamy już gotową pętlę, następnym krokiem będzie zliczenie wystąpień miesiąca listopad w przetwarzanych numerach PESEL. W tym celu dla każdego numeru PESEL musimy odczytać liczbę symbolizującą ten miesiąc i przyrównać ją do oczekiwanych wartości, czyli 11 i 31. W przypadku ich dopasowania zwiększamy przygotowany na początku rozwiązywania licznik przechowujący wynik.
Linia 1. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 2. wynik ← 0.
Linia 4. dla i znak równości 0 przecinek 1 przecinek 2 przecinek kropka kropka kropka przecinek 999 wykonuj.
Linia 5. miesiac ← odczytaj podkreślnik miesiac otwórz nawias okrągły numery podkreślnik pesel otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 6. jeżeli miesiac znak równości 11 lub miesiac znak równości 31.
Linia 7. wynik ← wynik plus 1.
Skoro mamy już ustaloną liczbę osób urodzonych w listopadzie, pozostaje zapisać wynik do pliku wyniki6_2.txt.
Na końcu zamykamy pliki.
Oto pełen kod służący do rozwiązania zadania:
Linia 1. funkcja liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły znak zamknij nawias okrągły.
Linia 2. zwróć kod ASCII podanego argumentu minus 48.
Linia 4. funkcja odczytaj podkreślnik miesiac otwórz nawias okrągły pesel zamknij nawias okrągły.
Linia 5. a1 ← 10.
Linia 6. a0 ← 1.
Linia 7. x1 ← liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły pesel otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 8. x0 ← liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły pesel otwórz nawias kwadratowy 3 zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 9. zwróć a1 asterysk x1 plus a0 asterysk x0.
Linia 11. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 12. wynik ← 0.
Linia 14. dla i znak równości 0 przecinek 1 przecinek 2 przecinek kropka kropka kropka przecinek 999 wykonuj.
Linia 15. miesiac ← odczytaj podkreślnik miesiac otwórz nawias okrągły numery podkreślnik pesel otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 16. jeżeli miesiac znak równości 11 lub miesiac znak równości 31.
Linia 17. wynik ← wynik plus 1.
Linia 19. zapisz wynik do pliku cudzysłów wyniki6 podkreślnik 2 kropka txt cudzysłów.
Linia 20. zamknij plik cudzysłów wyniki6 podkreślnik 2 kropka txt cudzysłów.
Linia 21. zamknij plik cudzysłów dane kropka txt cudzysłów.
Schemat oceniania
3 pkt – za podanie poprawnej odpowiedzi.
2 pkt – za podanie liczby urodzonych w listopadzie tylko w XX lub tylko w XXI wieku.
2 pkt – jeśli zdający pomyli numery cyfr i zamiast 3 i 4 sprawdzi 4 i 5 (otrzyma wynik 80) lub pomyli cyfry 3 z 4 (wynik 79).
1 pkt – za sprawdzenie przez zdającego tylko jednej cyfry.
0 pkt – za błędną odpowiedź albo za brak odpowiedzi.
Odpowiedź
Odpowiedź do zadania została zawarta w pliku tekstowym dostępnym w załączniku.
RzZqDdqFdX0dD
Ważne!
Rozwiązanie zadania możesz zapisać, wykorzystując jeden program.
Propozycja rozwiązania:
Linia 1. funkcja liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły znak zamknij nawias okrągły.
Linia 2. zwróć kod ASCII podanego argumentu minus 48.
Linia 4. funkcja podpunkt podkreślnik 1 otwórz nawias okrągły numery podkreślnik pesel zamknij nawias okrągły.
Linia 5. liczba podkreślnik kobiet ← 0.
Linia 6. liczba podkreślnik mezczyzn ← 0.
Linia 8. dla i znak równości 0 przecinek 1 przecinek 2 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły numery podkreślnik pesel zamknij nawias okrągły minus 1 wykonuj.
Linia 9. jeżeli liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły numery podkreślnik pesel otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 9 zamknij nawias kwadratowy zamknij nawias okrągły mod 2 znak równości 0.
Linia 10. liczba podkreślnik kobiet ← liczba podkreślnik kobiet plus 1.
Linia 11. w przeciwnym razie.
Linia 12. liczba podkreślnik mezczyzn ← liczba podkreślnik mezczyzn plus 1.
Linia 14. zwróć liczba podkreślnik kobiet przecinek liczba podkreślnik mezczyzn.
Linia 16. funkcja odczytaj podkreślnik miesiac otwórz nawias okrągły pesel zamknij nawias okrągły.
Linia 17. a1 ← 10.
Linia 18. a0 ← 1.
Linia 19. x1 ← liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły pesel otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 20. x0 ← liczba podkreślnik ze podkreślnik znaku otwórz nawias okrągły pesel otwórz nawias kwadratowy 3 zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 21. zwróć a1 asterysk x1 plus a0 asterysk x0.
Linia 23. funkcja podpunkt podkreślnik 2 otwórz nawias okrągły numery podkreślnik pesel zamknij nawias okrągły.
Linia 24. wynik ← 0.
Linia 25. dla i znak równości 0 przecinek 1 przecinek 2 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły numery podkreślnik pesel zamknij nawias okrągły minus 1 wykonuj.
Linia 26. miesiac ← odczytaj podkreślnik miesiac otwórz nawias okrągły numery podkreślnik pesel otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 27. jeżeli miesiac znak równości 11 lub miesiac znak równości 31.
Linia 28. wynik ← wynik plus 1.
Linia 29. zwróć wynik.
Linia 31. numery podkreślnik pesel otwórz nawias kwadratowy 0 kropka kropka 999 zamknij nawias kwadratowy ← wczytaj dane z pliku cudzysłów dane kropka txt cudzysłów.
Linia 33. liczba podkreślnik kobiet przecinek liczba podkreślnik mezczyzn ← podpunkt podkreślnik 1 otwórz nawias okrągły numery podkreślnik pesel zamknij nawias okrągły.
Linia 34. wynik ← podpunkt podkreślnik 2 otwórz nawias okrągły numery podkreślnik pesel zamknij nawias okrągły.
Linia 36. zapisz liczba podkreślnik kobiet do pliku cudzysłów wyniki6 podkreślnik 1 kropka txt cudzysłów.
Linia 37. zapisz liczba podkreślnik mezczyzn do pliku cudzysłów wyniki6 podkreślnik 1 kropka txt cudzysłów w nowej linii.
Linia 38. zapisz wynik do pliku cudzysłów wyniki6 podkreślnik 2 kropka txt cudzysłów.
Linia 40. zamknij plik cudzysłów wyniki6 podkreślnik 1 kropka txt cudzysłów.
Linia 41. zamknij plik cudzysłów wyniki6 podkreślnik 2 kropka txt cudzysłów.
Linia 42. zamknij plik cudzysłów dane kropka txt cudzysłów.
Słownik
konwersja typów
konwersja typów
specjalna konstrukcja programistyczna umożliwiająca zmianę typu pewnej danej na inny typ danych; jej przykładem jest zamiana liczby całkowitej na napis reprezentujący tę liczbę lub odwrotnie; określana również jako rzutowanie typu, przekształcenie typu