background image
background image

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ć.

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.

background image

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; 

background image

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:

background image

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.

background image

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.

background image

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 

background image

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

background image

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 


Document Outline