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