Podprogramy Turbo Pascala.doc

(102 KB) Pobierz
WSTĘP

Podprogramy Turbo Pascala 

 

 

 

 

Turbo Pascal - jedna z popularniejszych implementacji kompilatorów języka Pascal, zintegrowane środowisko programistyczne, produkt firmy Borland International dla procesorów Z-80 (system CP/M) oraz rodziny Intel 80x86 i nowszych.

Pascal jest językiem programowania nie narzucającym programiście żadnych wymagań co do formy zapisu instrukcji i deklaracji. Z punktu widzenia kompilatora programista może umieścić w jednej linii tyle instrukcji (deklaracji), ile tylko może pomieścić i może zacząć pisanie instrukcji od dowolnej kolumny (za wyjątkiem ciągu znaków stanowiących tekst).



 

 

 

 

 

 

 

 

 

 

Rys.1 Okno programowania w Turbo Pascalu

 

Podprogram – stanowi wydzieloną część programu, która posiada unikalną nazwę i stanowi logiczną całość realizującą określone zadanie. Jeśli zadanie ma być wykonane w pewnym miejscu programu, to podprogram jest wywoływany w tym miejscu z odpowiednimi parametrami.

Do podprogramu można przekazać argumenty wejściowe, które są wy­ko­rzystywane do realizacji pewnych działań. Wyniki działania podprogramu mogą być przekazane do programu głównego za pośrednictwem parametrów wyjścio­wych lub wejściowo / wyjściowych (dane wejściowe ulegające modyfi­kacji wewnątrz podprogramu). 

 

 

 

 

W języku Turbo Pascal podprogramy mogą być zrealizowane za pomocą:

 

·        procedur,

·        funkcji,

·        modułów.

 

W języku Pascal istnieje grupa podprogramów, które są dostępne jako:

 

·        podprogramy standardowe,

·        podprogramy wbudowane.

 

Podprogramy standardowe są zawarte w bibliotekach nazywanych modułami. Użycie każdego modułu należy w programie zapowiedzieć umieszczając za nagłówkiem programu dyrektywę:  uses nazwa_modułu; np. uses crt. Po takiej deklaracji można korzystać ze wszystkich procedur i funkcji zawartych w module (np. clrscr).

                Podprogramy wbudowane nie wymagają wcześniejszych zapowiedzi użycia. W całym programie można używać wszystkich procedur i funkcji w nich zdefiniowanych (np. procedury obsługi wejścia i wyjścia – read, write).

 

Definicja procedury i funkcji

 

Definicja procedury składa się z nazwy, po której mogą wystąpić ujęte w nawiasy okrągłe parametry formalne procedury. Za pomocą listy parametrów można przekazać do procedury dane wejściowe lub odebrać wyniki. Proce­du­ra może zwracać wiele wyników. Liczba argumentów procedury jest dowol­na a ich typy mogą być różne. Instrukcja wywołania procedury może być bezparametrowa (np. clrscr) lub może posiadać zmienną liczbę parametrów o różnym typie (np. writeln(x, y, ’tekst’)). Proce­durę wywołuje się podając jej nazwę uzu­peł­nioną o parametry aktualne, zastępujące wszystkie parametry formalne.

 

 

 

Program wykorzystujący procedury.

 

Program P61;

uses crt;

Var a, b: integer;

 

Begin

   clrscr;                                          { procedura bezparametrowa }

   write(’Podaj a = ’);               { procedura z parametrem łańcuchowym }

   readln(a);                             { procedura z parametrem, który jest modyfikowany }

   write(’Podaj b = ’);               { procedura z parametrem łańcuchowym }

   readln(b);                            { procedura z parametrem, który jest modyfikowany }

   writeln(’ Obliczanie iloczynu a * b = ’, a*b);  { wiele parametrów }

   readln;                                          { procedura bezparametrowa }

End.

                           

Definicja funkcji składa się z nazwy, po której mogą wystąpić ujęte w nawiasy okrągłe parametry formalne funkcji. Funkcja zwraca przez nazwę jeden z wyników obliczeń. Typ wyniku jest podawany po dwukropku, za listą parametrów funkcji. Za pomocą listy parametrów można przekazać do funkcji dane wejściowe lub odebrać wyniki. Funkcja może być wywoływana w wyra­że­niach, z prawej strony instrukcji przypisania lub bezpośrednio w innych procedurach lub funkcjach. Funkcję wywołuje się podając jej nazwę uzupeł­nioną o parametry aktualne, zastępujące wszystkie parametry formalne. Funkcja może być bezparametrowa (np. z:= readkey).

Program wykorzystujący funkcje.

 

Program P62;

uses crt;

Var a, b, d: real;

 

Begin

   clrscr;                                          { procedura bezparametrowa }

   write(’Podaj a = ’);               { procedura z parametrem łańcuchowym }

   readln(a);                             { procedura z parametrem, który jest modyfikowany }

   write(’Podaj b = ’);               { procedura z parametrem łańcuchowym }

   readln(b);                            { procedura z parametrem, który jest modyfikowany }

   d:= sqr(a) + sqr(b);              { sqr funkcja podnoszenia do kwadratu }

   d:= sqrt(d);                            { sqrt funkcja obliczania pierwiastka kwadratowego }

   writeln(’Odległość (a,b) od (0,0) d = ’, d : 8 : 2); 

   readkey;                                          { funkcja bezparametrowa }

End.

                                         

Procedura

 

Definicja procedury składa się z nagłówka i bloku procedury. Blok procedury składa się podobnie jak każdy program z części deklaracyjnej i części wykonawczej.

W nagłówku procedury podawane są nazwy i typy parametrów formalnych przekazywa­nych do procedury. Podczas wywołania procedury wszystkie parametry formalne są zastępowane parametrami aktualnymi o takich samych typach.

 

Funkcja

 

Definicja funkcji składa się z nagłówka i bloku funkcji. Blok funkcji składa się z części deklaracyjnej i części wykonawczej, których zawartość jest taka sama jak w przypadku procedury. W nagłówku funkcji dodatkowo po liście parametrów formalnych podaje się po dwukropku typ wartości zwraca­nej przez funkcję (inne wyniki mogą być zwracane za pośrednictwem para­me­­trów funkcji).

Podczas wywołania funkcji wszystkie parametry formal­ne są zastępowane parametrami aktualnymi o takich samych typach. Zmienne, stałe, procedury i funkcje lokalne są wido­czne tylko wewnątrz funkcji.

              Ostatnią instrukcją w części wykonawczej funkcji musi być instrukcja, która przypisuje nazwie funkcji wartość obliczoną wewnątrz funkcji. Podczas wywołania funkcji obliczona wartość jest jednym z wyników odbieranych z funkcji (np. y = sin(pi); y – przyjmuje wartość obliczoną wewnątrz funkcji dla parametru wejściowego pi).

 

 

 

Zalety stosowania podprogramów

 

              Program, w którym występują podprogramy składa się z szeregu wywołań tych podprogramów, rozdzielonych instrukcjami przygotowującymi argumenty niezbędne do wywołania następnego podprogramu, lub instruk­cjami, które wykorzystują wyniki otrzymane z wcześniej wywoływanych podprogramów.

              Do najważniejszych zalet stosowania podprogramów należą:

·        możliwość podziału programu na łatwiejsze do analizy fragmenty;

·        skrócenie kodu źródłowego poprzez wielokrotne odwołania do

tego samego podprogramu;

·        lepsze wykorzystanie pamięci dzięki możliwości deklarowania zmiennych lokalnych podprogramów, dla których pamięć jest rezerwowana tylko podczas działania podprogramów;

·        możliwość projektowania i testowania odrębnych fragmentów programu;

·        czytelność i łatwość modyfikacji programu;

·        możliwość tworzenia bibliotek podprogramów i udostępniania ich innym użytkownikom.

 

W praktyce podprogramy realizują obliczenia częściowe i przekazują ich wyniki przez wartość zwracaną przez nazwę funkcji lub przez zmienne do progra­mu głównego, w którym są one wykorzysty­wane przez kolejne procedury i funkcje.

 

Stosowanie podprogramów do realizacji krótkich obliczeń, które są często wywoływane, może prowadzić do wydłużenia czasu działania programu. Podczas testowania programu należy określić procedury i funkcje mające znaczący wpływ na czas jego realizacji. Skrócenie czasu działania tych podprogramów lub wstawienie ich treści bezpośrednio w kod programu może prowadzić do znacznego skrócenia czasu realizacji całego programu.

Moduły

Moduły służą przede wszystkim do grupowania typów, stałych, zmiennych, procedur i funkcji w biblioteki, a także do dzielenia dużych programów na powiązane logicznie części. Każdy moduł musi być przed użyciem skompilowany. Powstaje wówczas blok kodowy o rozszerzeniu nazwy:

 

              ·              nazwa.TPU   -  tryb rzeczywisty;

              ·              nazwa.TPP    -  tryb chroniony;

              ·              nazwa.TPW  -  środowisko MS Windows.

 

Użycie modułu w programie wymaga jego deklaracji za pomocą derektywy uses. Nazwa modułu, oraz nazwa pliku, w którym jest on pamiętany, powinny być identyczne i unikatowe, gdyż  są one jego identyfikatorem.

 

UNIT nazwa;

INTERFACE

              deklaracje innych modułów

              definicje stałych i typów

              deklaracje zmiennych

              lista nagłówków procedur i funkcji

IMPLEMENTATION

              deklaracje modułów wzajemnie zależnych

              definicje procedur i funkcji wymienionych w części  "interface"

              deklaracje etykiet, stałych, zmiennych, definicje typów,

              procedur i funkcji wewnętrznych (tzn. dostępnych tylko

              w module)

BEGIN   

    część inicjująca modułu (wykonywana tylko raz)

END.

 

Właściwy dobór w programie funkcji i procedur jest istotną częścią dobrze zaprojektowanego programu. Podprogramy w postaci funkcji bądź procedur powinny być dostępne w postaci czarnych skrzynek, tzn. opis ich funkcjonowania oraz opis parametrów wejściowych i wyjściowych powinien wystarczyć do poprawnego ich wykorzystania. Nie powinna zatem zachodzić konieczność zaglądania do wnętrza podprogramu i analizowania jego instrukcji w celu określenia co dany podprogram robi i czego wymaga dla swojego prawidłowego działania. Stąd mamy kolejną zasadę dobrego programowania:

 

 

Każda procedura (funkcja) powinna mieć do wykonania ściśle określone zadanie i to zadanie powinno być w zupełności opisane w procedurze (funkcji).

W celu ułatwienia korzystania z podprogramów przez innych użytkowników lub w innych programach należy unikać używania odwołań do zewnętrznych zmiennych, tj. takich zmiennych, które nie są ani lokalne w procedurze (funkcji), ani nie zostały przekazane do jej wnętrza poprzez jej parametry. Jeśli już trzeba to zrobić, to fakt ten powinien być wyraźnie zaznaczony w opisie podprogramu. Czasami może się zdarzyć, że poprawne funkcjonowanie podprogramu zależy od wartości pewnych zmiennych; mówimy wówczas, że ten podprogram zależy od tych zmiennych. W zasadzie należy dążyć do usuwania zależności tego typu np. poprzez dodanie do podprogramu odpowiednich instrukcji sprawdzających czy są spełnione warunki poprawnego jego funkcjonowania. W przypadku ich niespełnienia program nie powinien kończyć się błędem, lecz stosownym komunikatem objaśniającym powód niepoprawnego zakończenia się programu. W podprogramach należy unikać zewnętrznych odwołań i zależności.

 

6

 

Zgłoś jeśli naruszono regulamin