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.

Podobne dokumenty