Struktury umożliwiają przechowywanie kilku informacji
o jednym elemencie (obiekcie), dzięki czemu
operowanie na jednym obiekcie bardziej odzwierciedla
rzeczywistość. Dane mogą być różnego typu (integer,
string, char etc.) i można je w każdej chwili dodawać,
edytować i odczytywać.
W Pascalu odpowiednikiem struktur są rekordy (typ
rekordowy)
STRUKTURA TO NIE TABLICA
O ile tablice pozwalały na pomieszczenie w jednej
strukturze wielu danych tego samego typu, rekordy
umożliwiają zamknięcie w całość danych różnych
typów, nie pozwalając z kolei na indeksowany do
nich dostęp.
PRZKŁAD ZASTOSOWANIA
Przykładem zastosowania struktury może być
baza adresowa, zapisywana do tablicy, jednakże jej
poszczególne pola wczytywane są za pomocą
rekordów pobierających dane takie jak: Imię, wiek,
adres itd.
C++
PASCAL
Struct dane
Type dane = record
{
imie: String[25];
char imie[30];
wiek: Byte;
int wiek;
adres: String[30];
}
End;
//deklaracja zmiennej struktury
//deklaracja zmiennej rekordu
Struct dane osoba
Var osoba : dane;
C++
PASCAL
{
Begin
//zapis
//zapis
osoba.imie = „Marcin”;
osoba.imie := „Marcin”;
cin >> osoba.imie;
readln(osoba.imie);
//odczyt
//odczyt
cout << osoba.imie;
writeln(osoba.imie);
Dane możemy zarówno odczytywać jak i zapisywać odwołując
się do konkretnej komórki w zaprezentowany poniżej sposób:
C++
PASCAL
struct dane osoba[100];
Type table = array[1..100] of dane
Var osoba:table;
//odwołanie do komórki
//odwołanie do komórki
{
Begin
adresy[1].imie = „Marcin”;
osoba[1].imie := „Marcin”;
cout << adresy[1].imie;
writeln(osoba[1].imie);
}
End;
Struktury mogą być tablicami struktur, pozwala to na zapis wielu
elementów o różnych typach w jednej tablicy.
Rekord może być elementem tablicy.
Chcąc odczytać lub zapisać dane należy odwołać się do konkretnej
komórki tablicy oraz do konkretnego wiersza struktury.
C++
PASCAL
plik = fopen("D:/lud.txt","w");
//otwieranie pliku
Type table = array[1..100] of dane
Var osoba:table;
fprintf(plik, "%s ",
&adresy[1].imie,);
//odwołanie do komórki
Begin
fclose(plik);
//zamykanie pliku
osoba[1].imie := „Marcin”;
writeln(osoba[1].imie);
End;
Struktury można zapisywać do plików, pierwszą metodą opcją
jest zapis struktury z możliwością czytelnego przeglądania pliku.
C++
FILE *plik;
{
plik = fopen("D:/ludbin.dat","w");
//otwieranie pliku
fwrite(&adresy,sizeof(ludzie),100,plik);
fclose(plik);
//zamykanie pliku
}
Drugą metodą jest zapis binarny struktury, zawartość
pliku można wyświetlić wczytując go odpowiednio
do programu.
Objaśnienie (fwrite)
&adresy – zmienna strukturalna
sizeof(ludzie) - rozmiar struktury
100,-ilość struktur
Plik- wskaźnik do pliku
C++
PASCAL
plik = fopen("D:/lud.txt","w");
//otwieranie pliku
var
a : file of plik;
fprintf(plik, "%s ",
&adresy[1].imie,);
assign(a, NazwaPliku);
{ skojarz plik ze zmienną
plikową }
rewrite(a);
{ otwórz (utwórz) plik }
fclose(plik);
//zamykanie pliku
write(f, Katalog[1]);
close(a);
Struktury można zapisywać do plików, pierwszą metodą opcją
jest zapis struktury z możliwością czytelnego przeglądania pliku.
Tryby
"r"
otwiera plik jedynie do odczytu
"w"
tworzy plik i otwiera go do zapisu
"a"
tworzy plik i otwiera go do zapisu, dodaje dane
C++
FILE *plik;
{
plik = fopen("D:/ludbin.dat","w");
//otwieranie pliku
fread(&adresy,sizeof(ludzie),100,plik);
fclose(plik);
//zamykanie pliku
}
Odczyt z pliku binarnego umożliwia czytelne wyświetlenie
zawartości pliku zapisanego binarnia
Objaśnienie (fread)
&adresy – zmienna strukturalna
sizeof(ludzie) - rozmiar struktury
100,-ilość struktur
Plik- wskaźnik do pliku