background image

Funkcje - rekurencja

Zajęcia 8

background image

Funkcje

 - definicja

Ogólna postać 

funkcji

 w C++:

typZwracany nazwaFunkcji(listaParametrówWejściowychFunkcji)
{

ciało funkcji

}

Funkcja

 nie zwracająca wartości 

(procedura):

void nazwaFunkcji(listaParametrówWejściowychFunkcji)
{

ciało funkcji

}

Funkcja

 zwracająca wartość

:

typZwracany nazwaFunkcji(listaParametrówWejściowychFunkcji)
{

ciało funkcji

return wyrazenie;  //wyrazenie musi być typu typZwracany

}

background image

Funkcje

 - przykłady

Przykład 1:

void piszLiczbe(int a)
{
     cout << „Wartosc liczby wynosi: „ << a;
}

int main()
{
   int n;
   cout << ’’Podaj liczbe do wczytania: ’’;
   cin  >> n;
   piszLiczbe(n);
   return 0;
}

Przykład 2:

void suma(int a, int b)
{
     return a+b;
}

int main()
{
   int a,b;
   cout << ’’Podaj dwie liczby a i b: ’’;
   cin  >> a;
   cin  >> b; 
   cout << ’’Suma liczb wynosi ’’ << suma(a,b);
   return 0;
}

background image

Funkcje

 - ćwiczenia

Zadanie 1

Napisz program z funkcjami:

int poleProstokata(int bok1, int bok2);

i

int obwodProstokata(int bok1, int bok2);

a następnie dwukrotnie wczytaj po dwie pary liczb całkowitych a i b  (długości 
boków prostokąta) i używając funkcji poleProstokata i obwodProstokata oblicz 
i wyprowadź na ekran odpowiednie wyniki.

Zadanie 2

Popraw funkcje z Zadania 1 tak, aby zwracały wartość -1 o ile długości boków 
przesłane do są liczbami ujemnymi.

Zadanie 3

Przerób funkcje z Zadania 1 na:

void poleProstokata(int bok1, int bok2);

i

void obwodProstokata(int bok1, int bok2);

tak aby realizowały problem zasygnalizowany w Zadaniu 2.

background image

Funkcje

 – wartość i referencja

Parametry do funkcji możemy przekazywać na dwa sposoby przez 

wartość

 i przez 

referencję

:

Przykład 1:

void zwiekszDwaRazy(int n)
{
     n=2*n;
}

int main()
{
   int n = 10;
   zwiekszDwaRazy(n);
   cout << n << endl;
   return 0;
}

Przykład 2:

void zwiekszDwaRazy(int &n)
{
     n=2*n;
}

int main()
{
   int n = 10;
   zwiekszDwaRazy(n);
   cout << n;
   return 0;
}

background image

Funkcje

 – iteracja a rekurencja

Rozwiązanie obliczania silni z liczby n z użyciem rekurencji (czyli funkcji wywołującej 
samą siebie) i bez rekurencji:

Przykład 1 (iteracja)

long long silnia(int n)
{
   long long wynik=1;
   
   for (int i=1; i<=n; i++)
       wynik=wynik*i;
       
   return wynik;        

Przykład 2 (rekurencja)

long long silnia(int n)
{
   if (n==0) return 1;
       
   return n*silnia(n-1);    

background image

Funkcje

 – iteracja a rekurencja

Zadanie 1

Rozwiąż problem obliczania sumy n początkowych wyrazów w ciągu arytmetycznym.

Zadanie 2

Rozwiąż problem obliczania sumy n początkowych wyrazów w ciągu geometrycznym.

Zadanie 3

Rozwiąż problem obliczania wartości wielomianu n-tego stopnia w punkcie – 
wykorzystaj schemat Horner’a.

background image

Praca domowa:

 

Zadanie

Napisz prosty kalkulator w C++  z wykorzystaniem funkcji: suma, różnica, iloczyn 
oraz iloraz.


Document Outline