Przeglądaj wersję html pliku:

wiczenie 18


cwicz_18

H M P R O G R A M O W A N I E

str. 44
W D E L P H I

ĆWICZENIE 18 – Zastosowanie własnych procedur - przekazywanie danych
przez parametry procedury. Potrafisz: ♦ stosować w obliczeniach własne funkcje matematyczne, ♦ dzielić cały tok obliczeń na główne bloki oraz bloki te deklarować i stosować jako procedury. W poprzednich zadaniach zmienne deklarowano w sekcji implementacji modułu. Dlatego w każdym miejscu modułu można było z tych zmiennych korzystać. Także każda procedura mogła do tych zmiennych odwoływać się. Często jednak w programowaniu zachodzi przypadek, że utworzona procedura wykorzystywana musi być wielokrotnie. Przy tym za każdym razem musi operować na innych wartościach danych i do innych zmiennych oddawać wyniki obliczeń. Rozważmy przykład. Trzeba obliczyć ciężar i objętość całej bryły, złożonej z trzech sześcianów. Każdy sześcian ma inne wymiary i z innego zrobiony jest materiału (inny ciężar właściwy). Zestaw danych do programu składa się z sześciu liczb: długości boków: a1, a2, a3; ciężary właściwe: gam1, gam2, gam3. Algorytm obliczania objętości i ciężaru sześcianu jest oczywiście bardzo prosty. a3 gam3 v=a*a*a q=v*gam gdzie: v - to objętość sześcianu, q - ciężar sześcianu. a2 gam2 Aby znaleźć objętość i ciężar całej bryły trzeba ten algorytm zastosować trzykrotnie i dodać wyniki otrzymane dla każdego z tych trzech sześcianów, a1 gam1 Vglob=v1+v2+v3 Qglob=q1+q2+q3

Algorytm obliczania objętości i ciężaru sześcianu będzie treścią procedury. Ale jak tę procedurę zdefiniować i jak ją później stosować, by dokonywała ona za każdym razem obliczeń w oparciu o inny zestaw danych ? Przy tym, wyniki powinna za każdym razem odsyłać do innych zmiennych raz do v1 i q1, potem do v2 i q2, a na końcu do v3 i q3. Rozwiążemy ten problem, gdy nauczymy się przekazywać dane do procedury (i odbierać z niej wyniki) poprzez parametry procedury. Podaną w ćwiczeniu 17 prostą postać procedury musimy nieco skomplikować. Za nazwą procedury trzeba umieścić listę parametrów procedury (koniecznie w nawiasie). W naszym przykładzie definicja procedury obliczania objętości i ciężaru sześcianu powinna mieć poniższą postać.

44

cwicz_18

H M P R O G R A M O W A N I E

str. 45
W D E L P H I

Deklaracja parametrów, które nie zmieniają wartości przy wyjściu z procedury Słowo kluczowe Nazwa procedury

Deklaracja parametrów, które mogą mieć zmienioną wartości przy wyjściu z procedury

Procedure Szescian(a,gam:real; var v,q:real); begin v:=a*a*a; q:=v*qam end;
Tu mogą być deklaracje potrzebnych stałych i zmiennych lokalnych Część obliczeniowa działająca na zmiennych lokalnych i zmiennych zadeklarowanych w parametrach

Zauważmy, że w części obliczeniowej tej procedury występują stałe i zmienne, które zadeklarowane są w parametrach procedury. Traktowane one są jak stałe i zmienne lokalne. Wykorzystanie tej procedury w programie przebiegnie następująco

... nych. Zmienne dosi h var Vglob, Qglob: real; tępne są dla całego obszaru między v1,v2,v3, q1,q2,q3: real; begin ... end a1,a2,a3, gam1,gam2,gam3: real; ... begin Wczytanie danych: a1, a2, a3, ... gam1, gam2, gam3 Szescian(a1,gam1,v1,q1); Szescian(a2,gam2,v2,q2); Szescian(a3,gam3,v3,q3); Vglob:=v1+v2+v3; Wywołania Wywołania procedury Qglob:=q1+q2+q3; procedury ... Wyświetlenie wyników: end;
Vglob, Qglob, i.t.d.

Deklaracje zmienDeklaracje

W pierwszym wywołaniu procedury Szescian przekazywane są do niej aktualne wartości zmiennych zewnętrznych a1 i gam1. To te wartości przyjmują parametry a i gam zadeklarowane w definicji procedury (patrz definicja procedury Szescian). Jest to tzw. skojarzenie parametrów przez wartość. Po zakończeniu działań procedury, wartości a1 i gam1 nie są zmienione. 45

cwicz_18

H M P R O G R A M O W A N I E

str. 46
W D E L P H I

Inaczej jest z parametrami v1 i q1. To wyniki obliczeń procedury, definicyjnie zapisane pod v i g (patrz definicja procedury), przekazywane są, w momencie zakończenia procedury, do zmiennych v1 i q1. Jest to tzw. skojarzenie parametrów przez zmienną. Oczywiście wartości parametrów v1 i q1 mogą być teraz zupełnie inne niż w momencie wywołania procedury. To możliwości kojarzenia parametrów czynią procedury tak dogodnymi narzędziami. Uważać tylko trzeba na sensowność kojarzenia, w tym na kolejność parametrów, ich liczbę i typ. Musi zachodzić tu pełna zgodność. Poprzez swoje parametry procedura ma komunikację z innymi częściami programu. Na podstawie powyższego przykładu przekonaliśmy się, że w odróżnieniu od funkcji, procedura może oddawać programowi wyniki swoich działań poprzez kilka zmiennych (w przykładzie jest to: objętość v i ciężar q). Porównaj, jaka jest różnica między wywołaniem funkcji (patrz ćwiczenie 16) a wywołaniem procedury. Z A D A N I E . Opracuj program, który oblicza objętość, pole powierzchni i ciężar całej bryły, złożonej z trzech segmentów (sześcianów z przyklejonymi półkulami - patrz rysunek) oraz odpowiada na pytanie - czy ta cała bryła będzie mogła pływać na powierzchni wody. Każdy wyżej położony segment ma wymiary o 1/5 mniejsze od segmentu, na którym leży, ale także każdy wyżej położony segment ma ciężar właściwy o 1/10 większy od ciężaru właściwego segmentu, na którym leży. Są dwie dane wprowadzane przez użytkownika do programu. Jest to bok i ciężar właściwy największego segmentu. Zalecenia. Wyodrębnij procedurę, która oblicza objętość, pole powierzchni i ciężar jednego segmentu, wykorzystując znane zależności: - dla sześcianu

v = a3
- dla całej kuli

S = 6a 2

4 v = πr 3 3

S = 4πr 2

Wykorzystaj zdefiniowną procedurę do obliczeń każdego segmentu. Dla łatwiejszego ogarnięcia całości zadania, niżej na schemacie przedstawiony jest ogólny tok obliczeń. Dotyczy on oczywiście głównej procedury liczącej, a więc tej, która uruchamiana jest np. poprzez kliknięcie na przycisk OBLICZ. 46

Dane: a, gamma

cwicz_18

H M P R O G R A M O W A N I E

str. 47
W D E L P H I

Wczytanie i sprawdzenie danych dla segmentu dolnego: a1, gamma1 Wygenerowanie danych dla pozostałych segmentów: a2, gamma2, a3, gamma3 Procedura: Obliczenie dla segmentu dolnego V1, S1, P1 Procedura: Obliczenie dla segmentu środkowego V2, S2, P2 Procedura: Obliczenie dla segmentu górnego V3, S3, P3 Obliczenie objętości całkowitej VC Obliczenie ciężaru całkowitego PC Obliczenie pola powierzchni całkowitej SC Wyprowadzenie wyników Sprawdzenie, czy bryła pływa i wyprowadzenie odpowiedniego komunikatu

47

cwicz_18

H M P R O G R A M O W A N I E

str. 48
W D E L P H I

Zadania do samodzielnego wykonania
Stosowanie własnych procedur - parametry procedury Zadanie 1. Stosując własną procedurę (która oblicza pole powierzchni koła i
obwod okręgu na podstawie danej średnicy), opracuj program, który obliczy pole i długość konturu powierzchni zaciemnionej. Jest tylko jedna dana do tego programu. d/3 d/4 d

Zadanie 2. Opracuj program, który oblicza objętość i ciężar bryły, powstałej ze
złożenia czterech brył elementarnych o identycznej definicji (jak w zadaniu 2 za ćwiczeniem 17). Zastosuj procedurę do obliczania objętości i ciężaru bryły elementarnej. Bok sześcianu i ciężar właściwy każdej z brył elemetarnych, to dane wprowadzane przez użytkownika.

Zadanie 3. Opracuj program, który oblicza sumę trzech wektorów. Każdy wektor
określony jest we współrzędnych biegunowych (r, alfa). Wektor wynikowy także wyrażony jest poprzez współrzędne biegunowe. Uwaga - w celu dodania wektorów zamień współrzędne biegunowe na kartezjańskie (x,y) stosując odpowiednio opracowaną procedurę.
r α x x 48

y

y

 
statystyka