Struktury – przypomnienie informacji

Struktura jest pojemnikiem na dane, pogrupowanym według wyszczególnionych kategorii.

Przykładem struktury może być lista obecności uczniów na lekcji.

Struktura – lista obecności:

  • Imię

  • Nazwisko

  • Czy uczeń jest obecny?

Struktura może zawierać informacje o dowolnie dużej liczbie uczniów, jest to więc doskonały sposób na uporządkowanie danych w programie – z zachowaniem czytelności oraz przejrzystości kodu.

Przykładowe zadanie typu maturalnego

Zadanie 1. Przedszkole

Zadanie 1.1

W miejscowości Binarów znajduje się przedszkole Chmurka. Uczęszczają do niego wszystkie okoliczne dzieci w wieku od 3 do 6 lat.

W związku z początkiem roku szkolnego w placówce Chmurka tworzony jest dziennik zawierający następujące informacje o przedszkolakach:

  • IdUcznia – numer od 1 do 500;

  • Płeć – „c” (chłopiec) lub „d” (dziewczynka);

  • Wiek;

  • Ulica.

Dane do dziennika zapisane są w plikach: IdUcznia.txt, Plec.txt, Wiek.txt, Ulica.txt.

Każdy plik zawiera 500 wierszy z danymi opisującymi uczniów uczęszczających do przedszkola Chmurka.

W poszczególnych plikach wiersze o takich samych indeksach zawierają informacje o jednej osobie.

Ważne!

Zadanie należy wykonać, działając na strukturze stworzonej według wzoru w zadaniu.

Korzystając z informacji z polecenia oraz wykorzystując dane zawarte w plikach tekstowych, rozwiąż zadania, a następnie sprawdź poprawność odpowiedzi na końcu sekcji.

IdUcznia.txt

Rk4m9gChZlIbe

Plik tekstowy zawierający wartości liczbowe.

Plik TXT o rozmiarze 2.44 KB w języku polskim

Plec.txt

RXGZ94UplKNB2

Plik tekstowy zawierający litery d i c.

Plik TXT o rozmiarze 1.46 KB w języku polskim

Wiek.txt

RYzLZI8dEhFsK

Plik tekstowy zawierający wartości liczbowe.

Plik TXT o rozmiarze 1.46 KB w języku polskim

Ulica.txt

R1d8Sij3anQSB

Plik tekstowy zawierający nazwy ulic.

Plik TXT o rozmiarze 4.52 KB w języku polskim
  1. Podaj, ile dziewczynek mieszka na ulicy Kwiatowej.

  2. Posortuj uczniów według ich ID, a następnie podaj płeć pierwszych pięciu przedszkolaków.

  3. Podaj wszystkie ulice, na których mieszkają sześcioletni chłopcy o nieparzystym numerze ID.

Uwaga: wszystkich ulic jest 18.

Rozwiązanie

Stworzenie struktury oraz import danych
Linia 1. struktura Przedszkolak. Linia 2. IdUcznia dwukropek liczba całkowita. Linia 3. Płeć dwukropek znak. Linia 4. Wiek dwukropek liczba całkowita. Linia 5. Ulica dwukropek tekst. Linia 7. Przedszkolak uczeń otwórz nawias kwadratowy 500 zamknij nawias kwadratowy. Linia 9. dla i znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły uczeń zamknij nawias okrągły wykonuj dwukropek. Linia 10. uczeń otwórz nawias kwadratowy i minus 1 zamknij nawias kwadratowy kropka IdUcznia znak równości wczytaj i minus tą linijkę z pliku cudzysłów IdUcznia kropka txt cudzysłów. Linia 11. uczeń otwórz nawias kwadratowy i minus 1 zamknij nawias kwadratowy kropka Płeć znak równości wczytaj i minus tą linijkę z pliku cudzysłów Plec kropka txt cudzysłów. Linia 12. uczeń otwórz nawias kwadratowy i minus 1 zamknij nawias kwadratowy kropka Wiek znak równości wczytaj i minus tą linijkę z pliku cudzysłów Wiek kropka txt cudzysłów. Linia 13. uczeń otwórz nawias kwadratowy i minus 1 zamknij nawias kwadratowy kropka Ulica znak równości wczytaj i minus tą linijkę z pliku cudzysłów Ulica kropka txt cudzysłów.
  1. Tworzymy strukturę zawierającą dane na temat dzieci uczęszczających do przedszkola oraz określamy typy tych danych. [linie kodu od 1 do 5]

  2. Tworzymy tablicę, która będzie przechowywać dane dotyczące każdego ucznia. [linia kodu 7]

  3. Importujemy dane w pętli (wiersz po wierszu) dla każdego ucznia. [linie kodu od 9 do 13]

Rozwiązanie zadań

Podpunkt 1
Linia 1. ilość znak równości 0. Linia 2. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły uczeń zamknij nawias okrągły minus 1 wykonuj dwukropek. Linia 3. jeżeli uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Płeć znak równości cudzysłów d cudzysłów ORAZ uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Ulica znak równości cudzysłów Kwiatowa cudzysłów wykonaj dwukropek. Linia 4. ilość znak równości ilość plus 1. Linia 6. wypisz otwórz nawias okrągły ilość zamknij nawias okrągły.
  1. Tworzymy zmienną przechowującą liczbę dziewczynek spełniających kryteria, zawarte w podpunkcie oraz inicjujemy pętlę, w której je zliczymy. [linie kodu 1, 2]

  2. Sprawdzamy, czy dane ze struktury, dotyczące jednej osoby, spełniają wymagania – jeżeli tak, inkrementujemyinkrementacjainkrementujemy wartość zmiennej ilość. [linie kodu 3, 4]

  3. Na koniec wypisujemy wyniki. [linia kodu 6]

Podpunkt 2
Ważne!

W rozwiązaniu stosujemy sortowanie bąbelkowesortowanie bąbelkowesortowanie bąbelkowe.

Linia 1. dla i znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły uczen zamknij nawias okrągły minus 1 wykonuj dwukropek. Linia 2. dla j znak równości 1 przecinek 2 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły uczen zamknij nawias okrągły minus 1 wykonuj dwukropek. Linia 3. jeżeli uczeń otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy kropka IdUcznia zamknij nawias ostrokątny uczeń otwórz nawias kwadratowy j zamknij nawias kwadratowy kropka IdUcznia wykonaj dwukropek. Linia 4. zamień otwórz nawias okrągły uczeń otwórz nawias kwadratowy j zamknij nawias kwadratowy uczeń otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 7. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 4 wykonuj dwukropek. Linia 8. wypisz otwórz nawias okrągły uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Płeć zamknij nawias okrągły.
  1. Inicjujemy sortowanie bąbelkowe, przesuwając na koniec tablicy elementy większe, znajdujące się na początku. Pętla wewnętrzna służy do umieszczania pojedynczych elementów w odpowiednich miejscach. Natomiast pętla zewnętrzna zapewnia, że każdy element zostanie właściwie przesunięty.  [linie kodu 1, 2]

  2. W każdej iteracji pętliiteracja pętliiteracji pętli, gdy sprawdzane elementy znajdują się względem siebie w odwrotnym porządku do przyjętego, następuje zamiana miejsc danych. [linia kodu 4]

  3. Na koniec wypisujemy pożądaną liczbę danych. [linia kodu 7, 8]

Podpunkt 3
Linia 1. ulice otwórz nawias kwadratowy 18 zamknij nawias kwadratowy. Linia 2. j znak równości 0. Linia 3. czyPowtórka znak równości 0. Linia 4. ileUlic znak równości 0. Linia 6. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 17 wykonuj dwukropek. Linia 7. ulice otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości cudzysłów cudzysłów. Linia 9. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły uczeń zamknij nawias okrągły minus 1 wykonuj dwukropek. Linia 10. jeżeli uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Wiek znak równości znak równości 6 ORAZ uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka IdUcznia procent 2 znak równości znak równości 1 dwukropek. Linia 11. wykonuj dwukropek. Linia 12. j znak równości j plus 1. Linia 13. jeżeli ulice otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Ulica wykonaj dwukropek. Linia 14. czyPowtórka znak równości 1. Linia 15. przerwij pętlę. Linia 16. dopóki ulice otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości cudzysłów cudzysłów. Linia 17. jeżeli czyPowtórka znak równości znak równości 0 wykonaj dwukropek. Linia 18. ulice otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Ulica. Linia 19. ileUlic znak równości ileUlic plus 1. Linia 20. j znak równości 0. Linia 21. czyPowtórka znak równości 0. Linia 22. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek ileUlic minus 1 wykonuj dwukropek. Linia 23. wypisz otwórz nawias okrągły ulice otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły.
  1. Tworzymy następujące zmienne pomocnicze: [linie kodu od 1 do 4]

  • Ulice – tablica przechowująca nazwy szukanych ulic;

  • j – zmienna pomocnicza służąca do poruszania się po tablicy;

  • czyPowtórka – zmienna pomocnicza odpowiedzialna za sprawdzanie, czy dana ulica została wcześniej zapisana na liście;

  • ileUlic – zmienna przechowująca informacje, na ilu ulicach mieszkają przedszkolaki spełniające wymagania.

  1. Wypełniamy zmienną przechowującą nazwy ulic pustymi znakami, aby ułatwić sprawdzanie, czy dopisana ulica nie byłaby duplikatem. [linie kodu 6, 7]

  2. Następnie sprawdzamy, czy dana osoba spełnia kryteria zawarte w zadaniu – jeżeli tak, przechodzimy do uzupełniania listy ulic. [linie kodu 9, 10]

  3. Przy wpisywaniu ulic na listę, przechodzimy po kolejnych pozycjach tablicy. Jeżeli dana ulica znajduje się już na liście, zmieniamy wartość zmiennej czyPowtórka na 1 oraz przerywamy działanie pętli. [linie kodu od 11 do 16]

  4. Jeżeli po zakończeniu działania pętli zmienna czyPowtórka przyjmuje wartość 0, to znaczy, że analizowana ulica nie znajduje się jeszcze na liście, więc dopisujemy ją i ustawiamy wartość zmiennych pomocniczych na bazowe oraz inkrementujemy wartość zmiennej ileUlic[linie kodu od 17 do 21]

  5. Na koniec wypisujemy w pętli wszystkie ulice znajdujące się na liście. [linie kodu 22, 23]

Zadanie 1.2

Przy sprawdzaniu poprawności danych okazało się, że do dziennika wkradły się błędy.

Błędne dane występują, gdy:

  1. IdUcznia jest kwadratem liczby naturalnej oraz wiek jest parzysty;

  2. suma wieku poprzedniego oraz obecnie sprawdzanego ucznia jest liczbą pierwszą, a także gdy nazwa ulicy zaczyna się od „K”.

Usuń błędne dane, a następnie wypisz, ile takich błędnych danych znajdowało się w dzienniku.

Ważne!

Zadanie należy wykonać, działając na strukturze stworzonej według wzoru w zadaniu 1.1.

Nie występuje sytuacja, gdy błędne dane sąsiadują ze sobą.

Korzystając z informacji z polecenia oraz wykorzystując dane zawarte w plikach tekstowych, rozwiąż zadania, a następnie sprawdź poprawność odpowiedzi na końcu sekcji.

Rozwiązanie

Ważne!

W przedstawionym rozwiązaniu została użyta struktura wykorzystana w zadaniu 1.1.

Linia 1. ileBłędów znak równości 0. Linia 2. poprzedni znak równości 9. Linia 4. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły uczeń zamknij nawias okrągły minus 1 wykonuj dwukropek. Linia 5. jeżeli pierwiastek otwórz nawias okrągły uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka IdUcznia zamknij nawias okrągły procent 1 znak równości znak równości 0 ORAZ uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Wiek procent 2 znak równości znak równości 0 dwukropek. Linia 6. usuń otwórz nawias okrągły uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły. Linia 7. ileBłędów znak równości ileBłędów plus 1. Linia 8. jeżeli otwórz nawias okrągły poprzedni plus uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Wiek znak równości znak równości 7 LUB poprzedni plus uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Wiek znak równości znak równości 11 zamknij nawias okrągły ORAZ uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka Ulica otwórz nawias kwadratowy 1 zamknij nawias kwadratowy znak równości cudzysłów K cudzysłów wykonaj dwukropek. Linia 9. usuń otwórz nawias okrągły uczeń otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły. Linia 10. ileBłędów znak równości ileBłędów plus 1. Linia 11. poprzedni znak równości uczeń kropka Wiek otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 13. wypisz otwórz nawias okrągły ileBłędów zamknij nawias okrągły.
  1. Tworzymy zmienne pomocnicze: [linie kodu 1, 2]

  • ileBłędów – zlicza wszystkie nieprawidłowe dane;

  • poprzedni – przechowuje wiek poprzedniego ucznia. Na początku ustalamy jej wartość na taką, aby suma wieku pierwszej sprawdzanej osoby (niezależnie jaki ten wiek jest) oraz zmiennej poprzedniej nie była liczbą pierwszą.

  1. Następnie w każdej iteracji pętli sprawdzamy, czy nie natknęliśmy się na błędne dane. [linie kodu 5, 8]

  • Dla pierwszego kryterium sprawdzamy, czy pierwiastek funkcji jest całkowity (w zaprezentowanym kodzie została do tego użyta operacja znajdowania reszty z dzielenia) oraz czy wiek jest parzysty.

  • Dla drugiego kryterium sprawdzamy, czy suma zmiennej poprzedni oraz wieku sprawdzanego ucznia jest liczbą pierwszą – jedynymi możliwymi liczbami pierwszymi, które mogłyby zostać otrzymane po zsumowaniu liczb z zakresu [3; 6] są 7 oraz 11. Ponadto sprawdzamy, czy pierwsza litera ulicy to „K”.

  1. Kiedy natkniemy się na błędne dane, inkrementujemy wartość zmiennej ileBłędów oraz usuwamy sprawdzaną daną ze struktury. Na koniec iteracji pętli ustawiamy wartość zmiennej poprzedni na wiek sprawdzonego w tej pętli ucznia. [linie kodu 6, 7 oraz od 9 do 11]

  2. Na koniec wypisujemy wartość zmiennej ileBłędów, co kończy działanie programu. [linia kodu 13]

Odpowiedzi do zadania 1.1

  1. 12

  2. c, c, c, d, d

  3. Plik zawierający spis ulic:

R6Ux2hgtJC2vk

Plik tekstowy zawierający nazwy ulic.

Plik TXT o rozmiarze 147.00 B w języku polskim

Odpowiedzi do zadania 1.2

  • Liczba błędnych danych dla pierwszego podpunktu: 9

  • Liczba błędnych danych dla drugiego podpunktu: 13

  • Łączna liczba błędnych danych: 22

Słownik

inkrementacja
inkrementacja

zwiększenie wartości zmiennej o 1

iteracja pętli
iteracja pętli

jednokrotne całościowe wykonanie instrukcji zawartej w pętli

sortowanie bąbelkowe
sortowanie bąbelkowe

sortowanie polegające na porównywaniu dwóch sąsiadujących ze sobą elementów w kolejności od lewej do prawej i zamianie ich ze sobą, jeżeli znajdują się w nieprawidłowej kolejności