Programowanie i jezyk C Wyklad 05 Funkcje


DR INŻ. MAAGORZATA JANKOWSKA
WYKAAD 5 FUNKCJE JZYKA C++
1
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
WPROWADZENIE
W procesie tworzenia algorytmu niejednokrotnie spotykamy się z koniecznością
wielokrotnego wykonywania tego samego zadania, lecz dla różnych danych
i w różnych sytuacjach.
Zadanie, o którym wiemy, że będzie wykonywane kilka razy możemy zrealizować
osobno w odpowiednim podprogramie. Rozwiązanie takie zapewniają w języku
C/C++ funkcje.
Funkcje pozwalają programistom na budowę programu w sposób modułowy.
Dzięki takiemu podejściu możliwe jest wyodrębnienie pewnych operacji wykonywa-
nych na podstawie danych parametrów wejściowych.
Zalety używania funkcji w programie:
" możliwość wielokrotnego używania funkcji w tym samym bądz w różnych
programach, a przez to oszczędność czasu (funkcję piszemy tylko raz),
" unikanie powtarzania kodu,
" przejrzystość i zwiększenie czytelności programu,
" oszczędność pamięci.
WSKAZÓWKA PRAKTYCZNA
Dobrym zwyczajem jest ograniczenia działania funkcji do przeprowadzenia
pojedynczego zadania. Nazwa funkcji powinna wyrażać to zadanie. 2
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
DEFINICJA FUNKCJI
Definicja funkcji stanowi o tym jakie zadanie funkcja wykonuje.
Jest zapisem pewnego algorytmu lub jego części. Powoduje również przydzielenie
obszaru pamięci, w którym znajdować się będzie kod wynikowy funkcji.
Najważniejsze elementy definicji funkcji:
" typ wartości funkcji  może nim być dowolny typ za wyjątkiem tablic i funkcji;
- jeżeli typ wartości funkcji nie jest określony w sposób
jawny, wówczas przyjmowany jest typ int;
- jeżeli funkcja nie przekazuje wartości wówczas używamy
słowa kluczowego void,
" identyfikator (nazwa) funkcji,
" lista deklaracji parametrów funkcji  może być ona pusta co oznacza, że funkcja
jest bezparametrowa (brak parametrów funkcji możemy oznaczyć używając
słowa kluczowego void),
" ciało funkcji, które umieszczamy w nawiasach klamrowych.
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
DEFINICJA FUNKCJI
Definicja funkcji o nazwie określonej przez identyfikator-funkcji, typie wartości
funkcji danej przez typ-wartości oraz liście parametrów funkcji danej przez listę-
parametrów,
a) w przypadku, gdy funkcja nie zwraca wartości:
void identyfikator-funkcji ( lista-parametrów )
{
deklaracje i instrukcje
}
b) w przypadku, gdy funkcja zwraca wartości:
typ-wartości identyfikator-funkcji ( lista-parametrów )
{
deklaracje i instrukcje
return zwracana-wartość;
}
4
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
WYWOAANIE FUNKCJI
Wywołanie funkcji  użycie danej funkcji w programie dla danego zbioru
wymaganych przez funkcję wartości parametrów.
WYWOAANIE FUNKCJI
Wywołanie funkcji o nazwie określonej przez identyfikator-funkcji dla danej listy-
parametrów-wywołania:
identyfikator-funkcji ( lista-parametrów-wywołania )
UWAGI
Lista-parametrów-wywołania składa się z oddzielonych od siebie przecinkami
wyrażeń zgodnych z typem parametrów danej funkcji.
Typy parametrów wywołania powinny być identyczne z typami określonymi w
definicji lub prototypie funkcji. W przeciwnym razie przeprowadzane są, w miarę
możliwości, konwersje do typów określonych w prototypie.
5
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
DEKLARACJA FUNKCJI  PROTOTYP FUNKCJI
Deklaracja funkcji  pojęcie logiczne stanowiące jedynie informację dla kompilatora,
że funkcja o danej nazwie, typie wartości oraz liczbie, typach
parametrów oraz określonym porządku występowania może
zostać użyta w programie.
Deklaracja funkcji w obowiązującym standardzie ANSI oraz w języku C++ nazywana
jest prototypem funkcji.
DEKLARACJA FUNKCJI
Deklaracja funkcji ma najczęściej następującą postać:
typ-wartości identyfikator-funkcji ( lista-parametrów );
UWAGI
Typem wartości funkcji może być może być dowolny typ za wyjątkiem tablic
i funkcji. Jeżeli typ wartości funkcji nie jest określony w sposób jawny, wówczas
przyjmowany jest typ int.
Lista deklaracji parametrów składa się z nazw typów kolejnych parametrów.
Identyfikatory (nazwy) parametrów mogą (lecz nie muszą!) być podane i pełnią
zasadniczo rolę dokumentującą.
Deklaracja funkcji zakończona jest średnikiem.
6
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
PRZYKAAD  FUNKCJA Z PUST LIST PARAMETRÓW, NIE ZWRACAJCA WARTOŚCI
void Komunikat ();
int main (void)
{
Komunikat ();
return 0;
}
void Komunikat ()
{
cout <<  Hello World! << endl;
}
7
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
PRZYKAAD  FUNKCJA Z PUST LIST PARAMETRÓW, NIE ZWRACAJCA WARTOŚCI
PROTOTYP
void Komunikat ();
FUNKCJI
int main (void)
{
WYWOAANIE
Komunikat ();
FUNKCJI
return 0;
}
DEFINICJA
void Komunikat ()
FUNKCJI
{
cout <<  Hello World! << endl;
}
8
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
PRZYKAAD  FUNKCJA Z PUST LIST PARAMETRÓW, NIE ZWRACAJCA WARTOŚCI
PROTOTYP
void Komunikat ();
FUNKCJI
int main (void)
{
WYWOAANIE
Komunikat ();
FUNKCJI
return 0;
}
TYP WYNIKU
NAZWA FUNKCJI
LISTA PARAMETRÓW
DEFINICJA
void Komunikat ()
FUNKCJI
{
cout <<  Hello World! << endl;
CIAAO
}
FUNKCJI
9
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
PRZEKAZYWANIE PARAMETRÓW I ZWRACANIE WARTOŚCI
W ogólności możemy powiedzieć, że działanie danej funkcji polega na tym, że
na podstawie danych wejściowych, którymi mogą być wartości:
" parametrów wejściowe przekazywanych do funkcji,
" dane z urządzenia wejściowego,
" zmienne globalne,
funkcja wykonuje szereg operacji, których rezultatem są wartości:
" zwracane przez funkcję,
" przekazane do programu przez listę parametrów,
" zmodyfikowanych zmiennych globalnych,
" wysłane na urządzenie wyjściowe.
Przekazywanie wartości do funkcji odbywa się w naturalny sposób poprzez listę
parametrów funkcji (przekazywanie parametru do funkcji przez wartość  język
C/C++).
Więcej uwagi wymaga sposób zwracania wyników do programu. Jeżeli bowiem
rezultatem wykonania funkcji jest tylko jedna wielkość, wówczas wystarczy, aby stała
się ona wartością funkcji. W przeciwnym razie parametry przekazujemy do funkcji
przez wskaznik (język C/C++) lub przez referencję (język C++).
10
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
PRZEKAZYWANIE PARAMETRÓW PRZEZ WARTOŚĆ
W wyniku przekazania parametru funkcji przez wartość funkcja otrzymuje kopię
zmiennej umieszczoną na stosie procesora lub w jego rejestrze.
UWAGA
Parametr jest traktowany tak samo jak inne zmienne zadeklarowane w ciele definicji
funkcji  istnieje więc jedynie w czasie jej wykonywania.
Główny cel, któremu służy przekazywanie parametrów przez wartość:
" przekazywanie do funkcji wartości danych wejściowych potrzebnych do
wykonania przewidzianego w algorytmie zadania.
11
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
Cel
PRZYKAAD  PRZEKAZYWANIE PARAMETRÓW PRZEZ WARTOŚĆ
przekazanie
int ObliczSume (int a, int b);
do funkcji
wartości
int main (void) zmiennych
liczba1
{
oraz liczba2 &
int wynik, liczba1 = 10, liczba2 = 20;
przekazanie parametrów
wynik = ObliczSume (liczba1, liczba2);
przez wartość
cout <<  Wynik sumowania =  << wynik;
return 0;
}
wynik działania funkcji ObliczSume (suma dwóch liczb)
zostanie zwrócony do programu i przypisany zmiennej wynik
int ObliczSume (int a, int b)
{
int w = a + b;
return w;
}
12
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
PRZEKAZYWANIE PARAMETRÓW PRZEZ WSKAyNIK
Przekazywanie parametrów funkcji przez wskaznik jest pewną odmianą przekazy-
wania przez wartość. Podobnie jak w poprzednim przypadku funkcja otrzymuje
kopię zmiennej  w tym przypadku kopię wskaznika.
UWAGA
Wskaznik przekazany do funkcji może identyfikować zmienną, która należy do innej
funkcji. Przypisanie wartości dla zmiennej, na którą wskazuje parametr wskaznikowy
pozwala więc zmienić wartości zmiennych utworzonych w innych funkcjach
programu.
Cele, którym służy przekazywanie parametrów przez wskaznik:
" przekazywanie struktur danych o dużych rozmiarach (np. tablice, łańcuchy),
" umożliwienie modyfikacji wartości zmiennych utworzonych w innych funkcjach
programu, czyli tym samym zwrócenie przez funkcję więcej niż jednej wartości.
13
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
Cel
PRZYKAAD 1  PRZEKAZYWANIE PARAMETRÓW PRZEZ WSKAyNIK
przekazanie
double ObliczSumeElementow (int n, double * tab);
do funkcji
tablicy o dużych
int main (void) rozmiarach ...
{
int n = 10;
double a[10] = {0,1,2,3,4,5,6,7,8,9};
przekazanie parametrów
przez wskaznik (nazwa
double suma = ObliczSumeElementow (n, a ); tablicy jest wskaznikiem
do pierwszego elementu
cout <<  Wynik sumowania =  << suma;
tablicy)
return 0;
}
wynik działania funkcji ObliczSumeElementow (suma elementów tablicy) zostanie
zwrócony do programu i przypisany zmiennej suma
double ObliczSumeElementow (int n, double * tab)
{
double w = 0.0;
for (int i=0; i<=n-1; i++)
w = w + tab[i];
return w;
14
}
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
Cel
PRZYKAAD 2  PRZEKAZYWANIE PARAMETRÓW PRZEZ WSKAyNIK
modyfikacja
void ObliczSume (double a, double b, double * c);
wartości
zmiennej
int main (void) utworzonej
w programie ...
{
double x = 3.5, y = 5.0, z;
- przekazanie parametrów
przez wartość (w przypadku
ObliczSumeLiczb( x,y,&z );
zmiennych x,y),
cout <<  Wynik sumowania =  << z;
- przekazanie parametrów przez
wskaznik (w przypadku
return 0;
zmiennej z)  operacja &z
}
pobiera adres zmiennej z;
void ObliczSume (double a, double b, double * c)
{
*c = a + b;
}
funkcja ObliczSume modyfikuje przy pomocy parametru
wskaznikowego c wartość zmiennej z w programie
15
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
PRZEKAZYWANIE PARAMETRÓW PRZEZ REFERENCJ
Przekazując parametry funkcji przez referencję umożliwiamy przeprowadzanie
operacji bezpośrednio na zmiennej, której referencja została przekazana do
funkcji.
UWAGA
W przypadku niezgodności typu referencyjnego i zmiennej, do której została
utworzona referencja operacje są przeprowadzane jedynie na zmiennej (obiekcie)
tymczasowej, a nie bezpośrednio na tej zmiennej.
Cele, którym służy przekazywanie parametrów przez referencję:
" przekazywanie parametrów do funkcji,
" przekazywanie parametrów z funkcji do programu / innej funkcji, a tym samym
zwrócenie przez funkcję więcej niż jednej wartości.
16
M. JANKOWSKA  WYKAAD 5 FUNKCJE JZYKA C++
Cel
PRZYKAAD  PRZEKAZYWANIE PARAMETRÓW PRZEZ REFERENCJ
modyfikacja
void ObliczSume (double a, double b, double & c);
wartości
zmiennej
int main (void) utworzonej
w programie ...
{
double x = 3.5, y = 5.0, z;
- przekazanie parametrów
przez wartość (w przypadku
ObliczSume( x,y,z );
zmiennych x,y),
cout <<  Wynik sumowania =  << z;
- przekazanie parametru przez
referencję wskaznik (w przypad-
return 0;
ku zmiennej z)
}
void ObliczSume (double a, double b, double & c )
{
c = a + b;
}
c jest zmienną referencyjną;
działając na zmiennej c działamy
funkcja ObliczSume oblicza sumę dwóch liczb bezpośrednio na zmiennej z
i podstawia ją zmiennej referencyjnej c, w programie
czyli tym samym zmiennej z w programie
17


Wyszukiwarka

Podobne podstrony:
Programowanie i jezyk C Wyklad 02 Instrukcje
Programowanie i jezyk C Wyklad 01 Typy danych
9 Programowanie z zastosowaniem bloków funkcyjnych Funkcje matematyczne materiały wykładowe
Wykład 05 Opadanie i fluidyzacja
Wyklad 05
Techniki negocjacji i mediacji w administracji wykłady 05 11 2013
wykład 05
Analiza Finansowa Wykład 05 02 12 09
wyklad 05 03 2011
Wykład 05 Pręt i Układ Prętów
Wykład 05 Narzędzia i maszyny do umieszczania sadzonek w glebie
wyklad 05
Konstrukcje metalowe Sem[1][1] VI Wyklad 05

więcej podobnych podstron