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.