background image

1

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

DR  INŻ.  

M

AŁGORZATA 

J

ANKOWSKA

2

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

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ądź 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.

background image

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

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 (nazwafunkcji,
• 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

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

4

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
ść;

}

background image

5

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

WYWOŁANIE  FUNKCJI

Wywołanie funkcji – użycie danej funkcji w programie dla danego zbioru 

wymaganych przez funkcję wartości parametrów.

WYWOŁANIE  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 )

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.

UWAGI

6

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

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 );

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.

UWAGI

background image

7

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

PRZYKŁAD  – FUNKCJA  Z  PUSTĄ LISTĄ PARAMETRÓW,  NIE  ZWRACAJĄCA  WARTOŚCI

void Komunikat ();

int main (void)
{

Komunikat ();
return 0;

}

void  Komunikat  ()

{

cout << ”Hello World!” << endl;

}

8

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

void Komunikat ();

int main (void)
{

Komunikat ();
return 0;

}

void  Komunikat  ()

{

cout << ”Hello World!” << endl;

}

PRZYKŁAD  – FUNKCJA  Z  PUSTĄ LISTĄ PARAMETRÓW,  NIE  ZWRACAJĄCA  WARTOŚCI

PROTOTYP 
FUNKCJI

WYWOŁANIE 
FUNKCJI

DEFINICJA 
FUNKCJI

background image

9

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

void Komunikat ();

int main (void)
{

Komunikat ();
return 0;

}

void  Komunikat  ()

{

cout << ”Hello World!” << endl;

}

PROTOTYP 
FUNKCJI

WYWOŁANIE 
FUNKCJI

DEFINICJA 
FUNKCJI

TYP WYNIKU

NAZWA FUNKCJI

LISTA PARAMETRÓW

CIAŁO 
FUNKCJI

PRZYKŁAD  – FUNKCJA  Z  PUSTĄ LISTĄ PARAMETRÓW,  NIE  ZWRACAJĄCA  WARTOŚCI

10

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

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 wskaźnik (język C/C++) lub przez referencję (język C++).

background image

11

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

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.

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.

Parametr jest traktowany tak samo jak inne zmienne zadeklarowane w ciele definicji 
funkcji – istnieje więc jedynie w czasie jej wykonywania.

UWAGA

12

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

przekazanie parametrów
przez wartość

wynik działania funkcji ObliczSume (suma dwóch liczb) 
zostanie zwrócony do programu i przypisany zmiennej wynik

PRZYKŁAD  – PRZEKAZYWANIE  PARAMETRÓW  PRZEZ  WARTOŚĆ

int ObliczSume (int a, int b);

int main (void)
{

int wynik, liczba1 = 10, liczba2 = 20;

wynik = ObliczSume (liczba1, liczba2);
cout << ”Wynik sumowania = ” << wynik;

return 0;

}

int ObliczSume (int a, int b)
{

int w = a + b;
return w;

}

Cel
przekazanie 
do funkcji 
wartości 
zmiennych 
liczba1
oraz liczba2 

background image

13

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

PRZEKAZYWANIE  PARAMETRÓW  PRZEZ  WSKAŹNIK

Przekazywanie parametrów funkcji przez wskaźnik jest pewną odmianą przekazy-
wania przez wartość. Podobnie jak w poprzednim przypadku funkcja otrzymuje 
kopi
ę zmiennej – w tym przypadku kopię wskaźnika

UWAGA

Wskaźnik przekazany do funkcji może identyfikować zmienną, która należy do innej 
funkcji. Przypisanie wartości dla zmiennej, na którą wskazuje parametr wskaźnikowy 
pozwala więc zmienić wartości zmiennych utworzonych w innych funkcjach 
programu
.

Cele, którym służy przekazywanie parametrów przez wskaźnik:
• 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.

14

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

wynik działania funkcji ObliczSumeElementow (suma elementów tablicy) zostanie 
zwrócony do programu i przypisany zmiennej suma

PRZYKŁAD   1 – PRZEKAZYWANIE  PARAMETRÓW  PRZEZ  WSKAŹNIK

double ObliczSumeElementow (int n, double * tab);

int main (void)
{

int n = 10;
double a[10] = {0,1,2,3,4,5,6,7,8,9};

double suma = ObliczSumeElementow (n, a );
cout << ”Wynik sumowania = ” << suma;

return 0;

}

double ObliczSumeElementow (int n, double * tab)
{

double w = 0.0;
for (int i=0; i<=n-1; i++)

w = w + tab[i];

return w;

}

Cel
przekazanie 
do funkcji 
tablicy o dużych 
rozmiarach ...

przekazanie parametrów
przez wskaźnik (nazwa 
tablicy jest wskaźnikiem 
do pierwszego elementu 
tablicy)

background image

15

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

PRZYKŁAD   2 – PRZEKAZYWANIE  PARAMETRÓW  PRZEZ  WSKAŹNIK

void ObliczSume (double a, double b, double * c);

int main (void)
{

double x = 3.5, y = 5.0, z;

ObliczSumeLiczb( x,y,&z );
cout << ”Wynik sumowania = ” << z;

return 0;

}

void ObliczSume (double a, double b, double * c)
{

*c = a + b;

}

Cel
modyfikacja 
wartości 
zmiennej 
utworzonej 
w programie ...

- przekazanie parametrów

przez wartość (w przypadku 
zmiennych x,y),

- przekazanie parametrów przez 

wskaźnik (w przypadku 
zmiennej z) – operacja &z
pobiera adres zmiennej z;

funkcja ObliczSume modyfikuje przy pomocy parametru 
wskaźnikowego wartość zmiennej w programie

16

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

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.

background image

17

M

.  

J

ANKOWSKA  –

W

YKŁAD

5 F

UNKCJE JĘZYKA 

C

++

PRZYKŁAD  – PRZEKAZYWANIE  PARAMETRÓW  PRZEZ  REFERENCJĘ

void ObliczSume (double a, double b, double & c);

int main (void)
{

double x = 3.5, y = 5.0, z;

ObliczSume( x,y,z );
cout << ”Wynik sumowania = ” << z;

return 0;

}

void ObliczSume (double a, double b, double & c  )
{

c = a + b;

}

Cel
modyfikacja 
wartości 
zmiennej 
utworzonej 
w programie ...

- przekazanie parametrów

przez wartość (w przypadku 
zmiennych x,y),

- przekazanie parametru przez 

referencję wskaźnik (w przypad-
ku zmiennej z)

funkcja ObliczSume oblicza sumę dwóch liczb 
i podstawia ją zmiennej referencyjnej c
czyli tym samym zmiennej w programie

jest zmienną referencyjną;
działając na zmiennej działamy 
bezpośrednio na zmiennej z
w programie