Lekcja 22
Struktury - część 2 - tablice struktur w języku C++
Wprowadzenie
W tej lekcji postaram Ci się przybliżyć struktury oraz przedstawić nieco bardziej zaawansowane sposoby ich użycia i definicji. Po raz kolejny pragnę zaznaczyć, że cały czas będę operował na uproszczonym modelu struktur, który działa zarówno w języku C, jak i C++.
Tablice w strukturach
Ponieważ struktury mają w jakimś stopniu odzwierciedlać rzeczywistość, to nie można zakładać, że wszystkie dane w strukturze są prostymi typami danych. Jednym z typów, który może się w strukturze pojawić jest tablica.
Odzwierciedlenie tego w rzeczywistości jest dość proste. Gdybyśmy chcieli utworzyć strukturę klasa (w sensie klasa, którą tworzą uczniowie w jakiejś szkole), to wówczas tak naprawdę struktura klasa powinna zawierać tablicę nazwisk uczniów w klasie lub jeszcze lepiej tablicę struktur uczeń (takim przypadkiem zajmiemy się w dalszej części tej lekcji).
Niestety na tym poziomie wiedzy, realizacja nawet tak prostego przykładu nie jest jeszcze możliwa, bowiem tablica w języku C++ musi mieć ściśle określony rozmiar. A niestety na początku tworzenia naszej struktury klasa, nie wiadomo ile będzie w niej uczniów (Możemy oczywiście założyć, że będzie maksimum 40 uczniów i utworzyć tablicę o 40 elementach, ale w ten sposób możemy zmarnować sporą część pamięci operacyjnej).
Dlatego też, na razie zajmiemy się nieco prostszym przypadkiem. Załóżmy, że mamy strukturę samochód i że rozpatrujemy samochody 4-kołowe. Podczas jazdy samochodem może się oczywiście zdarzyć awaria koła (np. przebicie opony, urwanie koła itd.) i my chcielibyśmy w jakiś sposób zasygnalizować, że z którymś z kół stało się coś niedobrego.
Do przechowywania stanu kół użyjemy tablicy 4-elementowej - tutaj możemy użyć tablicy, bowiem rozpatrujemy zawsze samochody 4-kołowe. Każde koło może być albo sprawne (wartość logiczna true) albo niesprawne (wartość logiczna false).
W programie użyjemy dodatkowo wbudowaną funkcję rand, która generuje pseudolosowe liczby całkowite. Przede wszystkim, aby funkcja rand działała zgodnie z naszymi oczekiwaniami, należy przed jej użyciem jednokrotnie użyć zapisu:
srand(static_cast<unsigned>(time(0)));
Jest to tak jakby inicjalizacja dla losowania liczb i jeśli ta linia zostałaby pominięta, wówczas funkcja losowa przy każdym uruchomieniu programu losowałaby identyczną liczbę.
Z kolei zapis:
rand()%4;
oznacza, że uzyskamy losową liczbę całkowitą z przedziału 0 - 3, czyli 0, 1, 2 lub 3. Funkcja rand losuje bowiem liczbę z bardzo dużego przedziału i aby otrzymać żądaną liczbę, należy dokonać dzielenia modulo za pomocą operatora %.
W samym programie wprowadzimy założenie, że samochód może jeździć tak długo, jak ma uszkodzone co najwyżej jedno koło. Gdy drugie koło zostaje uszkodzone, wówczas samochód kończy jazdę.