pas czesc 3

background image

1

PS/TP

TI

TI

TI

TI----PS

PS

PS

PS----3

3

3

3

TYPY STRUKTURALNE

TYPY STRUKTURALNE

TYPY STRUKTURALNE

TYPY STRUKTURALNE

background image

2

PS/TP

PROGRAMOWANIE STRUKTURALNE

Typy strukturalne

TABLICE

Uwaga:

Pocz

ą

tkuj

ą

cy powinni przeczyta

ć

najpierw artykuł

Macierze w

ż

yciu, matematyce i informatyce

background image

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.

background image

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.

background image

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:

background image

6

PS/TP

PROGRAMOWANIE STRUKTURALNE

Przypomnienie:

background image

7

PS/TP

PROGRAMOWANIE STRUKTURALNE

Przypomnienie:

background image

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:

background image

9

PS/TP

PROGRAMOWANIE STRUKTURALNE

Przykłady:

background image

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

ąć

ę

dów podczas tworzenia programów w j

ę

zykach

Pascal, Delphi i innych !!!

Przykłady:

background image

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:

background image

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:

background image

13

PS/TP

PROGRAMOWANIE STRUKTURALNE

Typy strukturalne

PLIKI TEKSTOWE

i

OPERACJE

NA TEKSTACH

background image

14

PS/TP

PROGRAMOWANIE STRUKTURALNE

W j

ę

zyku Pascal wyró

ż

niamy 3 rodzaje plików:

1. PLIK TEKSTOWY

2. PLIK ZDEFIONOWANY

3. PLIK NIEZDEFINIOWANY

background image

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;

background image

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:

background image

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:

background image

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

background image

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);

background image

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:

background image

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

background image

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.

background image

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.

background image

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.

background image

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.

background image

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.

background image

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.

background image

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.

background image

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.

background image

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.

background image

31

PS/TP

PROGRAMOWANIE STRUKTURALNE

Typy strukturalne

TYP PLIKOWY

background image

32

PS/TP

PROGRAMOWANIE STRUKTURALNE

W j

ę

zyku Pascal wyró

ż

niamy 3 rodzaje plików:

1. PLIK TEKSTOWY

2. PLIK ZDEFIONOWANY

3. PLIK NIEZDEFINIOWANY

background image

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;

background image

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:

background image

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:

background image

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

background image

37

PS/TP

PROGRAMOWANIE STRUKTURALNE

OPERACJE NA

PLIKACH

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

47

PS/TP

PROGRAMOWANIE STRUKTURALNE

ZBIORY

background image

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 ;

background image

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

background image

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

background image

51

PS/TP

PROGRAMOWANIE STRUKTURALNE

Typy strukturalne

REKORDY

background image

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

ą

ż

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;

background image

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.

background image

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.

background image

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:

background image

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‘

background image

57

PS/TP

PROGRAMOWANIE STRUKTURALNE

TYPE
TDATA = RECORD

ROK : INTEGER;
MIESIAC : 1..12;
DZIEN : 1..31;

END;

VAR

DATA : TDATA;

Przykłady:

background image

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

background image

59

PS/TP

PROGRAMOWANIE STRUKTURALNE

REKORDY

I

PLIKI

background image

60

PS/TP

PROGRAMOWANIE STRUKTURALNE

W j

ę

zyku Pascal wyró

ż

niamy 3 rodzaje plików:

1. PLIK TEKSTOWY

2. PLIK ZDEFIONOWANY

3. PLIK NIEZDEFINIOWANY

background image

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;

background image

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:

background image

63

PS/TP

PROGRAMOWANIE STRUKTURALNE

PLIK

NIEZDEFINIOWANY

background image

64

PS/TP

PROGRAMOWANIE STRUKTURALNE

Typ plikowy niezdefiniowany jest po prostu

jakim

ś

plikiem

.

Definicja

typu plikowego niezdefiniowanego

ma posta

ć

:

TYPE

identyfikator-typu-pliku

= FILE;

background image

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.

background image

66

PS/TP

PROGRAMOWANIE STRUKTURALNE

SORTOWANIE

TABLIC

background image

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;

background image

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;

background image

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;

background image

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;

background image

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;

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

77

PS/TP

PROGRAMOWANIE STRUKTURALNE

Ogólne zasady budowania
systemów informatycznych

background image

78

PS/TP

PROGRAMOWANIE STRUKTURALNE

1. Naczeln

ą

zasad

ą

budowania systemu

w programowaniu strukturalnym
jest podział programu na mniejsze moduły

background image

79

PS/TP

PROGRAMOWANIE STRUKTURALNE

2.Tre

ść

modułu powinna zawiera

ć

cał

ą

informacj

ę

o strukturze danych modułu

background image

80

PS/TP

PROGRAMOWANIE STRUKTURALNE

3. Przepływ danych pomi

ę

dzy modułami powinien

by

ć

minimalny i dobrze kontrolowany

background image

81

PS/TP

PROGRAMOWANIE STRUKTURALNE

4. Liczba wej

ść

i wyj

ść

modułu powinna

by

ć

jak najmniejsza

background image

82

PS/TP

PROGRAMOWANIE STRUKTURALNE

5. Tekst modułu powinien mie

ś

ci

ć

si

ę

na jeden stronie wydruku

background image

83

PS/TP

PROGRAMOWANIE STRUKTURALNE

6. Tworzony kod programu powinien by

ć

wykonywany sekwencyjnie, najlepiej bez skoków

background image

84

PS/TP

PROGRAMOWANIE STRUKTURALNE

7. Tre

ść

powinna by

ć

jednoznaczna,

bez wywoła

ń

po

ś

rednich

background image

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

background image

86

PS/TP

PROGRAMOWANIE STRUKTURALNE

Przykład programu napisanego strukturalnie
Zadanie:

sortowanie tablic

background image

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;

background image

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}

background image

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}

background image

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}

background image

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}

background image

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.

background image

93

PS/TP

PROGRAMOWANIE STRUKTURALNE

Zamiana liczb dziesi

ę

tnych

na binarne

background image

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

background image

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)

background image

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)

background image

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;

background image

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}

background image

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.

background image

100

PS/TP

PROGRAMOWANIE STRUKTURALNE

Suma cyfr liczby dziesi

ę

tnej

background image

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

background image

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

background image

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;

background image

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}

background image

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.


Wyszukiwarka

Podobne podstrony:
pas czesc 1b
pas czesc 4a
pas czesc 1c
pas czesc 0
pas czesc 1d
pas czesc 4b id 349723 Nieznany
pas czesc 1a
88 Leki przeciwreumatyczne część 2
guzy część szczegółowa rzadsze
Stomatologia czesc wykl 12

więcej podobnych podstron