PASCAL (3)
PASCAL (3)
Funkcje
Funkcje
ujęcie pewnych działań w osobną
ujęcie pewnych działań w osobną
strukturę programistyczną
strukturę programistyczną
stosuje się, gdy
stosuje się, gdy
1.
1.
pewne czynności w algorytmie w
pewne czynności w algorytmie w
różnych miejscach powtarzają się
różnych miejscach powtarzają się
2.
2.
ich wynikiem jest jedna wartość
ich wynikiem jest jedna wartość
3.
3.
chcemy zwiększyć przejrzystość
chcemy zwiększyć przejrzystość
programu
programu
Funkcje
Funkcje
deklaracja funkcji (segment
deklaracja funkcji (segment
FUNCTION
FUNCTION
):
):
FUNCTION
FUNCTION
nazwa
nazwa
(par_formalne):typ_wyniku;
(par_formalne):typ_wyniku;
część opisowa (deklaracje zmiennych lokalnych)
część opisowa (deklaracje zmiennych lokalnych)
BEGIN
BEGIN
część wykonawcza (musi zawierać instrukcję
część wykonawcza (musi zawierać instrukcję
nazwa:=wartość;
nazwa:=wartość;
)
)
END;
END;
Funkcje
Funkcje
gdzie
gdzie
nazwa
nazwa
jest dowolną unikalną w
jest dowolną unikalną w
danym programie, poprawną nazwą
danym programie, poprawną nazwą
w
w
języku PASCAL,
języku PASCAL,
par_formalne
par_formalne
to wykaz zmiennych
to wykaz zmiennych
określający typ i ilość danych
określający typ i ilość danych
potrzebnych do wykonania
potrzebnych do wykonania
Funkcje
Funkcje
przy deklaracji segmentu
przy deklaracji segmentu
FUNCTION
FUNCTION
należy pamiętać:
należy pamiętać:
1.
1.
o zadeklarowaniu typu wyniku w
o zadeklarowaniu typu wyniku w
nagłówku funkcji
nagłówku funkcji
2.
2.
o podstawieniu otrzymanego
o podstawieniu otrzymanego
wyniku pod nazwę segmentu w
wyniku pod nazwę segmentu w
treści funkcji
treści funkcji
Funkcje
Funkcje
wywołanie segmentu
wywołanie segmentu
FUNCTION
FUNCTION
nie
nie
jest instrukcją, zatem musi wchodzić
jest instrukcją, zatem musi wchodzić
w skład innej instrukcji
w skład innej instrukcji
wywołanie ma postać:
wywołanie ma postać:
nazwa
nazwa
(
(
par_aktualne
par_aktualne
)
)
par_aktualne
par_aktualne
muszą być zgodne z
muszą być zgodne z
par_formalne
par_formalne
co do ilości, kolejności i
co do ilości, kolejności i
typu
typu
Procedury
Procedury
deklaracja procedury:
deklaracja procedury:
PROCEDURE
PROCEDURE
nazwa
nazwa
(
(
lista
lista
_
_
par_formalnych
par_formalnych
);
);
część opisowa
część opisowa
BEGIN
BEGIN
część wykonawcza
część wykonawcza
END;
END;
Procedury
Procedury
lista
lista
_
_
par_formalnych
par_formalnych
zawiera
zawiera
zarówno dane, jak i wyniki
zarówno dane, jak i wyniki
dane (w procedurze nie ulegają
dane (w procedurze nie ulegają
zmianie ich wartości) wymienione są
zmianie ich wartości) wymienione są
w postaci:
w postaci:
zm1:typ1; zm2:typ2;...
zm1:typ1; zm2:typ2;...
wyniki ( wartości tych zmiennych są
wyniki ( wartości tych zmiennych są
określane wewnątrz procedury)
określane wewnątrz procedury)
poprzedzane muszą być słowem
poprzedzane muszą być słowem
kluczowym
kluczowym
VAR
VAR
:
:
VAR
VAR
wy1:typ1;...
wy1:typ1;...
Procedury
Procedury
wywołanie procedury jest instrukcją:
wywołanie procedury jest instrukcją:
nazwa_procedury
nazwa_procedury
(lista_par_aktualn);
(lista_par_aktualn);
lista_par_aktualn
lista_par_aktualn
musi być zgodna z
musi być zgodna z
lista_par_formalnych
lista_par_formalnych
co do ilości,
co do ilości,
kolejności i typów danych oraz
kolejności i typów danych oraz
wyników
wyników
Typ rekordowy
Typ rekordowy
rekordem nazywa się złożoną
rekordem nazywa się złożoną
strukturę danych, której składowe
strukturę danych, której składowe
zwane polami mogą należeć do
zwane polami mogą należeć do
różnych typów
różnych typów
Typ rekordowy
Typ rekordowy
definicja typu rekordowego określa
definicja typu rekordowego określa
typ i identyfikator dla każdego pola:
typ i identyfikator dla każdego pola:
TYPE nazwa_typu=RECORD
TYPE nazwa_typu=RECORD
lista_deklaracji_pol
lista_deklaracji_pol
END;
END;
każda z deklaracji pól ma postać:
każda z deklaracji pól ma postać:
nazwy_pol:typ;
nazwy_pol:typ;
Typ rekordowy
Typ rekordowy
odwołanie się do pola rekordu:
odwołanie się do pola rekordu:
zm_rekordowa.identyf_pola
zm_rekordowa.identyf_pola
instrukcja wiążąca upraszcza sposób
instrukcja wiążąca upraszcza sposób
odwołania się do pola rekordu
odwołania się do pola rekordu
postać:
postać:
WITH zm_rekordowa DO
WITH zm_rekordowa DO
instrukcje
instrukcje
;
;
wewnątrz, w
wewnątrz, w
instrukcjach
instrukcjach
można
można
używać tylko nazw pól
używać tylko nazw pól
Moduł
Moduł
podstawa programowania modularnego
podstawa programowania modularnego
służy do grupowania funkcji i procedur w
służy do grupowania funkcji i procedur w
biblioteki
biblioteki
nie stanowi samoistnego programu
nie stanowi samoistnego programu
jego użycie w programie wymaga
jego użycie w programie wymaga
deklaracji USES
deklaracji USES
po zadeklarowaniu modułu w danym
po zadeklarowaniu modułu w danym
programie dostępny jest każdy obiekt w
programie dostępny jest każdy obiekt w
nim zadeklarowany, kazda funkcja i
nim zadeklarowany, kazda funkcja i
procedura w nim zawarta
procedura w nim zawarta
Ogólna postać modułu
Ogólna postać modułu
UNIT nazwa_modułu;
UNIT nazwa_modułu;
cześć opisowa;
cześć opisowa;
część implementacyjna;
część implementacyjna;
część inicjująca;
część inicjująca;
END.
END.
Moduł
Moduł
kropka kończy moduł
kropka kończy moduł
nazwa modułu musi być unikalna
nazwa modułu musi być unikalna
obiekty zadeklarowane w module w
obiekty zadeklarowane w module w
części opisowej będą dostępne w
części opisowej będą dostępne w
programie lub innym module
programie lub innym module
wykorzystującym dany moduł
wykorzystującym dany moduł
Postać modułu
Postać modułu
INTERFACE
INTERFACE
dekl_modulow;
dekl_modulow;
def_literalow;
def_literalow;
def_typow;
def_typow;
dekl_zmiennych;
dekl_zmiennych;
lista_naglowkow_proc_i_fun; -
lista_naglowkow_proc_i_fun; -
wszystkie, które występują w części
wszystkie, które występują w części
implementacyjnej
implementacyjnej
Postać modułu
Postać modułu
IMPLEMENTATION
IMPLEMENTATION
{umieszczamy tu deklaracje lokalnych
{umieszczamy tu deklaracje lokalnych
obiektów, niedostępnych w
obiektów, niedostępnych w
programie}
programie}
{opisy funkcji i procedur}
{opisy funkcji i procedur}
{nagłówki mogą być bez parametrów}
{nagłówki mogą być bez parametrów}
część inicjująca;
część inicjująca;
END.
END.
Współpraca z plikami
Współpraca z plikami
do obsługi fizycznych zbiorów danych
do obsługi fizycznych zbiorów danych
stosuje się pliki
stosuje się pliki
plik jest logicznym modelem zbioru
plik jest logicznym modelem zbioru
danych
danych
każdy plik składa się z elementów
każdy plik składa się z elementów
tego samego typu
tego samego typu
elementy pliku posiadają swoje
elementy pliku posiadają swoje
numery porządkowe (zaczynające się
numery porządkowe (zaczynające się
od 0)
od 0)
Współpraca z plikami
Współpraca z plikami
pliki przetwarza się sekwencyjnie
pliki przetwarza się sekwencyjnie
wszelkie operacje na plikach mogą
wszelkie operacje na plikach mogą
być wykonywane jedynie za pomocą
być wykonywane jedynie za pomocą
procedur standardowych
procedur standardowych
dostęp do pliku uzyskuje się za
dostęp do pliku uzyskuje się za
pomocą zmiennej plikowej - zmiennej
pomocą zmiennej plikowej - zmiennej
deklarowanej jako zmienna
deklarowanej jako zmienna
odpowiedniego typu plikowego
odpowiedniego typu plikowego
Typ plikowy
Typ plikowy
W Turbo Pascalu rozróżniamy trzy
W Turbo Pascalu rozróżniamy trzy
klasy plików:
klasy plików:
zdefiniowane
zdefiniowane
tekstowe
tekstowe
niezdefiniowane
niezdefiniowane
Zdefiniowane
Zdefiniowane
definicja typu dla plików
definicja typu dla plików
zdefiniowanych:
zdefiniowanych:
TYPE id_pliku = FILE OF opis_typu_el;
TYPE id_pliku = FILE OF opis_typu_el;
typ elemntów nie może być typu
typ elemntów nie może być typu
plikowego
plikowego
Przykład:
Przykład:
TYPE
TYPE
liczby=FILE OF REAL;
liczby=FILE OF REAL;
Tekstowe
Tekstowe
dla plików tekstowych jest
dla plików tekstowych jest
predefiniowany typ
predefiniowany typ
TEXT
TEXT
elementami plików tekstowych są
elementami plików tekstowych są
wiersze zakończone parą znaków
wiersze zakończone parą znaków
sterujących
sterujących
CR/LF
CR/LF
po ostatnim wierszu występuje
po ostatnim wierszu występuje
CTRL Z
CTRL Z
Przykład
Przykład
TYPE blog=TEXT;
TYPE blog=TEXT;
Niezdefiniowane
Niezdefiniowane
dla plików niezdefiniowanych
dla plików niezdefiniowanych
TYPE id_pliku = FILE;
TYPE id_pliku = FILE;
SKOJARZENIE PLIKU Z FIZYCZNYM
ZBIOREM DANYCH
CZĘŚĆ
OPISOWA
OPIS ZMIENNEJ PLIKOWEJ
OTWARCIE PLIKU
WYKONANIE OPERACJI NA PLIKU
ZAMKNIĘCIE PLIKU
CZĘŚĆ
WYKONAWCZA
ETAPY PRZETWARZANIA PLIKU
Przetwarzanie plików
Przetwarzanie plików
w części opisowej należy
w części opisowej należy
zadeklarować zmienna plikową jako
zadeklarować zmienna plikową jako
zmienną odpowiedniego typu
zmienną odpowiedniego typu
plikowego – tego samego jak plik,
plikowego – tego samego jak plik,
który ma reprezentować
który ma reprezentować
zmienna typu plikowego tekstowego
zmienna typu plikowego tekstowego
nie może obsługiwać pliku np.z
nie może obsługiwać pliku np.z
elementami typu rzeczywistego,
elementami typu rzeczywistego,
gdyż będą potraktowane jako tekst
gdyż będą potraktowane jako tekst
Typ plikowy
Typ plikowy
Polecenia realizujące poszczególne
Polecenia realizujące poszczególne
etapy współpracy z plikami:
etapy współpracy z plikami:
1.
1.
ASSIGN(zm_plik, łańcuch);
ASSIGN(zm_plik, łańcuch);
zm_plik – zmienna plikowa
zm_plik – zmienna plikowa
odpowiedniego typu
odpowiedniego typu
łańcuch – określa fizyczny zbiór danych
łańcuch – określa fizyczny zbiór danych
(nie więcej niż 79 znaków)
(nie więcej niż 79 znaków)
2.
2.
Plik o podanym identyfikatorze nie
Plik o podanym identyfikatorze nie
może być
może być
otwarty
otwarty
!!!
!!!
Typ plikowy
Typ plikowy
za pomocą tej procedury można
za pomocą tej procedury można
skojarzyć zmienną plikową z:
skojarzyć zmienną plikową z:
–
klawiaturą
klawiaturą
‘CON’,
‘CON’,
–
ekranem monitora
ekranem monitora
‘CON’,
‘CON’,
–
drukarkami
drukarkami
’LPT1’,...,’LPT3’
’LPT1’,...,’LPT3’
–
portami we/wy
portami we/wy
‘COM1’, ‘COM2’
‘COM1’, ‘COM2’
–
zbiorem danych znajdującym się na
zbiorem danych znajdującym się na
dyskach wymiennych
dyskach wymiennych
‘ścieżka dostępu’
‘ścieżka dostępu’
Przykłady
Przykłady
TYPE plik=FILE OF INTEGER;
TYPE plik=FILE OF INTEGER;
VAR pl1:plik;
VAR pl1:plik;
BEGIN
BEGIN
ASSIGN(pl1, ‘c:\przyklady\dane.txt’);
ASSIGN(pl1, ‘c:\przyklady\dane.txt’);
…
…
END;
END;
Typ plikowy
Typ plikowy
W zależności od przesyłania
W zależności od przesyłania
elementów do lub z pliku są trzy
elementów do lub z pliku są trzy
standardowe procedury jego
standardowe procedury jego
otwierania
otwierania
–
REWRITE
REWRITE
–
RESET
RESET
–
APPEND
APPEND
Otwieranie pliku
Otwieranie pliku
gdy chcemy, aby plik zdefiniowany
gdy chcemy, aby plik zdefiniowany
lub tekstowy został stworzony
lub tekstowy został stworzony
używamy procedury
używamy procedury
REWRITE (zm_plik);
REWRITE (zm_plik);
dla plików niezdefiniowanych
dla plików niezdefiniowanych
REWRITE(zm_plik, rozmiar_pliku);
REWRITE(zm_plik, rozmiar_pliku);
–
jeśli nie podamy rozmiaru, to jest
jeśli nie podamy rozmiaru, to jest
przyjmowane 128 bajtów
przyjmowane 128 bajtów
REWRITE
REWRITE
użycie procedury
użycie procedury
REWRITE
REWRITE
powoduje:
powoduje:
utworzenie pustego pliku w miejscu
utworzenie pustego pliku w miejscu
określonym w
określonym w
ASSIGN
ASSIGN
otworzenie nowoutworzonego pliku
otworzenie nowoutworzonego pliku
do zapisu/odczytu
do zapisu/odczytu
UWAGA!!!
UWAGA!!!
procedura zastosowana
procedura zastosowana
do istniejącego pliku kasuje jego
do istniejącego pliku kasuje jego
zawartość
zawartość
RESET
RESET
Plik już istniejący otwiera procedura
Plik już istniejący otwiera procedura
RESET(zm_plik);
RESET(zm_plik);
lub
lub
RESET(zm_plik, rozmiar);
RESET(zm_plik, rozmiar);
dla plików niezdefiniowanych
dla plików niezdefiniowanych
Otwarcie pliku
Otwarcie pliku
procedura ta umieszcza wskaźnik
procedura ta umieszcza wskaźnik
pliku na pierwszym elemencie
pliku na pierwszym elemencie
do otwarcia pliku tekstowego, aby
do otwarcia pliku tekstowego, aby
dopisać do zapamiętanego tekstu
dopisać do zapamiętanego tekstu
ciąg dalszy służy procedura:
ciąg dalszy służy procedura:
APPEND(zm_plik);
APPEND(zm_plik);
Zamknięcie pliku
Zamknięcie pliku
zamknięcie pliku powoduje procedura
zamknięcie pliku powoduje procedura
CLOSE(zm_plik);
CLOSE(zm_plik);
zamknięcie pliku jest praktycznie
zamknięcie pliku jest praktycznie
jedynym sposobem na bezpieczne
jedynym sposobem na bezpieczne
zapisanie w nim wszystkich danych
zapisanie w nim wszystkich danych
po zamknięciu pliku zmienną plikową
po zamknięciu pliku zmienną plikową
można skojarzyć z innym zbiorem
można skojarzyć z innym zbiorem
danych
danych
Zapis elementów do pliku
Zapis elementów do pliku
Zapis elementów do pliku realizują
Zapis elementów do pliku realizują
następujące procedury:
następujące procedury:
dla plików zdefiniowanych
dla plików zdefiniowanych
WRITE(zm_plik, lista_argumentów)
WRITE(zm_plik, lista_argumentów)
dla plików tekstowych
dla plików tekstowych
WRITELN(zm_plik, lista_argumentów)
WRITELN(zm_plik, lista_argumentów)
Zapis do pliku
Zapis do pliku
dla plików niezdefiniowanych
dla plików niezdefiniowanych
BLOCKWRITE(zm_plik, bufor, licznik);
BLOCKWRITE(zm_plik, bufor, licznik);
lub
lub
BLOCKWRITE(zm_plik,bufor, licznik, wynik);
BLOCKWRITE(zm_plik,bufor, licznik, wynik);
gdzie
gdzie
licznik
licznik
- max liczba zapisów
- max liczba zapisów
bufor
bufor
- nazwa zmiennej, której pierwszy bajt
- nazwa zmiennej, której pierwszy bajt
jest początkiem zapisu
jest początkiem zapisu
wynik –
wynik –
zmienna zawierająca ilość
zmienna zawierająca ilość
dokonanych zapisów
dokonanych zapisów
Odczytywanie elementów z
Odczytywanie elementów z
pliku
pliku
dla plików zdefiniowanych
dla plików zdefiniowanych
READ(zm_plik, el_wejsciowe);
READ(zm_plik, el_wejsciowe);
dla plików tekstowych
dla plików tekstowych
READLN(zm-plik, el_wejsciowe);
READLN(zm-plik, el_wejsciowe);
dla plików niezdefiniowanych
dla plików niezdefiniowanych
BLOCKREAD(zm_plik, bufor, licznik);
BLOCKREAD(zm_plik, bufor, licznik);
lub
lub
BLOCKREAD(zm_plik, bufor, licznik, wynik)
BLOCKREAD(zm_plik, bufor, licznik, wynik)
Przykład
Przykład
Zapisanie tekstu wprowadzanego z
Zapisanie tekstu wprowadzanego z
klawiatury na dyskietkę
klawiatury na dyskietkę
PROGRAM pliki1;
PROGRAM pliki1;
VAR txt:STRING; pl:TEXT;
VAR txt:STRING; pl:TEXT;
BEGIN
BEGIN
ASSIGN(pl,’A:teksty.TXT’);
ASSIGN(pl,’A:teksty.TXT’);
REWRITE(pl);
REWRITE(pl);
WRITE(‘NAPISZ TEKST MAX 256 ZNAKÓW’);
WRITE(‘NAPISZ TEKST MAX 256 ZNAKÓW’);
WRITELN;
WRITELN;
READLN(txt); WRITELN(pl,txt);
READLN(txt); WRITELN(pl,txt);
CLOSE(pl):
CLOSE(pl):
END.
END.
Przykład
Przykład
Wydrukować na drukarce tekst zapisany w pliku
Wydrukować na drukarce tekst zapisany w pliku
poprzednim
poprzednim
PROGRAM PLIKI2;
PROGRAM PLIKI2;
VAR txt:STRING;
VAR txt:STRING;
pl:TEXT;
pl:TEXT;
BEGIN ASSIGN(pl,’A:tekst.txt’);
BEGIN ASSIGN(pl,’A:tekst.txt’);
RESET(PL); READLN(PL,txt);
RESET(PL); READLN(PL,txt);
CLOSE(PL); ASSIGN(pl,’LPT1’);
CLOSE(PL); ASSIGN(pl,’LPT1’);
REWRITE(pl); WRITELN(pl,txt);
REWRITE(pl); WRITELN(pl,txt);
CLOSE(pl);
CLOSE(pl);
END.
END.
Procedury współpracujące z
Procedury współpracujące z
systemem operacyjnym
systemem operacyjnym
ChDir(łańcuch); - zmiana katalogu
ChDir(łańcuch); - zmiana katalogu
aktualnego
aktualnego
MkDir(łańcuch); - utworzenie
MkDir(łańcuch); - utworzenie
katalogu
katalogu
RmDir(łańcuch);- skasowanie
RmDir(łańcuch);- skasowanie
katalogu
katalogu
Procedury współpracujące z
Procedury współpracujące z
systemem operacyjnym
systemem operacyjnym
Po procedurze CLOSE(zm_plik);
Po procedurze CLOSE(zm_plik);
Erase(zm_plik); - skasowanie pliku
Erase(zm_plik); - skasowanie pliku
skojarzonego ze zmienną plikową
skojarzonego ze zmienną plikową
Rename(zm_plik, łańcuch); - zmiana
Rename(zm_plik, łańcuch); - zmiana
nazwy skojarzonej ze zmienną
nazwy skojarzonej ze zmienną
plikową na podaną w ‘łańcuch’
plikową na podaną w ‘łańcuch’
Procedury współpracujące z
Procedury współpracujące z
systemem operacyjnym
systemem operacyjnym
Eof(zm_plik); - TRUE gdy koniec pliku
Eof(zm_plik); - TRUE gdy koniec pliku
Eoln(zm_plik); - TRUE gdy na znaku końca
Eoln(zm_plik); - TRUE gdy na znaku końca
wiersza
wiersza
FilePos(zm_plik); - pozycja wskaźnika w
FilePos(zm_plik); - pozycja wskaźnika w
pliku
pliku
FileSize(zm_plik); - ilość element.ów w
FileSize(zm_plik); - ilość element.ów w
pliku
pliku
Seek(zm_plik, numer); - określa nr
Seek(zm_plik, numer); - określa nr
elementu, na którym ma być wskaźnik
elementu, na którym ma być wskaźnik