Przykład zastosowania struktur

Zapoznaliśmy się już z różnymi algorytmami sortowania. Wykorzystywaliśmy je do porządkowania zbiorów złożonych z liczb całkowitych. Tym razem posłużymy się jednym z omówionych algorytmów, by posortować zbiór informacji zapisanych jako struktury.

Najpierw zdefiniujemy strukturę uczen, w której będziemy przechowywać dane ucznia szkoły podstawowej, reprezentowane przez odpowiednie polapole strukturypola:

Linia 1. struct uczen otwórz nawias klamrowy. Linia 2. string imie średnik. Linia 3. string nazwisko średnik. Linia 4. double sredniaOcen średnik. Linia 5. zamknij nawias klamrowy średnik.

Następnie stworzymy tablicę przechowującą wszystkich uczniów tej klasy. W pętli uzupełniamy dane dla każdego z uczniów:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny string zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. struct uczen otwórz nawias klamrowy. Linia 6. string imie średnik. Linia 7. string nazwisko średnik. Linia 8. double sredniaOcen średnik. Linia 9. zamknij nawias klamrowy średnik. Linia 11. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. const int LICZBA podkreślnik UCZNIOW znak równości 10 średnik. Linia 13. uczen klasa otwórz nawias kwadratowy LICZBA podkreślnik UCZNIOW zamknij nawias kwadratowy średnik. Linia 15. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny LICZBA podkreślnik UCZNIOW średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj imię dwukropek cudzysłów średnik. Linia 17. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka imie średnik. Linia 18. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj nazwisko dwukropek cudzysłów średnik. Linia 19. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka nazwisko średnik. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj średnią ocen dwukropek cudzysłów średnik. Linia 21. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka sredniaOcen średnik. Linia 22. zamknij nawias klamrowy. Linia 24. return 0 średnik. Linia 25. zamknij nawias klamrowy.

Tablicę uczniów posortujemy nierosnąco, przyjmując za kryterium średnią ocen. Zastosujemy poznany wcześniej algorytm sortowania przez wstawianie (omówiony w e‑materiale Sortowanie przez wstawianiePBKydb4qDSortowanie przez wstawianie). Wprowadzimy w nim jednak kilka zmian, aby zaadaptować go do przetwarzania struktur.

Oto zapisany w języku C++ algorytm sortowania tablicy wypełnionej liczbami metodą przez wstawianie:

Linia 1. int tablica otwórz nawias kwadratowy 10 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 1 przecinek 4 przecinek 2 przecinek 8 przecinek 6 przecinek 11 przecinek 3 przecinek 7 przecinek 5 przecinek 12 zamknij nawias klamrowy średnik. Linia 2. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny 10 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. int wstawianyElement znak równości tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik. Linia 4. int j znak równości i średnik. Linia 6. while otwórz nawias okrągły j zamknij nawias ostrokątny 0 ampersant ampersant wstawianyElement zamknij nawias ostrokątny tablica otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. tablica otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości tablica otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik. Linia 8. j minus minus średnik. Linia 9. zamknij nawias klamrowy. Linia 10. tablica otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości wstawianyElement średnik. Linia 11. zamknij nawias klamrowy.

Pierwszą poprawkę wprowadzimy w wyrażeniu sterującym działaniem pętli while. Nie możemy sprawdzić, czy jedna struktura jest większa od innej. Zamiast tego porównamy średnie ocen uczniów.

Druga modyfikacja jest związana z typem zmiennej wstawianyElement. Będzie ona przechowywać jedną ze struktur, dlatego musi być zmienną w typie tej struktury.

Oto kod programu zawierający zmodyfikowany algorytm sortowania:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny string zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. struct uczen otwórz nawias klamrowy. Linia 6. string imie średnik. Linia 7. string nazwisko średnik. Linia 8. double sredniaOcen średnik. Linia 9. zamknij nawias klamrowy średnik. Linia 11. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. const int LICZBA podkreślnik UCZNIOW znak równości 10 średnik. Linia 13. uczen klasa otwórz nawias kwadratowy LICZBA podkreślnik UCZNIOW zamknij nawias kwadratowy średnik. Linia 15. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny LICZBA podkreślnik UCZNIOW średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj imię dwukropek cudzysłów średnik. Linia 17. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka imie średnik. Linia 18. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj nazwisko dwukropek cudzysłów średnik. Linia 19. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka nazwisko średnik. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj średnią ocen dwukropek cudzysłów średnik. Linia 21. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka sredniaOcen średnik. Linia 22. zamknij nawias klamrowy. Linia 24. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny LICZBA podkreślnik UCZNIOW średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 25. uczen wstawianyElement znak równości klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik. Linia 26. int j znak równości i średnik. Linia 28. while otwórz nawias okrągły j zamknij nawias ostrokątny 0 ampersant ampersant wstawianyElement kropka sredniaOcen zamknij nawias ostrokątny klasa otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy kropka sredniaOcen zamknij nawias okrągły otwórz nawias klamrowy. Linia 29. klasa otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości klasa otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik. Linia 30. j minus minus średnik. Linia 31. zamknij nawias klamrowy. Linia 32. klasa otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości wstawianyElement średnik. Linia 33. zamknij nawias klamrowy. Linia 35. return 0 średnik. Linia 36. zamknij nawias klamrowy.

Na koniec wypiszemy zawartość tablicy klasa, aby upewnić się, że została ona posortowana poprawnie:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny string zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. struct uczen otwórz nawias klamrowy. Linia 6. string imie średnik. Linia 7. string nazwisko średnik. Linia 8. double sredniaOcen średnik. Linia 9. zamknij nawias klamrowy średnik. Linia 11. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. const int LICZBA podkreślnik UCZNIOW znak równości 10 średnik. Linia 13. uczen klasa otwórz nawias kwadratowy LICZBA podkreślnik UCZNIOW zamknij nawias kwadratowy średnik. Linia 15. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny LICZBA podkreślnik UCZNIOW średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj imię dwukropek cudzysłów średnik. Linia 17. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka imie średnik. Linia 18. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj nazwisko dwukropek cudzysłów średnik. Linia 19. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka nazwisko średnik. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj średnią ocen dwukropek cudzysłów średnik. Linia 21. cin zamknij nawias ostrokątny zamknij nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka sredniaOcen średnik. Linia 22. zamknij nawias klamrowy. Linia 24. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny LICZBA podkreślnik UCZNIOW średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 25. uczen wstawianyElement znak równości klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik. Linia 26. int j znak równości i średnik. Linia 28. while otwórz nawias okrągły j zamknij nawias ostrokątny 0 ampersant ampersant wstawianyElement kropka sredniaOcen zamknij nawias ostrokątny klasa otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy kropka sredniaOcen zamknij nawias okrągły otwórz nawias klamrowy. Linia 29. klasa otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości klasa otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik. Linia 30. j minus minus średnik. Linia 31. zamknij nawias klamrowy. Linia 32. klasa otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości wstawianyElement średnik. Linia 33. zamknij nawias klamrowy. Linia 35. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny LICZBA podkreślnik UCZNIOW średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 36. cout otwórz nawias ostrokątny otwórz nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka imie otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka nazwisko otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny klasa otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka sredniaOcen otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 37. zamknij nawias klamrowy. Linia 39. return 0 średnik. Linia 40. zamknij nawias klamrowy.

Słownik

pole struktury
pole struktury

element wchodzący w skład struktury; poszczególnym polom struktury przypisane są nazwy; określa się także typ wartości przechowywanej w polu