Programowanie i jezyk C Wyklad 05 Funkcje

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 (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

.

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 c wartość zmiennej z 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 z w programie

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


Wyszukiwarka

Podobne podstrony:
Programowanie i jezyk C Wyklad 01 Typy danych
Programowanie i jezyk C Wyklad 02 Instrukcje
Programowanie i jezyk C Wyklad 04 Tablice i wskazniki
05 Wyklad 5. Rozkład funkcji zmiennej losowej i dwuwymiarowe zmienn e losowe
diagnostyka funkcjonalna i programowanie rehabilitacji wykład 1, fizjoterapia
9 Programowanie z zastosowaniem bloków funkcyjnych Funkcje matematyczne materiały wykładowe
05 Wyklad 5 Rozkład funkcji zmiennej losowej i dwuwymiarowe zmienn e losoweid 5873
Wyklad 05 kinematyka MS
Kwalifikowana pierwsza pomoc (wykład 05 11 2008r )
2010 11 WIL Wyklad 05
CHiF wyklad 05 2013
wyklad 2 c.d.- 05.03.2012, ALMAMER Fizjoterapia, Masaż
Wykład 05 - Psychospołeczne koncepcje rozwoju. Problem mora, Psychologia UJ, Psychologia rozwojowa
wyklad' 05

więcej podobnych podstron