You are on page 1of 8

Alprogramok

C++-ban függvények
Alprogramok osztályozása:
Függvények
Eljárások
C++-ban
Minden program tartalmaz legalább egy függvényt, a main() függvényt.
Visszatérítési értékkel rendelkező függvény például: sqrt, pow, strlen
Eljárás típusú függvény például: swap
Miért használunk függvényeket?
Átláthatóság
A program rövidebb
Projektek esetében
A memória optimálisabb használata
Létrehozhatunk saját könyvtárakat függvényekkel
Hibák megkeresése
A függvények általános struktúrája:
függvény fejléce
{
függvény törzse
}

<a visszatérített érték típusa> függvény neve(<formális paraméter lista>)


{
<helyi, lokális változók>
<utasítások>
<return kifejezes>
}
Visszatérítési értékkel rendelkező függvény
Nevükön keresztül térítenek vissza értéket
Általános alakjuk:
visszatérített_érték_típusa függvény_neve(<formális_paraméter_lista>)
{
<helyi, lokális változók>
<utasítások>
return <kifejezes>
}
visszatérített_érték_típusa - Bármilyen egyszerű típus, cím, előre meghatározott típus
függvény_neve – a függvény azonosítója
formális_paraméter_lista – vesszővel elválasztott, típussal ellátott paraméterlista, amely
hiányozhat.
Meghívásuk:
Szerepelhetnek bármilyen kifejezésben
függvény_neve(<efektív_paraméter_lista>)
Ha a formális_paraméter_lista üres akkor az effektív_paraméter_lista is üres.Az
effektív_paraméter_lista meg kell egyezzen a formális_paraméter_listával számban,
típusban és sorrendben – kivétel az implicit értékű paraméterek esetében.
A meghívás akkor ér véget, ha a retun utasításhoz ért, egy függvényben több return is lehet.
Példák:
int teszt(int a=10, int b=20);{return a+b}
void main()
{
cout<<teszt(30,40)<<’\n’;
cout<<teszt(30)<<’\n’;
cout<<teszt()<<’\n’;
}

Két szám átlaga:

#include<iostrem>
float media(int a, int b);
{
return (a+b)/2.0;
}
void main()
{
cout<<”Media(5,22)=”<<media(5,22)<<’\n’;
cout<<”x=”; cin>>x;
cout<<”y=”; cin>>y;
float m;
m=media(x,y);
cout<<”Media(”<<x<<”,”<<y<<”)=”<<m<<’\n’;
cout<<”Media(”<<x<<”,”<<y<<”)=”<<media(x,y)<<’\n’;
}
Tömbök használata

Cím szerinti átadás van, ezért egydimenziós tömbök esetén a formális paraméternél nem kell
megadni az elemek számát. Kétdimenziós tömbök esetében meg kell adni az oszlopok
lehetséges számát.

Egydimenziós tömbök használata


Egy tömb legnagyobb elemének kiszámolása
#include <iostream> #include <iostream>

using namespace std; using namespace std;


int nagy(int a[],int n){ int nagy(int a[20],int n){
int i,max; int i,max;
max=a[0]; max=a[0];
for(i=1;i<n;i++) for(i=1;i<n;i++)
if (a[i]>max) max=a[i]; if (a[i]>max) max=a[i];
return max; return max;
} }

int main() int main()


{ {
int a[20],n,i; int a[20],n,i;
cout << "n="; cin>>n; cout << "n="; cin>>n;
for (i=0;i<n ;i++ ){ for (i=0;i<n ;i++ ){
cout << "elem=";cin>>a[i]; cout << "elem=";cin>>a[i];
} }
cout<<nagy(a,n); cout<<nagy(a,n);
return 0; return 0;
} }
Karakterlánc használata

Egy karakterláncban számoljuk meg egy adott karakter előfordulási számát.

#include <iostream> #include <iostream>

using namespace std; using namespace std;


int darab(char a[],char c){ int darab(char a[50],char c){
int i=0,db; int i=0,db;
db=0; db=0;
while(a[i]){ while(a[i]){
if (a[i]==c) db++; if (a[i]==c) db++;
i++; i++;
} }
return db; return db;
} }

int main() int main()


{ {
char s[50],c; char s[50],c;
cout << "s="; cin>>s; cout << "s="; cin>>s;
cout << "c="; cin>>c; cout << "c="; cin>>c;
cout<<darab(s,c); cout<<darab(s,c);
return 0; return 0;
} }
Kétdimenziós tömbök használata
Egy kétdimenzióstömb legnagyobb elemének kiszámolása
#include <iostream> #include <iostream>

using namespace std; using namespace std;


int nagy(int a[][10],int m,int n){ int nagy(int a[10][10],int m,int n){
int i,j,max; int i,j,max;
max=a[0][0]; max=a[0][0];
for(i=0;i<m;i++) for(i=0;i<m;i++)
for (j=0;j<n ; j++) for (j=0;j<n ; j++)
if (a[i][j]>max) max=a[i][j]; if (a[i][j]>max) max=a[i][j];
return max; return max;
} }

int main() int main()


{ {
int a[10][10],m,n,i,j; int a[10][10],m,n,i,j;
cout << "m="; cin>>m; cout << "m="; cin>>m;
cout << "n="; cin>>n; cout << "n="; cin>>n;
for (i=0;i<m ;i++ ) for (i=0;i<m ;i++ )
for (j=0;j<n ; j++){ for (j=0;j<n ; j++){
cout << "elem=";cin>>a[i][j]; cout << "elem=";cin>>a[i][j];
} }
cout<<nagy(a,m,n); cout<<nagy(a,m,n);
return 0; return 0;
} }

Az első változatok a jobbak.

Visszatérítési értékkel nem rendelkező függvény


Nem térítenek vissza értéket
Általános alakjuk:
void függvény_neve(<formális_paraméter_lista>)
{
<helyi, lokális változók>
<utasítások>
}
függvény_neve – a függvény azonosítója
formális_paraméter_lista – vesszővel elválasztott, típussal ellátott paraméterlista, amely
hiányozhat.
Meghívásuk:
Akár egy parancsot.
függvény_neve(<efektív_paraméter_lista>)
Ha a formális_paraméter_lista üres akkor az effektív_paraméter_lista is üres. Az
effektív_paraméter_lista meg kell egyezzen a formális_paraméter_listával számban,
típusban és sorrendben – kivétel az implicit értékű paraméterek esetében.
A meghívás akkor ér véget, ha a blokk vége parancshoz ér a függvény.
Példák:
Írjunk függvényt, amely paraméterként kap egy egész számot és kiírja a képernyőre a kapott
számnak megfelelő * háromszöget. Például, ha a kapott szám 5 akkor megjelenik
*
**
***
****
*****

void kiir(int n){


int i,j;
for (i=1;i<=n ;i++ ){
for (j=1; j<=i;j++ ) cout<<'*';
cout<<'\n';
}
}

int main()
{
int n;
cout << "n="; cin>>n;
kiir(n);
return 0;
}
Címszerinti átadás
Már volt a tömbök esetében. A csere megoldása
Érték szerinti átadás Címszerinti átadás

void csere(double a, double b) { void csere(double &a, double &b) {


double c = a; double c = a;
a = b; a = b;
b = c; b = c;
cout<<a<< ", " <<b; cout<<a<< ", " <<b;
} }

int main(){ int main(){


double x = 12, y =23; double x = 12, y =23;
csere(x, y); csere(x, y);
cout << x << ", " << y << endl; // 23, 12 cout << x << ", " << y << endl; // 23, 12
} }

Állomány címszerinti átadása – megjegyzi, ahol abbahagyta az olvasást illetve az írást, főleg
rekurziók esetében
Állomány átadás olvasásra Állomány átadás írásra

void olvas(ifsream &f) { void ir(ofsream &f) {


f>>a; f>>a;
cout<<a; cin<<a;
} }

int main(){ int main(){


ifstream f("be.txt"); ofstream f("be.txt");
olvas(f); ir(f);
olvas(f); ir(f);
} }

int *fun()
{
int arr[100];

/* Some operations on arr[] */


arr[0] = 10;
arr[1] = 20;

return arr;
}

int main()
{
int *ptr = fun();
cout << ptr[0] << " " << ptr[1];
return 0;
}

You might also like