background image

Wykład 4

• Strukturalne typy danych

• Tablice 
• Tablice znaków (napisy)
• Struktury
• Pliki 

background image

Typ tablicowy

Deklarowanie zmiennych:

int t1[10];

double t2[3][4]; 

int t[ ] = { 0,3,3,6,1,4,6,2,5,0,3,5 };

Odwołanie do elementów:

t1[a+3]=t1[a+4];

Cechy:

• statyczny rozmiar

• elementy indeksowane (numerowane) od 0

Problemy:

• odwołanie poza obszar tablicy

background image

Tablice znaków (napisy)

Stałe napisowe:

write(’to jest tekst’);

Pascal

printf(”to jest tekst”); 

Język C

cout << ”to jest tekst”; 

Język C++

Deklarowanie:

char buf[11];

char imie[] = ”Jola”;

Operacje we/wy:

cin >> buf;

cout << buf;                                  Uwaga na spacje!

Reprezentacja:

0    1      2     3     4     5      6     7     8      9    10 

J     o      l      a    \0  

background image

Operacje na łańcuchach

Deklarowanie:

var 

a,b : string[10];

Składanie:

a:=’jeden’;
b:=’dwa’;
a:=b+b;

Wczytywanie i wypisywanie:

write(a);

dwadwa 

write(b[2]);

w

read(a);

Porównywanie:

if a<>b then write(’różne’);

background image

Operacje na łańcuchach c.d.

Przykładowe funkcje:

length(s:string):integer
pos(sub:string; s:string):byte
concat(s1, [s2..sn]:string):string
copy(s:string; ind:integer; count:integer):string

Przykładowe procedury:

insert(s1:string; var s:string; ind:integer)
delete(var s:string; ind:integer; count:integer)

background image

Struktury (Rekordy)

Definiowanie:

struct zespolona

{

double re;

double im;

};

Deklarowanie zmiennych:

zespolona z1,z2;

zespolona t[100];

Nadawanie wartości:

z1.re=5;

z1.im=6;

background image

Struktury - przykład

struct data 

{

int dzien;

int miesiac;

int rok;

};

struct osoba

{

char imie[20];

char nazwisko[30];

data urodziny;

bool kobieta;

};

background image

Struktury - przykład

Przypisania:

Podstawienie rekordów:

Dostęp:

2/2

rob.imie := ‘Jola’;
rob.urodziny.dzien := 7;
rob.urodziny.miesiac := 6;
rob.kobieta := true;

tab[1] := rob;

if tab[1].kobieta then write(tab[1].imie);

background image

Pliki

Dostęp do pliku:

• sekwencyjny (taśmy)

• swobodny (dyski)

Struktura o elementach tego samego typu

Operacje:

#include <fstream>

ofstream wyjscie(”wyniki.txt”);

wyjscie << x1 << ” ” << x2;

wyjscie.close

eof

background image

Pliki

Obsługa błędów:

#include <fstream>

int a,b;

ifstream wejscie(”dane.txt”);

if (!wejscie)

{

cout << ”nie mogę otworzyć pliku”;

return 1;

}

wejscie >> a >> b;

wejscie.close;

wyjscie << a << ” ” << b;

background image

Operacje wykonywane na plikach

Deklarowanie

var  

f : file of T;

Procedury i funkcje:

assign(f, nazwa);        (open, fopen)

reset(f);
rewrite(f);
read(f, zm);
write(f, zm);
close(f);
eof(f);
seek(f, pos);

background image

Pliki tekstowe

Deklarownie:

var  f : text; 

{file of char}

Procedury i funkcje:

readln( )

writeln( )
eoln( )

Znak końca linii:

• DOS        CR LF
• UNIX      LF
• MacOS    CR

background image

Kopiowanie pliku tekstowego

assign(f1,’plik1.txt’);
assign(f2,’plik2.txt’);
reset(f1);
rewrite(f2); 
while not eof(f1) do
begin

while not eoln(f1) do
begin

read(f1,ch);
write(f2,ch)

end;
readln(f1);
writeln(f2)

end;
close(f1);
close(f2);