08. Funkcje - rekurencja

advertisement
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.
Download