Funkcje - rekurencja
Zajęcia 8
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
}
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;
}
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.
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;
}
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);
}
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.
Praca domowa:
Zadanie
Napisz prosty kalkulator w C++ z wykorzystaniem funkcji: suma, różnica, iloczyn
oraz iloraz.