Opracowanie: mgr inż. Piotr Szmidt
Programowanie w C++
Lab 8 Struktury danych
1. Struktury danych
Dotychczas używaliśmy wbudowanych typów danych, takich jak np. int czy float, które mogły tworzyć zmienne przechowującą odpowiednio jedną wartość całkowitoliczbową (int) lub
zmiennoprzecinkową (dla float). Tablice z kolei pozwalają na przechowywanie wielu zmiennych, ale tego samego typu. Niekiedy jest to niewystarczające, gdy zachodzi potrzeba np. opisu wielu obiektów o różnych cechach. Struktury w języku C/C++ pozwalają na łatwiejsze tworzenie i zarządzanie
powiązanymi ze sobą danymi. Składnia deklaracji struktury jest następująca:
struct nazwa_struktury {
typ element1;
typ element2;
…
typ elementN;
};
Przykład 1. Stwórzmy za pomocą struktury nowy typ samochod (rys 1.), który może przechowywać takie dane jak: marka (typu string), model (typu string), kolor (typu string), rok_produkcji (typu int).
Cały program:
#include <iostream>
using namespace std;
//deklaracja struktury struct samochod
{ // elementy struktury wraz z typami string marka;
string model;
string kolor;
int rok_produkcji;
};
int main() {
// utworzenie trzech obiektów typu samochod i definicja ich elementów samochod auto1 = {"VW", "Passat", "Granatowy", 2006};
samochod auto2 = {"BMW", "M550d", "Czarny", 2013};
Struktura samochod string marka;
string model;
string kolor;
int rok_produkcji; Rys. 1. Schemat blokowy struktury samochod
Opracowanie: mgr inż. Piotr Szmidt
samochod auto3 = {"Ferrari", "F50", "Czerwony", 1996};
// wyswietlenie tabelki
cout << "Marka \tModel \tRok \tKolor" << endl;
cout << "---" << endl;
cout << auto1.marka << "\t" << auto1.model << "\t" << auto1.rok_produkcji << "\t" << auto1.kolor << endl;
cout << auto2.marka << "\t" << auto2.model << "\t" << auto2.rok_produkcji << "\t" << auto2.kolor << endl;
cout << auto3.marka << "\t" << auto3.model << "\t" << auto3.rok_produkcji << "\t" << auto3.kolor << endl;
return 0;
}
1.1. Zapis do elementów struktury
Przypisanie wartości elementów danej struktury można zrealizować podczas tworzenia nowego obiektu tej struktury, tak jak w powyższym przykładzie, czyli np.:
samochod auto2 = {"BMW", "M550d", "Czarny", 2013};
Można też odwoływać się pojedynczo do kolejnych elementów obiektu.
samochod auto2;
auto2.marka = "BMW";
auto2.model = "M550d";
auto2.kolor = "Czarny";
auto2.rok_produkcji = 2013;
Nic nie też stoi na przeszkodzie, żeby dane do wczytywać z klawiatury, np.
cout << "Podaj marke auta: ";
cin >> auto2.marka;
1.2. Odczyt elementów struktury
Podobnie jak przy zapisie, odczyt konkretnego elementu struktury można uzyskać za pomocą operatora kropki.
cout << "Marka samochodu" << auto2.marka;
2. Tablice struktur
Używanie struktur do organizacji danych jest znacznie wygodniejsze niż tworzenie pojedynczych zmiennych. Ale jeszcze bardziej wygodne, zwłaszcza przy rozbudowanych programach, jest wykorzystywanie tablic struktur, jak przedstawia przykład 2. Zamiast tworzyć trzy osobne obiekty typu samochód, tworzymy tablicę obiektów typu samochód. Dzięki temu w łatwy sposób wyświetlać poszczególne elementy tablicy (samochody) czy je dodawać lub usuwać.
Przykład 2. Przykład wykorzystania tablicy obiektów typu samochod.
Cały program:
#include <iostream>
using namespace std;
// delkraracja struktury samochód struct samochod
Opracowanie: mgr inż. Piotr Szmidt
{ // składowe struktury string marka;
string model;
string kolor;
int rok_produkcji;
};
int main() { int liczba_aut = 3;
samochod auta[] = {{"VW", "Passat", "Granatowy", 2006}, {"BMW", "M550d", "Czarny", 2013}, {"Ferrari", "F50", "Czerwony", 1996}};
cout << "Marka \tModel \tRok \tKolor" << endl;
cout << "---" << endl;
for (int i = 0; i < liczba_aut; i++) {
cout << auta[i].marka << "\t" << auta[i].model << "\t" << auta[i].rok_produkcji << "\t" << auta[i].kolor << endl;
} return 0;
}