funkcje
Transkrypt
funkcje
Funkcje_1 Jeżeli w programie chcemy obliczyć kilka razy to samo, to zamiast pisać te same linijki kilka razy w głównej funkcji main() to można napisać podprogram w którym będą umieszczone te linijki (ten kod) a wewnątrz main() wystarczyłoby wywołać ten podprogram tyle razy ile nam jest potrzebny. Ten podprogram nazywa się funkcją. Sposoby implementacji funkcji w programie Sposób 1: Sposób 2 (ten sposób będziemy używać): #include<iostream.h> #include<conio.h> i tam inne potrzebne includy... #include<iostream.h> #include<conio.h> i tam inne potrzebne includy... deklaracja funkcji definicja funkcji int main() { instrukcje; wywołanie funkcji instrukcje; return 0; } int main() { instrukcje; wywołanie funkcji instrukcje; return 0; } definicja funkcji Deklaracja funkcji typ_wyniku nazwa_funkcji (typ_par1 nazwa_par1 , typ_par2 nazwa_par2 ,…) ; Przykład: Niech nasz funkcja ma obliczyć pole prostokąta, pole prostokąta się liczy tym wzorem: pole = a*b , gdzie a i b są długościami tego prostokąta. Aby funkcja obliczyła to pole, to musi ona znać wartość a i wartość b, dlatego musimy wysłać do niej dwie wartości (a i b), w ogólnym przypadku będą one typu float. (float a , float b) jeszcze trzeba jakoś nazwać funkcję, nazwijmy ją na przykład pole, pole Nazwa może być dowolna byle nie jakaś nazwa która jest wbudowania w języku c++! Teraz tak jak już mówiliśmy funkcja ma nam obliczyć pole prostokąta czyli będzie nam zwracała jakiś wynik a mianowicie wartość pola prostokąta którego a i b są bokami, skoro boki typu float to i wynik tez będzie typu float. float Reasumując deklaracja naszej funkcji będzie wyglądać tak: float pole (float a , float b) ; W deklaracji mamy jeszcze średnik! Definicja funkcji Pierwsze linijka jest identyczna do deklaracji tyle, że w definicji nie ma średnika!. W definicji znajdują się wszystkie instrukcji które ma realizować nasz funkcja. W naszym przypadku ma ona obliczyć pole prostokąta o bokach a i b. float pole (float a, float b) { float wynik; // 1 wynik = a*b; // 2 return wynik; // 3 } 1- deklarujemy zmienna o nazwie wynik w której będziemy zachowywać wartość pola prostokąta, a ponieważ funkcja będzie nam zwracała tą wartość więc ona musi być typu float tak jak „Typ_wyniku” . 2- obliczamy wartość wyniku 3- funkcja będzie na zwracała właśnie ten wynik, uwaga! Przed nazwą funkcji mamy float czyli funkcja będzie zwracała wartość typu float dlatego MUSIMY zdeklarować zmienna o nazwie wynik która ta funkcja zwraca tez typu float! można było to napisać inaczej: float pole (float a, float b) { return a*b; // funkcja oblicza i jednocześnie zwraca } Wywołanie funkcji W main() wywołujemy naszą funkcję pisząc jej nazwę, oraz wysyłając do niej odpowiednie zmienne. Wszystko co do teraz robimy to dotyczy funkcji które zwracają jakąś wartość (wynik). Wynik zwracany przez tą funkcję można zapisać do jakiejś zmiennej lub od razu wyświetlić. Od razu wyświetlanie: int main ( ) { float bok1 , bok2; cout << “Podaj wartosc pierwszego boku:”; cin >> bok1; cout << “Podaj wartosc drugiego boku:”; cin >> bok2; cout << “pole prostokata = “ << pole ( bok1, bok2); getch(); return 0; } // 1 // 1 : w main() naszymi zmiennymi są bok1 i bok2 i właśnie te dwie zmienne wysyłamy do naszej funkcji. Nasza funkcja odbiera bok1 jako a, natomiast bok2 jako b, oblicza wynik dla tych dwóch wartość i go zwraca, i ten wynik który ta funkcja zwraca można od razu wyświetlić << nazwa_funkcji (parametry) Można ten wynik który zwraca ta funkcja zapisac w dodatkowej zmiennej, wtedy zamiast: cout << “pole prostokata = “ << pole ( bok1, bok2); piszemy: float pole_prostokata; pole_prostokata = pole(bok1,bok2); cout << << “pole prostokata = “ << pole_prosokata; Uwaga! 1- To co nam zwraca (oddaje) funkcja zdeklarowaliśmy jako float , wiec jeżeli chcemy zapisać wynik zwracany przez tą funkcję do jakiejś zmiennej to ta zmienna musi być tego samego typu, w tym przypadku float pole_prostokata. Jeżeli sobie zdeklarujemy że wartość zwracana przez naszą funkcję będzie typu int to zmienna do której będziemy zapisywać tą wartość zwracaną przez funkcję tez musi być typu int. 2- Jeżeli funkcja oczekuje na zmienna typu float, to trzeba jej wysłać zmienna typu float, w naszym przypadku funkcja oczekuje na zmienna typu float (float a) w main wysylamy do niej zmienna bok1 jako a, bok1 zdeklarowane jest jako float wiec wszystko dobrze. Jeżeli funkcja oczekuje na zmienna typu int, to trzeba jej wysłać zmienna typu int, itd. Zmienne a , b które są zmiennymi funkcji nazywamy parametrami formalnymi. Zmienne bok1, bok2 które wysyłamy do funkcji żeby je odbierala jako a i b są parametrami aktualnymi. Uwaga! Kolejność wysyłania zmiennych do funkcji jest znacząca! Cały program: Sposób 1: #include <iostream.h> #include<conio.h> float pole (float a , float b) ; int main ( ) { float bok1 , bok2; cout << “Podaj wartosc pierwszego boku:”; cin >> bok1; cout << “Podaj wartosc drugiego boku:”; cin >> bok2; cout << “pole prostokata = “ << pole ( bok1, bok2) ; getch(); return 0; } float pole (float a , float b) { float wynik; wynik = a*b; return wynik; } Cały program: Sposób 2: #include <iostream.h> #include<conio.h> float pole (float a , float b) { float wynik; wynik = a*b; return wynik; } int main ( ) { float bok1 , bok2; cout << “Podaj wartosc pierwszego boku:”; cin >> bok1; cout << “Podaj wartosc drugiego boku:”; cin >> bok2; cout << “pole prostokata = “ << pole ( bok1, bok2) ; getch(); return 0; } Funkcje które nic nie zwracają! Te funkcje wyglądają tak: void nazwa_funkcji (typ_par1 nazwa_par1 , typ_par2 nazwa_par2 ,…) { instrukcje; } Funkcja nic nie zwraca więc przed nazwą funkcji mamy void. Funkcja nic nie zwraca więc nie mamy return! Wywołanie takiej funkcji w main() wyglada tak: nazwa_funkcji(parametry); Nie możemy od razy wyświetlić wynik zwracany przez tą funkcję ani nie możemy zapisać wynik zwracany przez tą funkcję do innej zmiennej, dlatego że ta funkcja nic nie zwraca! Zadania z zajęć Zadanie 1: Napisz program, który będzie posiadał funkcję sumująca dwie liczby podane przez użytkownika. Zadanie 2: Napisz program, który będzie posiadał funkcję do policzenia wartości bezwzglęnej podanej przez użytkownik liczbie. Zadanie 3: Napisz program, który będzie zawierał funkcję wyliczająca wartość silni pewnej liczby. Zadanie 4: Napisz program, który będzie zawierał funkcję wyliczająca wartość silni, następnie należy użyć tej funkcji do wyliczenia następującego wyrazu: n! , k ! (n k )! k,n, podaje użytkownik Zadanie 5: Napisz program, który będzie policzy a^b (a do potęgi b) , zakladając że b jest typu całkowitego. Program należy napisać bez zastosowania funkcji pow(a,b) !!! Zadanie 6: Napisz program, który będzie zawierał funkcję wyliczająca wartość silni oraz funkcję do policzenia potęgi, następnie należy użyć tych funkcji do wyliczenia następującego wyrazu: k n n! .a n k .bk k 0 k !( n k )! ( a b) n a,b,n podaje użytkownik.