Funkcje w C++
Składnia definicji funkcji:
typ_wyniku nazwa_funkcji (zestaw parametrów formalnych)
{
wnętrze funkcji;
}
Zestaw parametrów formalnych to nazwy obiektów przekazywanych do funkcji wraz z podaniem ich typów, oddzielone przecinkami, występujące w definicji funkcji.
Przykład:
Definicja funkcji obliczającej średnią arytmatyczną dwóch liczb rzeczywistych:
float srednia(float a, float b) //typ_wyniku nazwa( parametry)
{
return (a+b)/2; //wynik funkcji - srednia dwóch liczb
}
Pojawienie się jakiejkolwiek insrukcji return powoduje zakończenie działania funkcji i przejście do kolejnego etapu programu (najczęściej powrót do funcji main).
Jeśli powstanie zapis return zmienna to funkcja zakończy działanie i dodatkowo przyjmie wartość równą zmiennej. A więc zdefiniowana powyżej funkcja pobiera dwie liczby rzeczywiste przekazane do niej jako parametry formalne (aktualne) i otrzymuje wartość rzeczywistą jaką jest ich średnia arytmatyczna ,dzięki zapisowi return (a+b)/2 .
Typ wyniku w definicji funkcji musi być zgody z typem wartości jaki przyjmuje funkcja w momencie pojawienia się słowa return.
Przykład I:
Wykorzystanie funkcji srednia, z wartościami podanymi jako parametry ,w programie:
#include<iostream>
#include<cstdio>
using namespace std;
float srednia(float a, float b) //definicja funkcji-zawsze przed pierwszym jej użyciem
{
return (a+b)/2;
}
int main()
{
cout<<”Średnia arytmatyczna liczb 2.5 i 5 jest równa:”<<endl;
cout<<srednia(2.5,5); //wywołanie funkcji srednia z argumentami(wartościami)
return 0;
}
Przykład II:
Wykorzystanie funkcji srednia ,ze zmiennymi podanymi jako parametry, w programie:
int main()
{
float x,y; //zmienne lokalne funkcji main
cout<<”Podaj dwie liczby:”;
cin>>x>>y;
cout<<”Średnia arytmatyczna tych liczb jest równa:”<<endl;
cout<<srednia(x,y); //wywołanie funkcji srednia ze zmiennymi
return 0;
}
Zmienne lokalne funkcji - zmienne zadleklarowane we wnętrzu funkcji. Są one znane wewnątrz funkcji od momentu deklaracji aż do zamknięcia klamry funkcji.
Zmienne globalne - zmienne deklarowane poza funkcjami, dostępne dla wszystkich funkcji zdefiniowanych pod nimi.
Przykład:
using namespace std;
float a,b; //zmienne globalne
float srednia()
{
return (a+b)/2; //funkcja srednia ma dostęp do zmiennych a i b
}
int main()
{
cout<<”Podaj dwie liczby”<<endl;
cin>>a>>b; //funkcja main ma dostęp do zmiennyh a i b
cout<<”Średnia tych liczb wynosi:”<<srednia();
return 0;
}
Zamiana miejscami dwóch liczb:
Aby zamienić miejscami dwie liczby potrzebna jest zmienna pomocnicza:
int pomoc,a,b;
pomoc=a; //przypisanie zmiennej pomocniczej wartości a
a=b; //zmienna a przyjmuje wartość zmiennej b
b=pomoc; //zmienna b przyjmuje wartość zmiennej pomocniczej czyli wartość a
Przykład:
Zamień miejscami liczby a=3 i b=2:
pomoc=3;
a=2;
b=3;
Funkcje typu void:
Słowo void oznacz typ pusty. Funkcje typu void nie zwracają żadnej wartości a więc nie występuje w nich słowo return.
Przykład:
Funkcja rysująca szlaczek o podanej ,jako argument ,długości ze znaków „-„:
void szlaczek (int dlugosc)
{
for ( int i = 0; i<dlugosc; i++)
cout<<”-”;
}
Wywołanie w programie:
int main()
{ int k;
cout<<”rysuje szlaczek o dlugości 5:”<<szlaczek(5);
cout<<”rysuje szlaczek o długości podanej z klawiatury:”<<endl;
cout<<”podaj długość:”;
cin>>k;
cout<<”szlaczek:”<<szlaczek(k);
}
Przekazywanie argumentów funkcji przez wartość:
Przykład:
void zmien(int a)
{
a=a+3;
cout<<”wewnątrz funkcji zmienna a ma wartość:”<<a<<endl;
}
int main()
{
int a=3; //zmienna a przyjmuje wartość 3
cout<<”Przed wywołaniem funkcji zmienna ma wartość:”<<a<<endl;
zmien(a); //wywołanie funkcji zmien
cout<<”Po wyjściu z funkcji zmienna ma wartość:”<<a<<endl;
return 0;
}
Wynik:
Przed wywołaniem funkcji zmienna ma wartość:3
wewnątrz funkcji zmienna a ma wartość:6
Po wyjściu z funkcji zmienna ma wartość:3
Ponieważ: W momencie wywołania funkcji tworzona zostaje zmienna lokalna, do której kopiowana jest nowa wartość (czyli a=a+3). Po zakończeniu działania funkcji zmienna ta przestaje istnieć i odwołanie następuje do pierwotnej zmiennej (czyli a=3).
Przekazywanie argumentów funkcji przez referencje:
Aby zmiany zostały zachowane nawet po wyjściu z funkcji należy przy argumencie w funkcji postawić znaczek &.Dzięki niemu odwołujemy się do adresu w pamięci gdzie znajduje się zmienna lokalna utworzona w momencie wywołania funkcji.
Przykład:
void zmien(int &a)
{a=a+3;
cout<<”wewnątrz funkcji zmienna a ma wartość:”<<a<<endl;
}
int main()
{int a=3;
cout<<”Przed wywołaniem funkcji zmienna ma wartość:”<<a<<endl;
zmien(a);
cout<<”Po wyjściu z funkcji zmienna ma wartość:”<<a<<endl;
return 0;
}
Wynik:
Przed wywołaniem funkcji zmienna ma wartość:3
wewnątrz funkcji zmienna a ma wartość:6
Po wyjściu z funkcji zmienna ma wartość:6
Zadania:
Napisz funkcję:
której argumentami są liczby oznaczające długość, szerokość i wysokość prostopadłośćianu a wynikiem jest pole powierzchni bocznej.
której argumentami są dwie liczby rzeczywiste a wynikiem najmniejsza z nich
której argumentami są trzy liczby rzeczywiste a wynikiem najmniejsza z nich
której argumentami są trzy liczby rzeczywiste a wynikiem ich mediana( czyli środkowa wartość, np.1,2,3 mediana=2 lub 3,2, 1 mediana=2)
potęga, która oblicza potęgę danej liczby (podane jako argumenty funkcji) metodą podnoszenia do kwadratu (2*2=22, 2*22=23, itp.)
która dla zadanych liczb rzeczywistych a,b,c zwraca -1 jeśłi nie mogą one być długościami boków trójkąta lub pole trójkąta o bokach a,b,c( ze sprawdzeniem warunku trójkąta i korzystając ze wzoru Herona).
która ma trzy parametry formalne a,b,c będące liczbami całkowitymi. Wartością funkcji jest liczba 1 gdy zadane liczby są liczbami pitagorejskimi(spałniają warunek a2+b2=c2 np. 32+42=52)
która sortuje dwie liczby rzeczwiste a,b i wyświetla je w sposób rosnący.
która sortuje trzy liczby rzeczywiste a,b,c i wyświetla je w sposób rosnący-Sortowanie bąbelkowe. Wykorzystaj funkcje z poprzedniego zadania w celu posortowania kolenych par liczb(a i b,b i c, a i c)
która wczytuje trzy liczby rzeczywiste i zwraca wartośc true gdy są one dodatnie oraz wartośc false w przeciwnym wypadku.