1
PS/TP
TI
TI
TI
TI----PS
PS
PS
PS----3
3
3
3
TYPY STRUKTURALNE
TYPY STRUKTURALNE
TYPY STRUKTURALNE
TYPY STRUKTURALNE
2
PS/TP
PROGRAMOWANIE STRUKTURALNE
Typy strukturalne
TABLICE
Uwaga:
Pocz
ą
tkuj
ą
cy powinni przeczyta
ć
najpierw artykuł
Macierze w
ż
yciu, matematyce i informatyce
3
PS/TP
PROGRAMOWANIE STRUKTURALNE
Tablica składa si
ę
z ustalonej liczby elementów tego samego typu,
zwanego typem składowym.
Typ składowy mo
ż
e by
ć
typem prostym, ła
ń
cuchowym, albo tak
ż
e strukturalnym.
Definicja pojedynczego
typu tablicowego
ma posta
ć
:
TYPE
identyfikator-typu
= ARRAY [typy-indeksowe] OF typ-składowy;
typy-indeksowe s
ą
typami porz
ą
dkowymi, oddziela si
ę
je przecinkami.
4
PS/TP
PROGRAMOWANIE STRUKTURALNE
TYPE
TMACIERZ = ARRAY [ 1..10 , 1..50 ] OF INTEGER;
TMACIERZ jest typem tablicowym o wymiarach 10 x 50, który mo
ż
e
przechowywa
ć
500 liczb całkowitych
Przykłady:
TYPE
TWEKTOR = ARRAY [1..200 ] OF REAL;
TWEKTOR jest typem tablicowym o wymiarach 1 x 200, który mo
ż
e
przechowywa
ć
200 liczb rzeczywistych.
Je
ś
li tablica jest jednowymiarowa, to w matematyce nazywamy j
ą
wektorem.
5
PS/TP
PROGRAMOWANIE STRUKTURALNE
TYPE
TMACIERZ = ARRAY [1..400 , 1..100 ] OF REAL;
TMACIERZ jest typem tablicowym o wymiarach 400 x 100, który mo
ż
e
przechowywa
ć
40000 liczb rzeczywistych
Je
ś
li tablica jest wielowymiarowa, to w matematyce nazywamy j
ą
macierz
ą
.
TYPE
TEKRAN = ARRAY [1..80 , 1..25 ] OF CHAR;
TEKRAN jest typem tablicowym o wymiarach 80 x 25, który mo
ż
e
przechowywa
ć
2000 znaków
Przykłady:
6
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przypomnienie:
7
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przypomnienie:
8
PS/TP
PROGRAMOWANIE STRUKTURALNE
B : ARRAY [ 1..6, 1..9 ] OF CHAR;
W j
ę
zyku Pascal macierz B jest tablic
ą
dwuwymiarow
ą
o indeksach 1..6 (czyt.
od 1 do 6) oraz 1..9 (czyt. od 1 do 9) – zawiera 6 wierszy i 9 kolumn.
Ka
ż
dy element tablicy B przechowuje warto
ść
typu znakowego CHAR (litery te
s
ą
znakami).
Aby wy
ś
wietli
ć
zawarto
ść
elementu tablicy B z 5 wiersza i 7 kolumny, nale
ż
y
posłu
ż
y
ć
si
ę
instrukcj
ą
write( B [ 5 , 7 ] ).
Natomiast
ż
eby wstawi
ć
jaki
ś
znak do tablicy B w 5 wierszu i 7 kolumnie,
u
ż
yjemy instrukcji B [ 5 , 7 ] := ‘@‘.
Przykłady:
9
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
10
PS/TP
PROGRAMOWANIE STRUKTURALNE
Posta
ć
tablicy C w j
ę
zyku Pascal:
C : ARRAY [ 1..4, 1..2 ] OF REAL;
Tablica C jest tablic
ą
dwuwymiarow
ą
o indeksach 1..4 (czyt. od 1 do 4) oraz
1..2 (czyt. od 1 do 2), czyli zawiera 4 wiersze i 2 kolumny. Ka
ż
dy element
tablicy C przechowuje warto
ść
typu rzeczywistego REAL.
Aby wy
ś
wietli
ć
liczb
ę
z tablicy C (np. z 4 wiersza i 2 kolumny), nale
ż
y
posłu
ż
y
ć
si
ę
instrukcj
ą
write( C [ 4, 2] ).
Natomiast
ż
eby wstawi
ć
liczb
ę
do tablicy C w 4 wierszu i 2 kolumnie,
u
ż
yjemy instrukcji C [ 4 , 2 ] := 1.20.
Uwaga: w j
ę
zykach programowania zamiast przecinka oddzielaj
ą
cego cz
ęść
całkowit
ą
od ułamkowej (liczba 1,20) stosuje si
ę
kropk
ę
(1.20). W arkuszu
kalkulacyjnym (Excel w wersji polskiej) stosuje si
ę
przecinek. Warto o tym
pami
ę
ta
ć
,
ż
eby unikn
ąć
bł
ę
dów podczas tworzenia programów w j
ę
zykach
Pascal, Delphi i innych !!!
Przykłady:
11
PS/TP
PROGRAMOWANIE STRUKTURALNE
Jak wyzerowa
ć
macierz (tablic
ę
)?
Wyzerowanie tablicy polega na wstawieniu zer do jej wszystkich elementów.
Nale
ż
y u
ż
y
ć
dwóch zagnie
ż
d
ż
onych p
ę
tli FOR:
FOR i := 1 TO 4 DO
FOR j := 1 TO 2 DO C[ i, j ] := 0.0;
Po wykonaniu tych p
ę
tli, zawarto
ść
tablicy C b
ę
dzie wygl
ą
dała nast
ę
puj
ą
co:
12
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykładowy program w Pascalu, zeruj
ą
cy tablic
ę
:
PROGRAM zeruj;
USES CRT;
VAR
MATRIX : ARRAY [1..4 , 1..2 ] OF REAL;
I , J : INTEGER;
BEGIN
FOR I := 1 TO 4 DO
FOR J := 1 TO 2 DO MATRIX[ I , J ] := 0.0;
END.
Przykłady:
13
PS/TP
PROGRAMOWANIE STRUKTURALNE
Typy strukturalne
PLIKI TEKSTOWE
i
OPERACJE
NA TEKSTACH
14
PS/TP
PROGRAMOWANIE STRUKTURALNE
W j
ę
zyku Pascal wyró
ż
niamy 3 rodzaje plików:
1. PLIK TEKSTOWY
2. PLIK ZDEFIONOWANY
3. PLIK NIEZDEFINIOWANY
15
PS/TP
PROGRAMOWANIE STRUKTURALNE
Plik tekstowy to zło
ż
ona struktura danych, która składa si
ę
z pewnej liczby
WIERSZY (W KA
ś
DYM WIERSZU S
Ą
ZNAKI) .
Ka
ż
dy wiersz jest zako
ń
czony par
ą
znaków steruj
ą
cych tj.
LF, CR
.
LF znaczy przejd
ź
do nowej linii, a CR - cofnij si
ę
na pocz
ą
tek linii.
Na ko
ń
cu ka
ż
dego pliku znajduje si
ę
znak
EOF
(jego kod to 26)
Definicja zmiennej
typu plikowego (tekstowego)
ma posta
ć
:
VAR
identyfikator-pliku
: TEXT;
16
PS/TP
PROGRAMOWANIE STRUKTURALNE
program pliki1;
uses Crt;
var
plik : Text;
wiersz : String;
begin
clrscr;
assign(plik, ‘tematy.txt ‘);
reset(plik);
repeat
readln(plik, wiersz);
writeln(wiersz);
until eof(plik);
close(plik);
readkey;
end.
Przykład prostego programu czytaj
ą
cego plik tekstowy:
17
PS/TP
PROGRAMOWANIE STRUKTURALNE
Wszystkie operacje na pliku dyskowym odbywaj
ą
si
ę
w Pascalu na tak zwanej
zmiennej plikowej
var
plik : Text;
Dla plików tekstowych b
ę
dzie ona typu TEXT.
Nie operuje si
ę
tutaj nazw
ą
pliku (np. TEMATY.TXT), tylko nale
ż
y skojarzy
ć
zmienn
ą
plikow
ą
z nazw
ą
fizycznego pliku:
assign ( plik, ‘tematy.txt ‘ ) ;
UWAGA:
18
PS/TP
PROGRAMOWANIE STRUKTURALNE
Schemat przetwarzania pliku
Opis zmiennej plikowej (w cz
ęś
ci deklaracyjnej)
skojarzenie zmiennej plikowej z fizycznym zbiorem danych
otwarcie pliku
zamkni
ę
cie pliku
Wykonywanie operacji na pliku
19
PS/TP
PROGRAMOWANIE STRUKTURALNE
Opis zmiennej plikowej (w cz
ęś
ci deklaracyjnej)
skojarzenie zmiennej plikowej z fizycznym zbiorem danych
otwarcie pliku
zamkni
ę
cie pliku
Wykonywanie operacji na pliku
VAR
F : text;
.
.
.
assign(F, nazwa_pliku);
.
reset(F);
.
.
.
readln(F, wiersz);
.
.
.
close(F);
20
PS/TP
PROGRAMOWANIE STRUKTURALNE
program pliki1;
uses Crt;
var
plik : Text; {
Opis zmiennej plikowej
}
wiersz : String;
begin
clrscr;
assign(plik, ‘tematy.txt ‘); {
skojarzenie zmiennej plikowej
}
reset(plik); {
otworzenie pliku do odczytu
}
repeat
readln(plik, wiersz); {
czytanie jednej linii pliku
}
writeln(wiersz);
until eof(plik); {
badanie czy nast
ą
pił ju
ż
koniec pliku
}
close(plik);
{
zamkni
ę
cie pliku
}
readkey;
end.
Schemat przetwarzania pliku pokazano na poni
ż
szym przykładzie:
21
PS/TP
PROGRAMOWANIE STRUKTURALNE
Co mo
ż
na robi
ć
z plikami?
•Tworzy
ć
nowe pliki
•Otwiera
ć
w trybie do odczytu
•Otwiera
ć
w trybie do zapisu (uwaga: je
ś
li plik ju
ż
istnieje to
nast
ę
puje
kasowanie zawarto
ś
ci całego pliku
)
•Otwiera
ć
w trybie do dopisywania
•Zamyka
ć
plik
•Odczytywa
ć
wiersz z pliku
•Wpisywa
ć
nowy wiersz na koniec pliku
•Bada
ć
, czy wyst
ą
pił koniec pliku
22
PS/TP
PROGRAMOWANIE STRUKTURALNE
Tworzenie nowego pliku
sssign
rewrite
Nale
ż
y otworzy
ć
plik w trybie do zapisu (uwaga: je
ś
li plik ju
ż
istnieje to nast
ę
puje
kasowanie zawarto
ś
ci całego pliku!!!
)
program pliki2;
uses Crt;
var
plik : Text;
wiersz : String;
begin
clrscr;
assign(plik, 'NOWY.TXT');
rewrite(plik);
close(plik);
readkey;
end.
23
PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku w trybie do odczytu
assign
reset
program pliki1;
uses Crt;
var
plik : Text;
wiersz : String;
begin
clrscr;
assign(plik, ‘TEMATY.TXT');
reset(plik);
close(plik);
readkey;
end.
24
PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku w trybie do ZAPISU– PATRZ „Tworzenie nowego pliku”
program pliki2;
uses Crt;
var
plik : Text;
wiersz : String;
begin
clrscr;
assign(plik, 'NOWY.TXT');
rewrite(plik);
close(plik);
readkey;
end.
25
PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku w trybie do dopisywania
assign
append
program pliki3;
uses Crt;
var
plik : Text;
wiersz : String;
begin
clrscr;
assign(plik, 'TEMATY.TXT');
append(plik);
writeln(plik,'Tematy dla Klasy informatycznej');
writeln(plik,'Programowanie strukturalne i obiektowe');
close(plik);
readkey;
end.
26
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamykanie pliku
close
program pliki1;
uses Crt;
var
plik : Text;
wiersz : String;
begin
clrscr;
assign(plik, ‘TEMATY.TXT');
reset(plik);
close(plik);
readkey;
end.
27
PS/TP
PROGRAMOWANIE STRUKTURALNE
Odczytywanie wiersza z pliku
readln
uses Crt;
var
plik : Text;
wiersz : String;
begin
clrscr;
assign(plik, ‘tematy.txt ‘);
reset(plik);
repeat
readln ( plik, wiersz );
writeln(wiersz);
until eof(plik);
close(plik);
readkey;
end.
28
PS/TP
PROGRAMOWANIE STRUKTURALNE
Wpisywanie nowego wiersza na koniec pliku
writeln
program pliki3;
uses Crt;
var
plik : Text;
wiersz : String;
begin
clrscr;
assign(plik, 'TEMATY.TXT');
append(plik);
writeln ( plik ,‘Tematy dla Klasy informatycznej‘ );
writeln ( plik, ‘Programowanie strukturalne i obiektowe‘);
close(plik);
readkey;
end.
29
PS/TP
PROGRAMOWANIE STRUKTURALNE
Badanie, czy wyst
ą
pił koniec pliku
eof
uses Crt;
var
plik : Text;
wiersz : String;
begin
assign(plik, ‘tematy.txt ‘);
reset(plik);
repeat
……..
……..
until
eof(plik);
close(plik);
end.
30
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład programu kopiuj
ą
cego plik
ź
ródłowy do pliku docelowego
program pliki4;
uses Crt;
var
source, target : Text;
line : String;
begin
clrscr;
assign(source, 'TEMATY.TXT');
reset(source);
assign(target, 'TEMATY.BAK');
rewrite(target);
repeat
readln(source,line); writeln(target, line);
until eof(source);
close(source);
close(target);
end.
31
PS/TP
PROGRAMOWANIE STRUKTURALNE
Typy strukturalne
TYP PLIKOWY
32
PS/TP
PROGRAMOWANIE STRUKTURALNE
W j
ę
zyku Pascal wyró
ż
niamy 3 rodzaje plików:
1. PLIK TEKSTOWY
2. PLIK ZDEFIONOWANY
3. PLIK NIEZDEFINIOWANY
33
PS/TP
PROGRAMOWANIE STRUKTURALNE
Typ plikowy jest
ci
ą
giem elementów
tego samego typu. Liczba tych elementów
jest zmienna. Elementy te s
ą
przechowywane w fizycznym pliku na dysku.
Nie wolno myli
ć
tego pliku z plikiem tekstowym.
Definicja
typu plikowego (zdefiniowanego)
ma posta
ć
:
TYPE
identyfikator-typu-pliku
= FILE OF
identyfikator-typu-elementu
;
Przykłady:
TYPE
TPLIK = file of word;
TWYNIKI = file of real;
TDANE = file of integer;
34
PS/TP
PROGRAMOWANIE STRUKTURALNE
program pliki5;
uses Crt;
type
TPLIK = file of word;
var
plik : TPLIK;
liczba : word;
begin
clrscr;
assign(plik, 'LICZBY.DAT');
rewrite(plik);
for liczba := 1 to 100 do
write( plik, liczba );
close(plik);
readkey;
end.
Przykład zapisu 100 liczb do pliku LICZBY.DAT:
35
PS/TP
PROGRAMOWANIE STRUKTURALNE
program pliki6;
uses Crt;
type
TPLIK = file of word;
var
plik : TPLIK;
liczba : word;
begin
clrscr;
assign(plik, 'LICZBY.DAT');
reset(plik);
writeln('zawartosc pliku:');
repeat
read( plik, liczba ); write(liczba);
until eof(plik);
close(plik);
readkey;
end.
Przykład odczytu danych z pliku LICZBY.DAT:
36
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zawarto
ść
tego pliku LICZBY.DAT po otworzeniu go
np. Notatnikiem mo
ż
e by
ć
podobna do tej :
UWAGA:
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd
37
PS/TP
PROGRAMOWANIE STRUKTURALNE
OPERACJE NA
PLIKACH
38
PS/TP
PROGRAMOWANIE STRUKTURALNE
W j
ę
zyku Pascal wyró
ż
niamy nast
ę
puj
ą
ce operacje na
plikach:
1. Skojarzenie zmiennej z nazw
ą
pliku
2. Otworzenie pliku do odczytu
3. Otworzenie pliku do zapisu (tworzenie nowego pliku)
4. Otworzenie pliku do dopisywania
5. Zamykanie pliku
6. Czytanie elementu z pliku
7. Zapis elementu do pliku
8. Sprawdzanie czy nast
ą
pił koniec pliku
39
PS/TP
PROGRAMOWANIE STRUKTURALNE
Skojarzenie zmiennej z nazw
ą
pliku ma posta
ć
:
assign (
identyfikator-pliku
,
wyra
ż
enie-ła
ń
cuchowe
) ;
Przykłady:
assign(f1, ‘DANE1.DAT ‘);
assign(f2, ‘DANE2.DAT ‘);
assign(f3, ‘DANE3.DAT ‘);
identyfikator-pliku
to inaczej zmienna plikowa
40
PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku do odczytu ma posta
ć
:
reset (
identyfikator-pliku
) ;
Przykłady:
reset(f1);
reset(f2);
reset(f3);
identyfikator-pliku
to inaczej zmienna plikowa
41
PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku do zapisu (tworzenie nowego pliku) ma posta
ć
:
rewrite (
identyfikator-pliku
) ;
Przykłady:
rewrite(f1);
rewrite(f2);
rewrite(f3);
identyfikator-pliku
to inaczej zmienna plikowa
Uwaga: je
ś
li plik ju
ż
istnieje to nast
ę
puje
kasowanie zawarto
ś
ci całego pliku
42
PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku do dopisywania ma posta
ć
:
append (
identyfikator-pliku
) ;
Przykłady:
append(plik1);
append(plik2);
append(plik3);
identyfikator-pliku
to inaczej zmienna plikowa
43
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamykanie pliku ma posta
ć
:
close (
identyfikator-pliku
) ;
Przykłady:
close(plik1);
close(plik2);
close(plik3);
identyfikator-pliku
to inaczej zmienna plikowa
44
PS/TP
PROGRAMOWANIE STRUKTURALNE
Czytanie elementu (elementów) z pliku ma posta
ć
:
read (
identyfikator-pliku
,
lista-argumentów-wej
ś
ciowych
) ;
Przykłady:
read(plik1, x, y , z);
read(plik2, liczba);
read(plik3, znak);
identyfikator-pliku
to inaczej zmienna plikowa
45
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zapis elementu (elementów) do pliku ma posta
ć
:
write (
identyfikator-pliku
,
lista-argumentów-wyj
ś
ciowych
) ;
Przykłady:
write(plik1, a[k] );
write(plik2, liczba );
write(plik3, znak );
identyfikator-pliku
to inaczej zmienna plikowa
46
PS/TP
PROGRAMOWANIE STRUKTURALNE
Sprawdzanie, czy nast
ą
pił koniec pliku ma posta
ć
:
eof (
identyfikator-pliku
)
Je
ś
li funkcja eof zwróci warto
ść
TRUE to znaczy
ż
e napotkano koniec
pliku (ang. End Of File)
Przykład:
repeat
read(plik2, liczba );
until EOF(plik2);
identyfikator-pliku
to inaczej zmienna plikowa
47
PS/TP
PROGRAMOWANIE STRUKTURALNE
ZBIORY
48
PS/TP
PROGRAMOWANIE STRUKTURALNE
W j
ę
zyku Pascal wyró
ż
niamy tak
ż
e typ zbiorowy
ALE NIE NALE
ś
Y MYLI
Ć
GO Z PLIKIEM !!!
CHODZI O POJ
Ę
CIE MATEMATYCZNE ZBIORU !!!
Typ zbiorowy jest zbiorem wszystkich podzbiorów
pewnego typu porz
ą
dkowego (w tym tak
ż
e zbioru
pustego).
Definicja typu zbiorowego ma posta
ć
:
TYPE
identyfikator-TYPU-ZBIOROWEGO
= SET OF typ-porz
ą
dkowy ;
49
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład:
TYPE
dni_pracy = SET OF (poniedziałek, wtorek, sroda, czwartek, piatek);
Elementami typu
dni_pracy
mo
ż
e by
ć
dowolny podzbiór zbioru podanych
dni tygodnia, m.in.:
[poniedziałek,czwartek]
[wtorek,
ś
roda,piatek]
[wtorek,piatek,
ś
roda]
[
ś
roda,wtorek,piatek]
[piatek,wtorek,sroda]
[piatek]
[ ]
[poniedziałek,sroda]
Uwaga: Zapis [ ] oznacza zbiór pusty
50
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład:
TYPE
male_litery = SET OF ’a’ .. ’z’;
Elementami typu
male_litery
mo
ż
e by
ć
dowolny podzbiór zbioru podanych
małych liter, m.in.:
[‘a’, ‘k’, ‘z’]
[‘z’, ‘a’, ‘’g’, ‘f’, ‘d’]
[‘w’, ‘t’, ‘o’, ‘r’, ‘e’, ‘k’]
[‘s’]
[‘a’,’b’,’c’,’d’,’e’]
[‘p’]
[ ]
[‘z’,’x’,’y’,’m’.’n’]
Uwaga: Zapis [ ] oznacza zbiór pusty
51
PS/TP
PROGRAMOWANIE STRUKTURALNE
Typy strukturalne
REKORDY
52
PS/TP
PROGRAMOWANIE STRUKTURALNE
Rekord to zło
ż
ona struktura danych, która składa si
ę
z pewnej liczby elementów
ale elementy te s
ą
ró
ż
nego typu. Elementy te, czyli składowe rekordu nazywamy
polami
.
Typ pola mo
ż
e by
ć
dowolnym typem.
Definicja
typu rekordowego
ma posta
ć
:
TYPE
identyfikator-typu
= RECORD
nazwa-pola-1 : typ-pola-1;
nazwa-pola-2 : typ-pola-2;
nazwa-pola-3 : typ-pola-3;
…
nazwa-pola-N : typ-pola-N;
END;
53
PS/TP
PROGRAMOWANIE STRUKTURALNE
TYPE
TDATA = RECORD
ROK : INTEGER;
MIESIAC : 1..12;
DZIEN : 1..31;
END;
TDATA jest typem rekordowym, który mo
ż
e przechowywa
ć
rok, miesi
ą
c i dzie
ń
miesi
ą
ca.
Przykłady:
TYPE
TOSOBA = RECORD
nazwisko : string[20];
imie : string[15];
wiek : BYTE;
END;
TOSOBA jest typem rekordowym, który mo
ż
e przechowywa
ć
nazwisko, imi
ę
oraz wiek osoby.
54
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
TYPE
TPERSONALIA = RECORD
nazwisko : string[20];
imie1, imie2 : string[15];
imie_ojca, imie_matki : string[15];
data_urodzenia : TDATA;
miejsce_urodzenia : string[25];
miejsce_zamieszkania : string[25];
END;
TPERSONALIA jest typem rekordowym, który mo
ż
e przechowywa
ć
nazwisko,
imiona, imi
ę
ojca, imi
ę
matki, dat
ę
i miejsce urodzenia, miejsce zamieszkania
osoby.
55
PS/TP
PROGRAMOWANIE STRUKTURALNE
TYPE
TPERSONALIA = RECORD
nazwisko : string[20];
imie1, imie2 : string[15];
imie_ojca, imie_matki : string[15];
data_urodzenia : TDATA;
miejsce_urodzenia : string[25];
miejsce_zamieszkania : string[25];
END;
VAR
OSOBA : TPERSONALIA;
Przykłady:
56
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
W j
ę
zyku Pascal zmienna OSOBA jest rekordem o strukturze opisanej w
typie
TPERSONALIA
.
Ka
ż
de pole zmiennej OSOBA przechowuje warto
ść
opisuj
ą
c
ą
dan
ą
osob
ę
.
Aby wy
ś
wietli
ć
zawarto
ść
pola zmiennej OSOBA (np. nazwisko), nale
ż
y
posłu
ż
y
ć
si
ę
operatorem w postaci kropki, np.
writeln( OSOBA.nazwisko )
Natomiast
ż
eby wstawi
ć
do jakiego
ś
pola now
ą
warto
ść
(np. nazwisko),
u
ż
yjemy te
ż
kropki - instrukcja OSOBA.nazwisko := ‘Kowalski‘
57
PS/TP
PROGRAMOWANIE STRUKTURALNE
TYPE
TDATA = RECORD
ROK : INTEGER;
MIESIAC : 1..12;
DZIEN : 1..31;
END;
VAR
DATA : TDATA;
Przykłady:
58
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
W j
ę
zyku Pascal zmienna DATA jest rekordem o strukturze opisanej w
typie
TDATA
.
Ka
ż
de pole zmiennej DATA przechowuje warto
ść
opisuj
ą
c
ą
dan
ą
dat
ę
.
Aby wy
ś
wietli
ć
zawarto
ść
pola zmiennej DATA (np. nr miesi
ą
ca), nale
ż
y
posłu
ż
y
ć
si
ę
operatorem w postaci kropki, np.
writeln( DATA.MIESIAC )
Natomiast
ż
eby wstawi
ć
do jakiego
ś
pola now
ą
warto
ść
(np. rok),
u
ż
yjemy te
ż
kropki – instrukcja:
DATA.ROK := 2007
59
PS/TP
PROGRAMOWANIE STRUKTURALNE
REKORDY
I
PLIKI
60
PS/TP
PROGRAMOWANIE STRUKTURALNE
W j
ę
zyku Pascal wyró
ż
niamy 3 rodzaje plików:
1. PLIK TEKSTOWY
2. PLIK ZDEFIONOWANY
3. PLIK NIEZDEFINIOWANY
61
PS/TP
PROGRAMOWANIE STRUKTURALNE
Typ plikowy jest
ci
ą
giem elementów
tego samego typu. Liczba tych elementów
jest zmienna. Elementy te s
ą
przechowywane w fizycznym pliku na dysku.
Elementem tym mo
ż
e by
ć
rekord.
Definicja
typu plikowego (zdefiniowanego)
ma posta
ć
:
TYPE
identyfikator-typu-pliku
= FILE OF
identyfikator-typu-rekordowego
;
Przykład:
TYPE
TOSOBA = RECORD
nazwisko : string[20];
imie : string[15];
wiek : BYTE;
END;
TYPE
TPLIK = FILE OF TOSOBA;
62
PS/TP
PROGRAMOWANIE STRUKTURALNE
program pliki7;
uses Crt;
TYPE TOSOBA = record
nazwisko : string[20];
imie
: string[15];
wiek : byte;
end;
TPLIK = file of TOSOBA;
var
plik : TPLIK;
osoba : TOSOBA;
begin
assign(plik, 'OSOBY.DAT');
rewrite(plik);
osoba.nazwisko := 'Kowalski';
osoba.imie := 'Jan';
osoba.wiek := 65;
write(plik, osoba);
close(plik);
end.
Przykład zapisu jednego rekordu do pliku OSOBY.DAT:
63
PS/TP
PROGRAMOWANIE STRUKTURALNE
PLIK
NIEZDEFINIOWANY
64
PS/TP
PROGRAMOWANIE STRUKTURALNE
Typ plikowy niezdefiniowany jest po prostu
jakim
ś
plikiem
.
Definicja
typu plikowego niezdefiniowanego
ma posta
ć
:
TYPE
identyfikator-typu-pliku
= FILE;
65
PS/TP
PROGRAMOWANIE STRUKTURALNE
Typ ten mo
ż
e posłu
ż
y
ć
np. do badania czy dany plik istnieje, czy nie
Patrz przykład:
program pliki8;
uses Crt;
var
plik : FILE;
begin
clrscr;
{$I-}
assign(plik, 'OSOBY.DAS');
reset(plik);
If IOResult = 0 then writeln('Plik istnieje')
else writeln('Plik nie istnieje');
close(plik);
{$I+}
readkey;
end.
66
PS/TP
PROGRAMOWANIE STRUKTURALNE
SORTOWANIE
TABLIC
67
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zadanie:
Uporz
ą
dkowa
ć
(posortowa
ć
) w kolejno
ś
ci od najmniejszej do najwi
ę
kszej
(rosn
ą
co) ci
ą
g N liczb typu Real, stosuj
ą
c algorytm zamiany parami.
W algorytmie tym bada si
ę
(przegl
ą
da) pary s
ą
siaduj
ą
cych ze sob
ą
liczb
i ewentualnie zamienia je miejscami.
Program sprawd
ź
dla danych:
N = 5; i ci
ą
gu liczb A[1] := 7.8; A[2] := 5.4; A[3] := 2.5; A[4] := 1.6; A[5] := 3.9;
68
PS/TP
PROGRAMOWANIE STRUKTURALNE
Rozwi
ą
zanie:
program Sortowanie1;
uses Crt;
Const N = 5;
Var A : Array [1..N] of Real;
I, ZAM : Integer;
B : Real;
BEGIN {Program główny – pierwsza wersja}
clrscr;
{wczytanie danych do A}
writeln('Podaj ',N,' liczb typu Real');
for I := 1 to N do
begin
write('A[',I,']=');
read(A[I]);
end;
69
PS/TP
PROGRAMOWANIE STRUKTURALNE
program Sortowanie1;
uses Crt;
Const N = 5;
Var A : Array [1..N] of Real;
I, ZAM : Integer;
B : Real;
BEGIN {Program główny – druga wersja}
clrscr;
{wczytanie danych do A}
A[1] := 7.8;
A[2] := 5.4;
A[3] := 2.5;
A[4] := 1.6;
A[5] := 3.9;
70
PS/TP
PROGRAMOWANIE STRUKTURALNE
{wy
ś
wietlenie elementów tablicy A przed sortowaniem}
writeln('wektor przed sortowaniem:':40);
for I := 1 to N do
begin
write(A[I]:5:2,' ':3);
end;
writeln;
71
PS/TP
PROGRAMOWANIE STRUKTURALNE
{p
ę
tla sortuj
ą
ca A}
repeat
ZAM := 0;
for I := 1 to N-1 do
begin
if A[I] > A[I+1] then
begin
B := A[I];
A[I] := A[I+1];
A[I+1] := B;
ZAM := ZAM + 1;
end;
end;
writeln('wektor po zamianie:':40);
for I := 1 to N do write(A[I]:5:2,' ':3);
write(' Liczba zamian ',ZAM);
writeln;
until ZAM=0;
72
PS/TP
PROGRAMOWANIE STRUKTURALNE
writeln;
writeln('wektor po sortowaniu:':40);
for I := 1 to N do
begin
write(A[I]:5:2,' ':3);
end;
writeln;
writeln('koniec-nacisnij dowolny klawisz...');
readkey;
END.
73
PS/TP
PROGRAMOWANIE STRUKTURALNE
Wyniki po
ś
rednie i ko
ń
cowe:
wektor przed sortowaniem:
7.80 5.40 2.50 1.60 3.90
wektor po zamianie:
5.40 2.50 1.60 3.90 7.80 Liczba zamian 4
wektor po zamianie:
2.50 1.60 3.90 5.40 7.80 Liczba zamian 3
wektor po zamianie:
1.60 2.50 3.90 5.40 7.80 Liczba zamian 1
wektor po zamianie:
1.60 2.50 3.90 5.40 7.80 Liczba zamian 0
wektor po sortowaniu:
1.60 2.50 3.90 5.40 7.80
koniec-nacisnij dowolny klawisz...
74
PS/TP
PROGRAMOWANIE STRUKTURALNE
7.8
3.9
7.8
3.9
A[5]
3.9
7.8
1.6
A[4]
1.6
1.6
7.8
2.5
A[3]
2.5
2.5
7.8
5.4
A[2]
5.4
5.4
7.8
A[1]
Pierwsze przegl
ą
danie:
Stan pocz
ą
tkowy
Stan po pierwszym przejrzeniu par
Liczba zamian: 4
75
PS/TP
PROGRAMOWANIE STRUKTURALNE
7.8
7.8
A[5]
5.4
5.4
3.9
A[4]
3.9
3.9
5.4
1.6
A[3]
1.6
1.6
5.4
2.5
A[2]
2.5
2.5
5.4
A[1]
Drugie przegl
ą
danie:
Stan po
ś
redni
Stan po drugim przejrzeniu par
Liczba zamian: 3
76
PS/TP
PROGRAMOWANIE STRUKTURALNE
7.8
7.8
A[5]
5.4
5.4
A[4]
3.9
3.9
A[3]
2.5
2.5
1.6
A[2]
1.6
1.6
2.5
A[1]
Trzecie przegl
ą
danie:
Stan po
ś
redni
Stan po trzecim przejrzeniu par
Liczba zamian: 1
Zauwa
ż ż
e w ka
ż
dym przegl
ą
daniu
jeden element (ten wi
ę
kszy)
przesuwa si
ę
w dół -
czyli mo
ż
na powiedzie
ć
,
ż
e ci
ęż
sze
elementy id
ą
do dołu, a l
ż
ejsze do góry.
Dlatego t
ę
metod
ę
nazwano
sortowaniem b
ą
belkowym
77
PS/TP
PROGRAMOWANIE STRUKTURALNE
Ogólne zasady budowania
systemów informatycznych
78
PS/TP
PROGRAMOWANIE STRUKTURALNE
1. Naczeln
ą
zasad
ą
budowania systemu
w programowaniu strukturalnym
jest podział programu na mniejsze moduły
79
PS/TP
PROGRAMOWANIE STRUKTURALNE
2.Tre
ść
modułu powinna zawiera
ć
cał
ą
informacj
ę
o strukturze danych modułu
80
PS/TP
PROGRAMOWANIE STRUKTURALNE
3. Przepływ danych pomi
ę
dzy modułami powinien
by
ć
minimalny i dobrze kontrolowany
81
PS/TP
PROGRAMOWANIE STRUKTURALNE
4. Liczba wej
ść
i wyj
ść
modułu powinna
by
ć
jak najmniejsza
82
PS/TP
PROGRAMOWANIE STRUKTURALNE
5. Tekst modułu powinien mie
ś
ci
ć
si
ę
na jeden stronie wydruku
83
PS/TP
PROGRAMOWANIE STRUKTURALNE
6. Tworzony kod programu powinien by
ć
wykonywany sekwencyjnie, najlepiej bez skoków
84
PS/TP
PROGRAMOWANIE STRUKTURALNE
7. Tre
ść
powinna by
ć
jednoznaczna,
bez wywoła
ń
po
ś
rednich
85
PS/TP
PROGRAMOWANIE STRUKTURALNE
9. Poprawno
ść
danych wej
ś
ciowych nale
ż
y
kontrolowa
ć
na tyle ile jest to mo
ż
liwe
– przewidywanie bł
ę
dów u
ż
ytkownika
86
PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład programu napisanego strukturalnie
Zadanie:
sortowanie tablic
87
PS/TP
PROGRAMOWANIE STRUKTURALNE
Cz
ęść
deklaracyjna
program Sortowanie3;
uses Crt;
Const N = 5;
Type
Indeks = 1..N;
Wektor = Array [Indeks] of Real;
Var A : Wektor;
L : Indeks;
ITERACJA : Integer;
88
PS/TP
PROGRAMOWANIE STRUKTURALNE
Cz
ęść
deklaracyjna - Procedury
Procedure Czytanie(Var Beta : Wektor; Var MAX : Indeks);
var Num : Indeks;
begin
writeln;
writeln('Podaj ',MAX,' liczb typu REAL:');
for Num := 1 to MAX do
begin
write('Liczba nr ',Num,' = ');
read(Beta[Num]);
end;
writeln;
end; {Czytanie}
89
PS/TP
PROGRAMOWANIE STRUKTURALNE
Cz
ęść
deklaracyjna - Procedury
Procedure Wyswietlanie(Var Beta : Wektor; MAX : Indeks);
var I : Indeks;
begin
writeln;
for I := 1 to MAX do write(Beta[I]:5:2,' ':3);
writeln;
writeln;
end; {Wyswietlanie}
90
PS/TP
PROGRAMOWANIE STRUKTURALNE
Cz
ęść
deklaracyjna - Procedury
Procedure Zamiana(Var X : Real; Var Y : Real);
var Z : Real;
begin
Z := X;
X := Y;
Y := Z;
end; {Zamiana}
91
PS/TP
PROGRAMOWANIE STRUKTURALNE
Cz
ęść
deklaracyjna - Procedury
Procedure Sort(Var Ciag : Wektor; M : Indeks);
var I : Indeks;
ZAM : Integer;
begin
repeat
ZAM := 0;
for I := 1 to M-1 do
begin
ITERACJA := ITERACJA + 1;
if Ciag[I] > Ciag[I+1] then
begin
Zamiana(Ciag[I], Ciag[I+1]);
ZAM := ZAM + 1;
end;
end;
until ZAM = 0;
end; {Sort}
92
PS/TP
PROGRAMOWANIE STRUKTURALNE
Cz
ęść
wykonawcza – Program główny
BEGIN {Program główny}
clrscr;
ITERACJA := 0;
L := N;
Czytanie(A, L);
writeln('Stan wektora przed sortowaniem');
Wyswietlanie(A, L);
Sort(A, L);
writeln('Stan wektora po sortowaniu');
Wyswietlanie(A, L);
writeln(' Liczba iteracji ',ITERACJA);
writeln;
writeln('koniec-nacisnij dowolny klawisz...');
readkey;
END.
93
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamiana liczb dziesi
ę
tnych
na binarne
94
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zało
ż
enie: zamiana liczb b
ę
dzie dotyczyła liczb całkowitych w zakresie od 0 do 255
Zwykła ksi
ąż
kowa metoda zamiany liczby dziesi
ę
tnej na binarn
ą
polega na kolejnym dzieleniu ilorazu przez liczb
ę
2 a
ż
iloraz b
ę
dzie wynosił 0.
W algorytmie zapami
ę
tywane s
ą
reszty z dzielenia i to one tworz
ą
liczb
ę
binarn
ą
.
W tym celu b
ę
dzie nam potrzebna znajomo
ść
dwóch operatorów:
div i mod
div – dzieli całkowicie (zwraca iloraz)
mod – zwraca reszt
ę
z dzielenia całkowitego
Np.
5 div 6 = 0
5 mod 6 = 5
5 / 6 = 0.8333
95
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamie
ń
liczb
ę
dziesi
ę
tn
ą
X=25
(10)
na binarn
ą
Y=?
(2)
X
25
12
6
3
1
Schemat post
ę
powania:
: 2
: 2
: 2
: 2
: 2
iloraz = X div 2
reszta z dzielenia = X mod 2
12
6
3
1
0
iloraz równy zero ko
ń
czy algorytm
1
0
0
1
1
Kierunek
odczytywania
Y=11001
(2)
96
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamie
ń
liczb
ę
dziesi
ę
tn
ą
X=80
(10)
na binarn
ą
Y=?
(2)
X
80
40
20
10
5
2
1
Schemat post
ę
powania:
: 2
: 2
: 2
: 2
: 2
: 2
: 2
iloraz = X div 2
reszta z dzielenia = X mod 2
40
20
10
5
2
1
0
iloraz równy zero ko
ń
czy algorytm
0
0
0
0
1
0
1
Kierunek
odczytywania
Y=1010000
(2)
97
PS/TP
PROGRAMOWANIE STRUKTURALNE
Algorytm w Pascalu:
const Dwojkowa : String[8] = '00000000';
var Pozycja : Byte;
begin
Pozycja := 8;
while X <> 0 do
begin
if (X mod 2) = 1 then Dwojkowa[Pozycja] := '1';
X := X div 2;
Pozycja := Pozycja - 1;
end;
dec2bin := Dwojkowa;
end;
98
PS/TP
PROGRAMOWANIE STRUKTURALNE
program zamiana_10_na_2;
{wersja definicyjna-ksi
ąż
kowa}
Uses Crt;
Function dec2bin(X : Byte) : String[8];
{ Liczby od 0 do 255 maj
ą
maksymalnie 8 bitów, dlatego deklaracja
String[8] }
const Dwojkowa : String[8] = '00000000';
var Pozycja : Byte;
begin
Pozycja := 8;
while X <> 0 do
begin
if (X mod 2) = 1 then Dwojkowa[Pozycja] := '1';
X := X div 2;
Pozycja := Pozycja - 1;
end;
dec2bin := Dwojkowa;
end; {dec2bin}
99
PS/TP
PROGRAMOWANIE STRUKTURALNE
var Liczba : Byte;
begin {program główny}
clrscr;
write('Podaj liczbe z zakresu 0-255 : ');
readln(Liczba);
writeln('Dziesietna X=',Liczba,' rowna si
ę
binarnej Y=',dec2bin(Liczba));
readkey;
end.
100
PS/TP
PROGRAMOWANIE STRUKTURALNE
Suma cyfr liczby dziesi
ę
tnej
101
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zało
ż
enie: algorytm b
ę
dzie dotyczył liczb całkowitych w zakresie od 0 do MAXINT
Wykorzystamy te
ż
ten sam algorytm który słu
ż
ył nam do zamiany
liczb dziesi
ę
tnych na binarne
102
PS/TP
PROGRAMOWANIE STRUKTURALNE
Zlicz sum
ę
cyfr dziesi
ę
tnych dla liczby X=25
(10)
X
25
2
Schemat post
ę
powania:
: 10
: 10
iloraz = X div 10
reszta z dzielenia = X mod 10
2
0
iloraz równy zero ko
ń
czy algorytm
5
2
suma = 5
suma = 7
suma=7
103
PS/TP
PROGRAMOWANIE STRUKTURALNE
Algorytm w Pascalu:
sum := 0;
while X <> 0 do
begin
sum := sum + (X mod 10);
X := X div 10;
end;
ziffersum := sum;
104
PS/TP
PROGRAMOWANIE STRUKTURALNE
program sumacyfr;
Uses Crt;
Function ziffersum(X : integer) : integer;
var sum : Longint;
begin
sum := 0;
while X <> 0 do
begin
sum := sum + (X mod 10);
X := X div 10;
end;
ziffersum := sum;
end; {ziffersum}
105
PS/TP
PROGRAMOWANIE STRUKTURALNE
var Liczba : integer;
begin {program główny}
clrscr;
write('Podaj liczbe z zakresu 0-',MAXINT,' : ');
readln(Liczba);
writeln('Dla X=',Liczba,' suma jej cyfr rowna si
ę
',ziffersum(Liczba));
readkey;
end.