Andrzej Jędryczkowski
Nie da się napisać większego programu bez podziału go na części zwane podprogramami. Podprogram to wyróżniona część programu komunikująca się z pozostałą jego częścią w ściśle określony sposób. Do komunikacji wykorzystywane są parametry. Podprogram może być wielokrotnie wywoływany z części głównej programu lub innych podprogramów.
Andrzej Jędryczkowski W języku Turbo Pascal istnieją dwa rodzaje podprogramów: proceduryprocedury funkcjefunkcje
Andrzej Jędryczkowski Ogólna postać procedury PROCEDURE nazwa_procedury(lista parametrów) {deklaracje stałych, zmiennych, typów – jak w programie} BEGIN {treść procedury – dowolne instrukcje} END; W procedurze nie musi występować lista parametrów
Andrzej Jędryczkowski PROGRAM tablice2; USES CRT; TYPE wektor= ARRAY[1..10] OF INTEGER; VAR i:INTEGER; tab1:wektor; tab1:wektor;BEGINCLRSCR;RANDOMIZE; FOR i:=1 TO 10 DO {wypełniamy tablicę wart. losowymi} tab1[i]:=RANDOM(100); tab1[i]:=RANDOM(100); FOR i:=1 TO 10 DO {wyświetlamy elementy tablicy} WRITE(tab1[i], ); WRITE(tab1[i], ); REPEAT UNTIL KEYPRESSED; END. Przypomnijmy program z poprzednich zajęć Da się w nim wyróżnić kilka bloków jak wypełnianie i wyświetlanie.
Andrzej Jędryczkowski Zrealizujmy program za pomocą procedur PROGRAM tablice2; USES CRT; TYPE wektor= ARRAY[1..10] OF INTEGER; VAR i:INTEGER; tab1:wektor; tab1:wektor; PROCEDURE wypelnij; BEGIN FOR i:=1 TO 10 DO {wypełniamy tablicę wart. losowymi} FOR i:=1 TO 10 DO {wypełniamy tablicę wart. losowymi} tab1[i]:=RANDOM(100); tab1[i]:=RANDOM(100);END; PROCEDURE wyswietl; BEGIN FOR i:=1 TO 10 DO {wyświetlamy elementy tablicy} WRITE(tab1[i], ); WRITE(tab1[i], );END;BEGINCLRSCR;RANDOMIZE;wypelnij;wyswietl; REPEAT UNTIL KEYPRESSED; END.
Andrzej Jędryczkowski Pozornie bardziej skomplikowany program staje się jednak czytelniejszy i znacznie bardziej elastyczny. Procedury możemy wywoływać wielokrotnie w trakcie wykonania programu. Raz zdefiniowaną procedurę możemy używać w innych swoich programach. Podczas testowania i poprawiania programu poprawiamy tylko tę procedurę, która tego wymaga, nie zawracając uwagi na inne części programu. Struktura programu staje się przejrzysta. WNIOSKI
Andrzej Jędryczkowski Ogólna postać funkcji FUNCTION nazwa_funkcji(lista parametrów):typ_wyniku {deklaracje stałych, zmiennych, typów – jak w programie} BEGIN {treść funkcji – dowolne instrukcje} nazwa_funkcji:=wynik; END; W funkcji nie musi występować lista parametrów. Musi nastąpić natomiast przypisanie wyniku na nazwę funkcji!!!
Andrzej Jędryczkowski Wywołanie funkcji wygląda nieco inaczej niż procedury. Wywołując funkcję w programie głównym bądź podprogramie można to zrobić np.. tak: WRITELN(nazwa_funkcji(parametry));zmienna:=nazwa_funkcji(parametry); Nie można natomiast wywoływać jej tak jak w przypadku procedury!!!
Andrzej Jędryczkowski
Parametry opisane w nagłówku procedury czy funkcji noszą miano parametrów formalnych. W momencie wywołania procedury czy funkcji parametry staja się parametrami aktualnymi. Istnieje dwa sposoby przekazania parametru do podprogramu: 1.przez wartość 2.przez adres (referencje)
Andrzej Jędryczkowski Przykłady Nagłówek procedury przyjmującej parametr przez wartość: PROCEDURE nazwa(parametr:TYP); W tym przypadku przekazywany parametr może być dowolnie zmieniany przez procedurę, ale po wyjściu z niej będzie miał taką samą wartość jak przed wywołaniem procedury!!!
Andrzej Jędryczkowski Przykłady Nagłówek procedury przyjmującej parametr przez adres (referencje): PROCEDURE nazwa( VAR parametr:TYP); W tym przypadku przekazywany parametr może być dowolnie zmieniany przez procedurę, ale po wyjściu z niej będzie miał taką wartość jaką nada mu procedura!!!
Andrzej Jędryczkowski Przykłady PROGRAM test1; USES CRT; VAR i:INTEGER; PROCEDURE zmien(c:INTEGER); BEGIN WRITELN(wartosc parametru po wejściu do proc.:,c); WRITELN(wartosc parametru po wejściu do proc.:,c); c:=c+5; c:=c+5; WRITELN(wartosc parametru po dzialaniu:,c); WRITELN(wartosc parametru po dzialaniu:,c);END;BEGINCLRSCR; WRITE(podaj wartosc i:);READLN(i); WRITELN(wartosc i przed wywolaniem procedury:,i); zmien(i); WRITELN(wartosc i po wyjsciu z procedury:,i); REPEAT UNTIL KEYPRESSED; END. Uruchom program i zapisz wyniki!!!
Andrzej Jędryczkowski Przykłady PROGRAM test1; USES CRT; VAR i:INTEGER; PROCEDURE zmien(VAR c:INTEGER); BEGIN WRITELN(wartosc parametru po wejściu do proc.:,c); WRITELN(wartosc parametru po wejściu do proc.:,c); c:=c+5; c:=c+5; WRITELN(wartosc parametru po dzialaniu:,c); WRITELN(wartosc parametru po dzialaniu:,c);END;BEGINCLRSCR; WRITE(podaj wartosc i:);READLN(i); WRITELN(wartosc i przed wywolaniem procedury:,i); zmien(i); WRITELN(wartosc i po wyjsciu z procedury:,i); REPEAT UNTIL KEYPRESSED; END. Zmień i uruchom program. Zapisz i porównaj wyniki!!!
Andrzej Jędryczkowski Ćwiczenia Napisz program, który stworzy tablicę, wypełni ją losowa zawartością oraz zrealizuje następujące funkcje: a)policzy sumę elementów; b)znajdzie element największy; c)znajdzie element największy. Wypełnianie, sumowanie i szukanie elementów maja być zrealizowane za pomocą procedur bądź funkcji.
Andrzej Jędryczkowski