Informatyka I - wykład 6
Funkcje
Slajd 1
Informatyka I – wykład 6
G.P.Korbaś
Program 1.
- Funkcja wypisująca gwiazdki
#include <iostream>
using namespace std;
//jakiś zygzak
void gwiazdki()
{
const int maxx=5;
const int maxy=15;
int x=0,dx=1;
for (int i=0; i<maxy;i++)
{
for (int ii=0;ii<x;cout<<' ',ii++);
cout<<"*"<<endl;
x+=dx;
if (x==maxx-1 || x==0) dx=-dx;
}
return;
}
Slajd 2
Informatyka I – wykład 6
G.P.Korbaś
int main()
{
gwiazdki();
cout<<"Dzień dobry"<<endl;
gwiazdki();
cout<<"To jest program z gwiazdkami"<<endl;
gwiazdki();
system("PAUSE");
return 0;
}
Slajd 3
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 1.
●
void gwiazdki()
– prototyp funkcji o nazwie gwiazdki. Funkcja nie
pobiera żadnych argumentów i nic nie zwraca.
Slajd 4
Informatyka I – wykład 6
G.P.Korbaś
Program 2.
- Funkcja zwracająca liczbę losową od 0 do 99
#include <iostream>
#include <ctime>
using namespace std;
int losuj0do100()
{
int los=int(rand()*101/RAND_MAX);
if (los==101) los=100;
return los;
}
int main()
{
srand(time(0)*1000);
for (int i=0;i<10;i++)
cout<<losuj0do100()<<endl;
system("PAUSE");
return 0;
}
Slajd 5
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 2.
●
int losuj0do100()
– prototyp funkcji o nazwie losuj0do100.
Funkcja nie pobiera żadnych argumentów i zwraca liczbę całkowitą.
Slajd 6
Informatyka I – wykład 6
G.P.Korbaś
Program 3.
- Funkcja zwracająca liczbę powiększoną o 2
#include <iostream>
using namespace std;
int dodaj2(int a)
{
a=a+2;
return a;
}
int main()
{
int u=1;
cout << u << endl; // 1
cout << dodaj2(u) << endl; // 3
cout << u << endl; // 1
cout << dodaj2(10) << endl; // 12
return 0;
}
Slajd 7
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 3.
●
int dodaj2(int a)
– prototyp funkcji o nazwie dodaj2. Funkcja
pobiera (przez wartość) liczbę całkowitą i zwraca liczbę całkowitą.
Pobieranie argumentów przez wartość oznacza, że wykonywana jest kopia
zmiennej. W ramach funkcji można posługiwać się zmienną argumentem
ale nie ma to wpływu na żadną zmienną poza funkcją.
Przy takim podawaniu parametrów można podać wartość wprost – bez
pośrednictwa zmiennej.
Slajd 8
Informatyka I – wykład 6
G.P.Korbaś
Program 4.
- Funkcja zwracająca liczbę powiększoną o 2 – argument przez referencję
#include <iostream>
using namespace std;
int dodaj2(int &a)
{
a=a+2;
return a;
}
int main()
{
int u=1;
cout << u << endl; // 1
cout << dodaj2(u) << endl; // 3
cout << u << endl; // 3
return 0;
}
Slajd 9
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 4.
●
int dodaj2(int &a)
– prototyp funkcji o nazwie dodaj2. Funkcja
pobiera (przez referencję) liczbę całkowitą i zwraca liczbę całkowitą.
Pobieranie argumentów przez referencję oznacza, że do funkcji
przekazywany jest adres zmiennej w pamięci. Wszelkie zmiany
wykonywane na zmiennej w ramach funkcji wpływają na zmienną
przekazaną.
Przy takim podawaniu parametrów nie można podać wartość wprost – bez
pośrednictwa zmiennej.
Slajd 10
Informatyka I – wykład 6
G.P.Korbaś
Dotychczasowe przykłady pokazywały jak od razu deklarować i
definiować funkcje w jednym miejscu programu.
Deklaracja oznacza wskazanie kompilatorowi, że istnieje funkcja o
podanym prototypie.
Definicja oznacza określenie jak funkcja działa.
Można jednak deklarować i definiować funkcję osobno. Dalszy przykład
pokazuje jak zadeklarować funkcję na początku i zdefiniować pod koniec
kodu programu.
W praktyce większość deklaracji znajduje się w tzw. plikach
nagłówkowych .h a większość definicji w plikach .cpp.
Slajd 11
Informatyka I – wykład 6
G.P.Korbaś
Program 5.
- Funkcja zwracająca liczbę powiększoną o 2 – rozbita deklaracja i definicja
#include <iostream>
using namespace std;
int dodaj2(int a);
int main()
{
int u=1;
cout << u << endl; // 1
cout << dodaj2(u) << endl; // 3
cout << u << endl; // 1
cout << dodaj2(10) << endl; // 12
return 0;
}
int dodaj2(int a)
{
a=a+2;
return a;
}
Slajd 12
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 5.
●
int dodaj2(int a);
– przy samodzielnej deklaracji zaraz za
prototypem funkcji pojawia się średnik!
Slajd 13
Informatyka I – wykład 6
G.P.Korbaś
Program 6.
- Funkcja zwracająca największą z trzech liczb i program ją wykorzystujący
#include <iostream>
using namespace std;
int maxi(int a, int b, int c)
{
int m;
if (a>b)
if (a>c) m=a; else m=c;
else
if (b>c) m=b; else m=c;
return m;
}
int main()
{
int u,v,w;
cin >> u >> v >> w;
cout << maxi(u,v,w);
return 0;
}
Slajd 14
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 6.
●
int maxi(int a, int b, int c)
– prototyp funkcji o nazwie maxi.
Funkcja pobiera (przez wartość) trzy liczby całkowite i zwraca liczbę
całkowitą.
Slajd 15
Informatyka I – wykład 6
G.P.Korbaś
Program 7.
- Funkcja normująca wektor
#include <iostream>
#include<cmath>
using namespace std;
void normuj(double &x, double &y, double &z);
int main()
{
double T[3];
cin >> T[0] >> T[1] >> T[2];
normuj(T[0],T[1],T[2]);
cout << T[0] << ' ' << T[1] << ' ' << T[2];
return 0;
}
void normuj(double &x, double &y, double &z)
{
double d=sqrt(x*x+y*y+z*z);
x=x/d;
y=y/d;
z=z/d;
}
Slajd 16
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 7.
●
void normuj(double &x, double &y, double &z)
– prototyp
funkcji normuj pobierający przez referencję trzy liczby rzeczywiste.
Funkcja nie zwraca żadnej wartości (void)
Slajd 17
Informatyka I – wykład 6
G.P.Korbaś
Program 8.
- normująca wektor z argumentem tablicowym
#include <iostream>
#include<cmath>
using namespace std;
void normuj(double X[])
{
double d=sqrt(X[0]*X[0]+X[1]*X[1]+X[2]*X[2]);
X[0]=X[0]/d; X[1]=X[1]/d; X[2]=X[2]/d;
}
int main()
{
double T[3];
cin >> T[0] >> T[1] >> T[2];
normuj(T);
cout << T[0] << ' ' << T[1] << ' ' << T[2];
system ("pause");
return 0;
}
Slajd 18
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 8.
W podanym programie funkcja została zadeklarowania jako otrzymująca
tablicę. Kopia tablicy nie jest wykonywana – w przypadku tablic
przekazywany jest zawsze adres, co oznacza, że tablice przekazuje się
zawsze przez referencję!
Slajd 19
Informatyka I – wykład 6
G.P.Korbaś
Program 9.
- Funkcja zwracająca liczbę powiększoną o ...
#include <iostream>
using namespace std;
void dodaj(int &a, int d=1)
{
a=a+d;
}
int main()
{
int u=1;
cout << u << endl; // 1
dodaj(u); cout << u << endl; // 2
dodaj(u,5); cout << u << endl; // 7
return 0;
}
Slajd 20
Informatyka I – wykład 6
G.P.Korbaś
Uwagi do programu 9.
●
void dodaj(int &a, int d=1)
– prototyp funkcji o nazwie dodaj.
Funkcja pobiera (przez referencję) liczbę całkowitą i ewentualnie
(przez wartość) drugą liczbę całkowitą, dla której podano wartość
domyślną jeśli nie zostanie podana. Funkcja nic nie zwraca.
Slajd 21
Informatyka I – wykład 6
G.P.Korbaś