pas czesc 3


TI-PS-3
TI-PS-3
TI-PS-3
TI-PS-3
TYPY STRUKTURALNE
TYPY STRUKTURALNE
TYPY STRUKTURALNE
TYPY STRUKTURALNE
1 PS/TP
PROGRAMOWANIE STRUKTURALNE
Typy strukturalne
TABLICE
Uwaga: Początkujący powinni przeczytać najpierw artykuł
Macierze w \yciu, matematyce i informatyce
2 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.
3 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
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
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.
4 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
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
5 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przypomnienie:
6 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przypomnienie:
7 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
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 ] :=  @ .
8 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
9 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
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 !!!
10 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:
11 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
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.
12 PS/TP
PROGRAMOWANIE STRUKTURALNE
Typy strukturalne
PLIKI TEKSTOWE
i
OPERACJE
NA TEKSTACH
13 PS/TP
PROGRAMOWANIE STRUKTURALNE
W języku Pascal wyró\niamy 3 rodzaje plików:
1. PLIK TEKSTOWY
2. PLIK ZDEFIONOWANY
3. PLIK NIEZDEFINIOWANY
14 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 przejdz 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;
15 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład prostego programu czytającego plik tekstowy:
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.
16 PS/TP
PROGRAMOWANIE STRUKTURALNE
UWAGA:
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  ) ;
17 PS/TP
PROGRAMOWANIE STRUKTURALNE
Schemat przetwarzania pliku
Opis zmiennej plikowej (w części deklaracyjnej)
skojarzenie zmiennej plikowej z fizycznym zbiorem danych
otwarcie pliku
Wykonywanie operacji na pliku
zamknięcie pliku
18 PS/TP
PROGRAMOWANIE STRUKTURALNE
VAR
Opis zmiennej plikowej (w części deklaracyjnej)
F : text;
.
.
.
skojarzenie zmiennej plikowej z fizycznym zbiorem danych
assign(F, nazwa_pliku);
.
reset(F);
otwarcie pliku
.
.
.
Wykonywanie operacji na pliku
readln(F, wiersz);
.
.
.
close(F);
zamknięcie pliku
19 PS/TP
PROGRAMOWANIE STRUKTURALNE
Schemat przetwarzania pliku pokazano na poni\szym przykładzie:
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.
20 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
21 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.
22 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.
23 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.
24 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.
25 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.
26 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.
27 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.
28 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.
29 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład programu kopiującego plik zró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.
30 PS/TP
PROGRAMOWANIE STRUKTURALNE
Typy strukturalne
TYP PLIKOWY
31 PS/TP
PROGRAMOWANIE STRUKTURALNE
W języku Pascal wyró\niamy 3 rodzaje plików:
1. PLIK TEKSTOWY
2. PLIK ZDEFIONOWANY
3. PLIK NIEZDEFINIOWANY
32 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;
33 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład zapisu 100 liczb do pliku LICZBY.DAT:
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.
34 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład odczytu danych z pliku LICZBY.DAT:
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.
35 PS/TP
PROGRAMOWANIE STRUKTURALNE
UWAGA:
Zawartość tego pliku LICZBY.DAT po otworzeniu go
np. Notatnikiem mo\e być podobna do tej :
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd
36 PS/TP
PROGRAMOWANIE STRUKTURALNE
OPERACJE NA
PLIKACH
37 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
38 PS/TP
PROGRAMOWANIE STRUKTURALNE
Skojarzenie zmiennej z nazwą pliku ma postać:
assign ( identyfikator-pliku , wyra\enie-łańcuchowe ) ;
identyfikator-pliku to inaczej zmienna plikowa
Przykłady:
assign(f1,  DANE1.DAT  );
assign(f2,  DANE2.DAT  );
assign(f3,  DANE3.DAT  );
39 PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku do odczytu ma postać:
reset ( identyfikator-pliku ) ;
identyfikator-pliku to inaczej zmienna plikowa
Przykłady:
reset(f1);
reset(f2);
reset(f3);
40 PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku do zapisu (tworzenie nowego pliku) ma postać:
Uwaga: jeśli plik ju\ istnieje to następuje kasowanie zawartości całego pliku
rewrite ( identyfikator-pliku ) ;
identyfikator-pliku to inaczej zmienna plikowa
Przykłady:
rewrite(f1);
rewrite(f2);
rewrite(f3);
41 PS/TP
PROGRAMOWANIE STRUKTURALNE
Otworzenie pliku do dopisywania ma postać:
append ( identyfikator-pliku ) ;
identyfikator-pliku to inaczej zmienna plikowa
Przykłady:
append(plik1);
append(plik2);
append(plik3);
42 PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamykanie pliku ma postać:
close ( identyfikator-pliku ) ;
identyfikator-pliku to inaczej zmienna plikowa
Przykłady:
close(plik1);
close(plik2);
close(plik3);
43 PS/TP
PROGRAMOWANIE STRUKTURALNE
Czytanie elementu (elementów) z pliku ma postać:
read ( identyfikator-pliku , lista-argumentów-wejściowych ) ;
identyfikator-pliku to inaczej zmienna plikowa
Przykłady:
read(plik1, x, y , z);
read(plik2, liczba);
read(plik3, znak);
44 PS/TP
PROGRAMOWANIE STRUKTURALNE
Zapis elementu (elementów) do pliku ma postać:
write ( identyfikator-pliku , lista-argumentów-wyjściowych ) ;
identyfikator-pliku to inaczej zmienna plikowa
Przykłady:
write(plik1, a[k] );
write(plik2, liczba );
write(plik3, znak );
45 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)
identyfikator-pliku to inaczej zmienna plikowa
Przykład:
repeat
read(plik2, liczba );
until EOF(plik2);
46 PS/TP
PROGRAMOWANIE STRUKTURALNE
ZBIORY
47 PS/TP
PROGRAMOWANIE STRUKTURALNE
W języku Pascal wyró\niamy tak\e typ zbiorowy
ALE NIE NALEśY MYLIĆ GO Z PLIKIEM !!!
CHODZI O POJCIE 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 ;
48 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
49 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
50 PS/TP
PROGRAMOWANIE STRUKTURALNE
Typy strukturalne
REKORDY
51 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;
52 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
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.
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.
53 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.
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;
VAR
OSOBA : TPERSONALIA;
55 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
56 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykłady:
TYPE
TDATA = RECORD
ROK : INTEGER;
MIESIAC : 1..12;
DZIEN : 1..31;
END;
VAR
DATA : TDATA;
57 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
58 PS/TP
PROGRAMOWANIE STRUKTURALNE
REKORDY
I
PLIKI
59 PS/TP
PROGRAMOWANIE STRUKTURALNE
W języku Pascal wyró\niamy 3 rodzaje plików:
1. PLIK TEKSTOWY
2. PLIK ZDEFIONOWANY
3. PLIK NIEZDEFINIOWANY
60 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;
61 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład zapisu jednego rekordu do pliku OSOBY.DAT:
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.
62 PS/TP
PROGRAMOWANIE STRUKTURALNE
PLIK
NIEZDEFINIOWANY
63 PS/TP
PROGRAMOWANIE STRUKTURALNE
Typ plikowy niezdefiniowany jest po prostu jakimś plikiem.
Definicja typu plikowego niezdefiniowanego ma postać:
TYPE
identyfikator-typu-pliku = FILE;
64 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.
65 PS/TP
PROGRAMOWANIE STRUKTURALNE
SORTOWANIE
TABLIC
66 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 sprawdz 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;
67 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;
68 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;
69 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;
70 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;
71 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.
72 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...
73 PS/TP
PROGRAMOWANIE STRUKTURALNE
Pierwsze przeglądanie:
Stan po pierwszym przejrzeniu par
Stan początkowy
Liczba zamian: 4
A[1] 7.8 5.4 5.4
A[2] 5.4 7.8 2.5 2.5
A[3] 2.5 7.8 1.6 1.6
A[4] 1.6 7.8 3.9 3.9
A[5] 3.9 7.8 7.8
74 PS/TP
PROGRAMOWANIE STRUKTURALNE
Drugie przeglądanie:
Stan po drugim przejrzeniu par
Stan pośredni
Liczba zamian: 3
A[1] 5.4 2.5 2.5
A[2] 2.5 5.4 1.6 1.6
A[3] 1.6 5.4 3.9 3.9
A[4] 3.9 5.4 5.4
A[5] 7.8 7.8
75 PS/TP
PROGRAMOWANIE STRUKTURALNE
Trzecie przeglądanie:
Stan po trzecim przejrzeniu par
Stan pośredni
Liczba zamian: 1
A[1] 2.5 1.6 1.6
Zauwa\ \e w ka\dym przeglądaniu
A[2] 1.6 2.5 2.5 jeden element (ten większy)
przesuwa się w dół -
czyli mo\na powiedzieć, \e cię\sze
A[3] 3.9 3.9
elementy idą do dołu, a l\ejsze do góry.
Dlatego tę metodę nazwano
A[4] 5.4 5.4
sortowaniem bąbelkowym
A[5] 7.8 7.8
76 PS/TP
PROGRAMOWANIE STRUKTURALNE
Ogólne zasady budowania
systemów informatycznych
77 PS/TP
PROGRAMOWANIE STRUKTURALNE
1.Naczelną zasadą budowania systemu
w programowaniu strukturalnym
jest podział programu na mniejsze moduły
78 PS/TP
PROGRAMOWANIE STRUKTURALNE
2.Treść modułu powinna zawierać całą
informację o strukturze danych modułu
79 PS/TP
PROGRAMOWANIE STRUKTURALNE
3. Przepływ danych pomiędzy modułami powinien
być minimalny i dobrze kontrolowany
80 PS/TP
PROGRAMOWANIE STRUKTURALNE
4. Liczba wejść i wyjść modułu powinna
być jak najmniejsza
81 PS/TP
PROGRAMOWANIE STRUKTURALNE
5. Tekst modułu powinien mieścić się
na jeden stronie wydruku
82 PS/TP
PROGRAMOWANIE STRUKTURALNE
6. Tworzony kod programu powinien być
wykonywany sekwencyjnie, najlepiej bez skoków
83 PS/TP
PROGRAMOWANIE STRUKTURALNE
7. Treść powinna być jednoznaczna,
bez wywołań pośrednich
84 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
85 PS/TP
PROGRAMOWANIE STRUKTURALNE
Przykład programu napisanego strukturalnie
Zadanie: sortowanie tablic
86 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;
87 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}
88 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}
89 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}
90 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}
91 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.
92 PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamiana liczb dziesiętnych
na binarne
93 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
94 PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamień liczbę dziesiętną X=25(10) na binarną Y=?(2)
Schemat postępowania:
iloraz = X div 2 reszta z dzielenia = X mod 2
X
25
: 2 12 1
12
: 2 6 0
6
: 2 3 0
Kierunek
odczytywania
3
: 2 1 1
1
: 2 0 1
iloraz równy zero kończy algorytm
Y=11001(2)
95 PS/TP
PROGRAMOWANIE STRUKTURALNE
Zamień liczbę dziesiętną X=80(10) na binarną Y=?(2)
Schemat postępowania:
iloraz = X div 2 reszta z dzielenia = X mod 2
X
80
: 2 40 0
40
: 2 20 0
20
: 2 10 0
10
: 2 5 0
5
: 2 2 1
2
: 2 1 0
Kierunek
1
: 2 0 1
odczytywania
iloraz równy zero kończy algorytm
Y=1010000(2)
96 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;
97 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}
98 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.
99 PS/TP
PROGRAMOWANIE STRUKTURALNE
Suma cyfr liczby dziesiętnej
100 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
101 PS/TP
PROGRAMOWANIE STRUKTURALNE
Zlicz sumę cyfr dziesiętnych dla liczby X=25(10)
Schemat postępowania:
iloraz = X div 10 reszta z dzielenia = X mod 10
X
25
: 10 2 5 suma = 5
suma = 7
2
: 10 0 2
iloraz równy zero kończy algorytm
suma=7
102 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;
103 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}
104 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.
105 PS/TP


Wyszukiwarka

Podobne podstrony:
pas czesc
pas czesc
pas czesc 0
pas czesc
pas czesc
czesc rozdzial
czesc 1
Thaumasyt – Część 1 Droga do powszechnie przyjętego zrozumienia
czesc rozdzial
czesc rozdzial

więcej podobnych podstron