1213z wdprog ww10

background image

Podprogramy - ogólnie

Funkcje

Wstęp do programowania

wykład 10

Agata Półrola

Wydział Matematyki i Informatyki UŁ

sem. zimowy 2012/2013

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Podprogramy

Podprogramy w Adzie

Podprogramy

to sparametryzowane, wydzielone fragmenty

programów

podprogramy w Adzie to

funkcje

i

procedury

funkcje wywoływane są jako elementy wyrażeń i zwracają
wartość stanowiącą element wyrażenia
przykład:

x:=

sqrt(10.0)

+ 2.12;

procedury wywoływane są jako samodzielne instrukcje
przykład:

put(12.4);

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Po co podprogramy

bardziej czytelny kod

jednokrotne pisanie powtarzających się fragmentów programu

podprogram umieszczony w pakiecie może być użyty w wielu
programach

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Funkcje

Struktura funkcji

Ciało funkcji

ma postać:

function nazwa_funkcji (lista_parametrów) return typ_wyniku is

-- część deklaracyjna

begin

-- część wykonywalna z obowiązkowym return

end nazwa_funcji;

Przykład

f u n c t i o n s u m a T r z e c h ( x , y , z :

i n t e g e r )

r e t u r n

i n t e g e r

i s

w :

i n t e g e r ;

b e g i n

w:= x+y+z ;

r e t u r n w ;

end s u m a T r z e c h ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Uwagi

ciała funkcji umieszczamy w części deklaracyjnej programu (lub w

osobnym pakiecie)

funkcje wywoływane są jako elementy wyrażeń
przykład:

a:=sumaTrzech(1,2,3);

parametry funkcji wymienione w nawiasie na początku jej
ciała nazywamy

parametrami (argumentami) formalnymi

wartości dla parametrów formalnych podane w wywołaniu
funkcji nazywamy

parametrami aktualnymi (argumentami

wywołania)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (Funkcja)

w i t h ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

u s e ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

p r o c e d u r e w 1 0 f u n 1

i s

f u n c t i o n s u m a T r z e c h ( x , y , z : i n t e g e r )

r e t u r n

i n t e g e r

i s

w :

i n t e g e r ;

b e g i n

w:= x+y+z ;

r e t u r n w ; −− a l t e r n a t y w n i e :

r e t u r n x+y+z ;

end s u m a T r z e c h ;

a : i n t e g e r ;

b e g i n

a := s u m a T r z e c h ( 1 , 2 , 3 ) ;

p u t ( a ) ;
p u t ( s u m a T r z e c h ( a , 4 , 5 ) ) ;

end w 1 0 f u n 1 ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Jak to działa

parametry formalne przyjmują wartości parametrów aktualnych

funkcja wykonuje obliczenia wykorzystując te wartości i zwraca wynik

zwrócony wynik jest wykorzystany w programie głównym w miejscu wywołania
funkcji (tu - przypisany zmiennej x zadeklarowanej w programie).

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Jak to działa

parametry formalne przyjmują wartości parametrów aktualnych

funkcja wykonuje obliczenia wykorzystując te wartości i zwraca wynik

zwrócony wynik jest wykorzystany w programie głównym w miejscu wywołania
funkcji (tu - przypisany zmiennej x zadeklarowanej w programie).

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Jak to działa

parametry formalne przyjmują wartości parametrów aktualnych

funkcja wykonuje obliczenia wykorzystując te wartości i zwraca wynik

zwrócony wynik jest wykorzystany w programie głównym w miejscu wywołania
funkcji (tu - przypisany zmiennej x zadeklarowanej w programie).

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Uwagi - cd

instrukcja return

Funkcja może zawierać kilka instrukcji return

każdy możliwy przebieg funkcji musi kończyć się instrukcją
return (inaczej zostanie zgłoszony program error)
wykonanie instrukcji return powoduje zwrócenie wyniku i
zakończenie wykonywania funkcji (ewentualne instrukcje
znajdujące się w dalszej części ciała funkcji nie zostaną
wykonane)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (Funkcja z kilkoma return)

w i t h ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

u s e ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

p r o c e d u r e w 1 0 f u n 2

i s

s u b t y p e t y p w y n i k o w y

i s

i n t e g e r

r a n g e

− 1 . . 1 ;

f u n c t i o n

z n a k ( a :

i n t e g e r )

r e t u r n

t y p w y n i k o w y

i s

b e g i n

i f

a>0 t h e n

r e t u r n

1 ;

e l s i f

a=0 t h e n

r e t u r n

0 ;

−− p u t ( ” z e r o ” ) ;

−− n i e o s i a g a l n y kod

e l s e

r e t u r n

−1;

end

i f ;

end z n a k ;

w : i n t e g e r ;

b e g i n

p u t ( ” P o d a j

l i c z b e : ” ) ;

g e t (w ) ;

p u t ( ” z w r o c o n y z n a k ” ) ;

p u t ( z n a k (w ) ) ;

end w 1 0 f u n 2 ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Uwagi - cd

zmienne

funkcja może mieć swoje własne zmienne (

zmienne lokalne

),

deklarowane w jej części deklaracyjnej

zmienna lokalna jest widziana tylko wewnątrz funkcji
z tego powodu zmienne lokalne różnych funkcji mogą mieć
takie same nazwy
zmienne lokalne fukcji to nie to samo co jej parametry i
nie można dowolnie zastępować jednego drugim!!!

funkcja nie powinna korzystać ze zmiennych globalnych

wszystkie dane dla funkcji powinny być przekazane przez parametry, efektem

działania powinno być tylko zwrócenie wartości do programu (a nie np.

modyfikacja zmiennych globalnych). Oznacza to również, że treść funkcji nie

powinna zawierać pobierania żadnych danych z klawiatury ani wypisywania

wyników na ekran!

jeśli zmienna lokalna funkcji ma taką nazwę jak zmienna
globalna, to zmienna lokalna przesłania globalną

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Uwagi - cd

parametry, zwracana wartość

funkcja może mieć wiele parametrów, które mogą być różnych
typów

elementy listy parametrów jednego typu oddzielamy przecinkami, deklaracje

parametrów różnych typów - średnikami

przykład:

function JakasFkcja (a,b,c:integer; x,y:float) return float is ...

funkcja nie może modyfikować wartości swoich parametrów -
są one traktowane jako parametry w trybie “in”
(“wejściowym”), czyli jak stałe

niedozwolone jest np. przypisanie parametrowi jakiejś wartości

funkcja może zwracać tylko jedną wartość

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (Funkcja z wieloma parametrami)

w i t h ada . t e x t i o ,

ada . i n t e g e r t e x t i o ,

ada . f l o a t t e x t i o ;

u s e ada . t e x t i o ,

ada . i n t e g e r t e x t i o ,

ada . f l o a t t e x t i o ;

p r o c e d u r e

w 1 0 f u w i e l o p a r

i s

f u n c t i o n

K a w a l e k P o l a P r o s t o k a t a

( b1 , b2 : i n t e g e r ; kaw : f l o a t )

r e t u r n

f l o a t

i s

b e g i n

r e t u r n

f l o a t ( b1 ∗ b2 ) ∗ kaw ;

end K a w a l e k P o l a P r o s t o k a t a ;

a , b :

i n t e g e r ;

p ,

p a r t : f l o a t ;

b e g i n

p u t ( ” P o d a j b o k i

p r o s t o k a t a ” ) ;

g e t ( a ) ;

g e t ( b ) ;

p u t ( ” J a k i u l a m e k p o l a

w e z m i e s z ? ” ) ;

g e t ( p a r t ) ;

p := K a w a l e k P o l a P r o s t o k a t a ( a , b , p a r t ) ;

p u t ( ” P o l e w/w f r a g m e n t u w y n o s i ” ) ;

p u t ( p , e x p =>0);

end w 1 0 f u w i e l o p a r ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Uwagi - cd

typy anonimowe i (nie)zawężone

parametry funkcji mogą być różnych typów, ale

nie może to

być typ anonimowy

wartość zwracana przez funkcję

nie może być typu

anonimowego

parametr funkcji

może być typu niezawężonego

. W takim

przypadku ograniczenia (wartości atrybutów ’range, ’length
itd) odpowiadają ograniczeniom dla parametru aktualnego.
Użycie zawężenia w liście parametrów jest niedozwolone

zamiast zawężenia można w liście parametrów uzyć nazwy podtypu typu

niezawężonego

wartość zwracana przez funkcję

może być typu

niezawężonego

. Funkcja w praktyce zwraca jednak zawsze

wartość “zawężoną”.

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (Funkcja z parametrem typu niezawężonego)

Funkcja obliczająca średnią elementów tablicy typu Tab (gdzie Tab
jest zdefiniowane jako
type Tab is array (integer range <>) of integer;

f u n c t i o n

S r e d n i a ( t : Tab )

r e t u r n

f l o a t

i s

suma :

i n t e g e r : = 0 ;

b e g i n

f o r

i

i n t ’ r a n g e l o o p

suma := suma+t ( i ) ;

end l o o p ;

r e t u r n

f l o a t ( suma ) / f l o a t ( t ’ l e n g t h ) ;

end S r e d n i a ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (cd - wykorzystanie funkcji z poprzedniego slajdu)

w i t h ada . t e x t i o ,

ada . i n t e g e r t e x t i o ,

ada . f l o a t t e x t i o ;

u s e ada . t e x t i o ,

ada . i n t e g e r t e x t i o ,

ada . f l o a t t e x t i o ;

p r o c e d u r e w 1 0 f u n t y p a r a m

i s

t y p e Tab i s

a r r a y

( i n t e g e r

r a n g e <>) o f

i n t e g e r ;

f u n c t i o n

S r e d n i a ( t : Tab )

r e t u r n

f l o a t

i s

suma :

i n t e g e r : = 0 ;

b e g i n

f o r

i

i n t ’ r a n g e l o o p

suma := suma+t ( i ) ;

end l o o p ;

r e t u r n

f l o a t ( suma ) / f l o a t ( t ’ l e n g t h ) ;

end S r e d n i a ;

n :

n a t u r a l ;

p :

f l o a t ;

b e g i n

p u t ( ” p o d a j

d l u g o s c

t a b l i c y ” ) ;

g e t ( n ) ;

d e c l a r e

x :

t a b ( 1 . . n ) ;

b e g i n

p u t l i n e ( ” p o d a j

e l e m e n t y

t a b l i c y

: ” ) ;

f o r

i

i n x ’ r a n g e l o o p

g e t ( x ( i ) ) ;

end l o o p ;

p := S r e d n i a ( x ) ;

p u t ( ” S r e d n i a

e l e m e n t o w w y n o s i w y n o s i ” ) ;

p u t ( p , e x p =>0);

end ;

end w 1 0 f u n t y p a r a m ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (Funkcja z parametrem i wynikiem typu niezawężonego)

Funkcja zwracająca tablicę wartości przeciwnych do wartości
elementów tablicy wejściowej typu Tab (gdzie Tab jest
zdefiniowane jak poprzednio)

f u n c t i o n

T a b l i c a P r z e c i w n y c h ( t : Tab )

r e t u r n Tab i s

t a b w y n i k o w a : Tab:= t ;

b e g i n

f o r

i

i n t ’ r a n g e l o o p

t a b w y n i k o w a ( i ) : = −t a b w y n i k o w a ( i ) ;

end l o o p ;

r e t u r n

t a b w y n i k o w a ;

end T a b l i c a P r z e c i w n y c h ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (cd - wykorzystanie funkcji z poprzedniego slajdu)

w i t h ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

u s e ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

p r o c e d u r e

w 1 0 f u n i e z

i s

t y p e Tab i s

a r r a y

( i n t e g e r

r a n g e <>) o f

i n t e g e r ;

f u n c t i o n

T a b l i c a P r z e c i w n y c h ( t : Tab )

r e t u r n Tab i s

t a b w y n i k o w a : Tab:= t ;

b e g i n

f o r

i

i n t ’ r a n g e l o o p

t a b w y n i k o w a ( i ) : = −t a b w y n i k o w a ( i ) ;

end l o o p ;

r e t u r n

t a b w y n i k o w a ;

end T a b l i c a P r z e c i w n y c h ;

x , y : Tab ( 1 . . 1 0 ) ;

b e g i n

p u t l i n e ( ” p o d a j

e l e m e n t y

t a b l i c y

: ” ) ;

f o r

i

i n x ’ r a n g e l o o p

g e t ( x ( i ) ) ;

end l o o p ;

p u t l i n e ( ” T a b l i c a : ” ) ;
f o r

i

i n x ’ r a n g e l o o p

p u t ( x ( i ) , 2 ) ; end l o o p ;

n e w l i n e ;

y := T a b l i c a P r z e c i w n y c h ( x ) ;

p u t l i n e ( ” T a b l i c a z p r z e c i w n y m i

w a r t o s c i a m i : ” ) ;

f o r

i

i n y ’ r a n g e l o o p

p u t ( y ( i ) , 2 ) ; end l o o p ;

end w 1 0 f u n i e z ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (Funkcja z parametrem i wynikiem typu niezawężonego)

Funkcja zwraca tablicę typu Tab zawierającą wszystkie elementy
ujemne z tablicy wejściowej typu Tab (typ zdefiniowany jak
poprzednio)

f u n c t i o n

T a b l i c a U j e m n y c h ( t : Tab )

r e t u r n Tab i s

i l e d o d : i n t e g e r : = 0 ;

b e g i n

f o r

i

i n t ’ r a n g e l o o p

i f

t ( i )<0 t h e n

i l e d o d := i l e d o d +1; end

i f ; end l o o p ;

d e c l a r e

t a b w y n i k o w a : Tab ( 1 . . i l e d o d ) ;

k : i n t e g e r ;

b e g i n

k : = 1 ;

f o r

i

i n t ’ r a n g e l o o p

i f

t ( i )<0 t h e n
t a b w y n i k o w a ( k ) : = t ( i ) ; k := k +1;

end

i f ;

end l o o p ;

r e t u r n

t a b w y n i k o w a ;

end ;

end T a b l i c a U j e m n y c h ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Podprogramy - ogólnie

Funkcje

Przykład (cd - wykorzystanie funkcji z poprzedniego slajdu)

w i t h ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

u s e ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

p r o c e d u r e

w 1 0 f u n i e z r o z

i s

t y p e Tab i s

a r r a y

( i n t e g e r

r a n g e <>) o f

i n t e g e r ;

f u n c t i o n

T a b l i c a U j e m n y c h ( t : Tab )

r e t u r n Tab i s

i l e d o d : i n t e g e r : = 0 ;

b e g i n

f o r

i

i n t ’ r a n g e l o o p

i f

t ( i )<0 t h e n

i l e d o d := i l e d o d +1; end

i f ; end l o o p ;

d e c l a r e

t a b w y n i k o w a : Tab ( 1 . . i l e d o d ) ; k : i n t e g e r : = 1 ;

b e g i n

f o r

i

i n t ’ r a n g e l o o p

i f

t ( i )<0 t h e n t a b w y n i k o w a ( k ) : = t ( i ) ; k := k +1; end

i f ;

end l o o p ;

r e t u r n

t a b w y n i k o w a ; end ;

end T a b l i c a U j e m n y c h ;
x : Tab ( 1 . . 1 0 ) ;

b e g i n

p u t l i n e ( ” p o d a j

e l e m e n t y

t a b l i c y

: ” ) ;

f o r

i

i n x ’ r a n g e l o o p

g e t ( x ( i ) ) ;

end l o o p ;

p u t l i n e ( ” T a b l i c a : ” ) ;
f o r

i

i n x ’ r a n g e l o o p

p u t ( x ( i ) , 2 ) ; end l o o p ;

n e w l i n e ;

d e c l a r e

y : Tab:= T a b l i c a U j e m n y c h ( x ) ;

b e g i n

p u t l i n e ( ” T a b l i c a

w a r t o s c i

u j e m n y c h : ” ) ;

f o r

i

i n y ’ r a n g e l o o p

p u t ( y ( i ) , 2 ) ; end l o o p ;

end ;

end w 1 0 f u n i e z r o z ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania


Document Outline


Wyszukiwarka

Podobne podstrony:
1213z wdprog ww04
1213z wdprog ww02
1213z wdprog ww07
1213z wdprog ww11
1213z wdprog ww09
1213z wdprog ww08
1213z wdprog ww12
1213z wdprog ww13
1213z wdprog ww06
1213z wdprog ww14
1213z wdprog ww05
1213z wdprog ww03
1213z wdprog ww01
1213z wdprog ww02

więcej podobnych podstron