Przetwarzanie danych typu rekordowego
Do tej pory w C++ używaliśmy tablicowy typ danych. Tablice służą do przechowywania danych tego samego typu. Często zdarza się że na opis pojedynczego obiektu składają się dane różnych typów, mówimy tutaj o typie strukturalnym który umożliwia zapisanie danych różnego typu w ramach jednej struktury.
Opis rekordu składającego się z różnych typów:
Dane opisujące ucznia:
Imie (ciąg znaków)
Nazwisko (ciąg znaków)
Wiek (liczba całkowita)
w kodzie źródłowym C++ wygląda następująco:
#include<iostream>
using namespace std;
struct TUczen
{
char imie[21];
char nazwisko [41];
int wiek;
};
struct TUczen Uczen;
int main()
{
cout<<"Podaj imie: ";
cin>>Uczen.imie;
cout<<"Podaj nazwisko: ";
cin>>Uczen.nazwisko;
cout<<"Podaj wiek: ";
cin>>Uczen.wiek;
cout<<endl<<endl;
cout<<"Imie ucznia to: "<<Uczen.imie<<endl;
cout<<"Nazwisko ucznia to: "<<Uczen.nazwisko<<endl;
cout<<"Wiek ucznia to: "<<Uczen.wiek<<endl;
}
Możliwa też jest sytuacja kiedy struktura może być elementem tablicy np.:
#include<iostream>
using namespace std;
struct TUczen
{
char imie[21];
char nazwisko [41];
int wiek;
};
struct TUczen Uczen[100];
int main()
{
int n;
cout<<"Podaj ile wpisac uczniow: ";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"Podaj imie: ";
cin>>Uczen[i].imie;
cout<<"Podaj nazwisko: ";
cin>>Uczen[i].nazwisko;
cout<<"Podaj wiek: ";
cin>>Uczen[i].wiek;
cout<<endl;
}
cout<<endl<<endl;
for(int i=0;i<n;i++)
{
cout<<"Imie ucznia to: "<<Uczen[i].imie<<endl;
cout<<"Nazwisko ucznia to: "<<Uczen[i].nazwisko<<endl;
cout<<"Wiek ucznia to: "<<Uczen[i].wiek<<endl;
cout<<endl<<endl;
}
}
Możliwe jest też zapamiętanie w rekordzie daty urodzenia konkretnego ucznia.
Odpowiednie odwołania do nowych pól będą miały postać:
Uczen[i].Data_ur.dzien
Uczen[i].Data_ur.miesiac
Uczen[i].Data_ur.rok
cała struktura będzie miała postać:
struct TUczen
{
char imie[21];
char nazwisko [41];
int wiek;
struct TData_ur
{
unsigned short dzien;
unsigned short miesiac;
int rok;
} Data_ur;
};
struct TUczen Uczen[100];