Wykład 4
• Strukturalne typy danych
• Tablice
• Tablice znaków (napisy)
• Struktury
• Pliki
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
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
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’);
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)
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;
Struktury - przykład
struct data
{
int dzien;
int miesiac;
int rok;
};
struct osoba
{
char imie[20];
char nazwisko[30];
data urodziny;
bool kobieta;
};
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);
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
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;
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);
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
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);