W strukturalnych językach programowania w celu przechowania informacji o 50 uczniach (ich imionach, nazwiskach, średniej ocen) należy użyć
A. struktury 50 elementów o składowych typu tablicowego.
B. klasy 50 elementów typu tablicowego.
C. tablicy 50 elementów o składowych strukturalnych.
D. tablicy 50 elementów o składowych łańcuchowych.
Pytanie z egzaminu CKE, czerwiec 2015 (arkusz E.14-X-15.05).
Najlepszym rozwiązaniem jest tablica 50 elementów, w której każdy element jest strukturą opisującą jednego ucznia. W praktyce wygląda to tak: tworzymy typ strukturalny, np. Uczen, a w nim pola: imie jako łańcuch znaków, nazwisko jako łańcuch znaków oraz srednia jako liczba rzeczywista, np. float albo double. Potem deklarujemy tablicę: klasa[50]. Dzięki temu klasa[0] oznacza jednego konkretnego ucznia, klasa[1] następnego i tak dalej. To jest bardzo czytelne i zgodne z dobrymi praktykami programowania strukturalnego, bo dane logicznie należące do jednej osoby są trzymane razem. Moim zdaniem to jedna z najważniejszych intuicji przy strukturach: nie rozrzucamy informacji po osobnych miejscach, tylko modelujemy obiekt z rzeczywistości jako rekord danych. Łatwo wtedy sortować uczniów po średniej, wyszukiwać po nazwisku, wypisywać listę klasy albo przekazywać dane jednego ucznia do funkcji. W językach takich jak C użyto by struct, w Pascalu record, ale idea jest ta sama: tablica przechowuje wiele rekordów, a każdy rekord ma pola różnych typów.
W tym pytaniu łatwo pomylić dwie rzeczy: przechowywanie wielu wartości tego samego typu oraz opisanie jednego obiektu, który ma kilka różnych cech. Uczeń nie jest tylko napisem ani tylko liczbą. Ma imię, nazwisko i średnią ocen, czyli zestaw powiązanych danych, najczęściej różnych typów. Dlatego sama tablica łańcuchów znakowych nie wystarcza, bo dobrze przechowa np. imiona albo nazwiska, ale nie opisze pełnego rekordu ucznia razem ze średnią liczbową. Można oczywiście kombinować i zapisywać wszystko jako tekst, ale to słaba praktyka: średniej nie da się wtedy wygodnie porównywać, sortować ani obliczać na niej statystyk bez konwersji. Konstrukcja oparta na jednej strukturze zawierającej tablice pól też bywa spotykana, np. osobna tablica imion, osobna nazwisk i osobna średnich, ale w klasycznym programowaniu strukturalnym przy takim zadaniu jest to mniej naturalne i łatwiej o pomyłkę indeksów. Jeśli imiona[7], nazwiska[7] i srednie[7] przypadkiem się rozjadą, dane ucznia przestają być spójne. Klasa natomiast kojarzy się z programowaniem obiektowym, a pytanie dotyczy języków strukturalnych i typów rekordowych. W takim kontekście nie tworzy się klasy 50 elementów typu tablicowego, tylko definiuje strukturę pojedynczego ucznia, a następnie tworzy tablicę 50 takich struktur. To prostsze, czytelniejsze i bliższe temu, jak takie dane projektuje się w normalnym kodzie.