Kliknite tukaj, da si ogledate profil, kot ga vidijo drugi

Funkcije v C++

  V tej lekciji vam bom skušal na čim bolj razumevajoč način predstaviti in obrazložiti funkcije v programskem jeziku C++.
 
 
1
 
 
Odprite poljuben Compiler in odprite novo izvorno datoteko.

Jaz bom za to lekcijo uporabil Dev C++.

 
 
2
 
 
Kaj pravzaprav funkcija je?

Funkcija je neka podnaloga. Funkcije so sestavljene iz stavkov. Ponavadi tudi nekaj "vračajo" razen funkcije tipa void.

Sintaksa funkcij je sledeča:
tip_ki_ga_funkcija_vrača ime_funkcije (argument 1, argument 2, ...agrument x) { }

Primer funkcije, ki sešteje dve celi števili in vrne njuno vsoto: int vsota(int a, int b) { return a+b }

Funkcije prikličemo s klicem. To storimo tako, da napišemo ime funkcije in v oklepajih navedemo argumente; v našem primeru: vsota(x, y);
 
 
3
 
 
Uporabimo za začetek zgornjo funkcijo v našem programu:

#include <iostream>
using namespace std;
//definicja funkcije vsota
//Opozorilo: funkcije zmeraj definiramo pred funkcijo main!
int vsota(int a, int b) {
return a+b;
}
int main () {
int a=5, b=3; //deklaracija in inicializacija dveh celih števil
int c=vsota(a, b); //klic funkcije z argumentoma a in b
cout<<"Vsota stevil "<<a<<" in "<<b<<" je "<<c<<endl; //vsoto nato še izpišemo...
system("pause");
return 0; //... in zaključimo program
}
 
 
4
 
 
Spoznajmo sedaj še druge tipe funkcij:

  1. funckija tipa void: void ImeFunkcije(argumenti) { } 
  2. funkcija tipa char: char ImeFunkcje(argumenti) { return ()}
  3. funkcija tipa double: double ImeFunkcije(argumenti) { return () }
  4. funckija je lahko tudi tipa float, definicija pa je skoraj identična prejšnji...
  5. funkcija tipa boolbool ImeFunkcije(argumenti) { return () }
Kot vidite, vse funkcije morajo nekaj vrniti (ukaz return), izjeme so funkcije void, ki ukaza return ne potrebujejo. Funkcija vrača vrednost enakega tipa kot je tudi sama!
 
 
 
 
 
5
 
 
Naredimo sedaj program, ki bo imel dve funkciji in sicer, prva bo izpisovala abecedo z malimi črkami (a, b, c...), druga pa z velikimi (A, B, C...).

Uporabili bomo tip void, saj želimo, da funkciji kar sami izpišeta abecedi... Pa kar začnimo:
 
 
6
 
 
//spet standardna ukaza
#include <iostream>
using namespace std;
//definirijamo sedaj ti dve funkciji
void abeceda_velike() { //število argumentov je lahko tudi enako 0, če jih ne potrebujemo!
int x=1;
for(char i='A'; i<='Z';i++) {
cout<<i<<" ";
if((x%10)==0)
    cout<<endl;
x++;  
}  
cout<<endl<<endl;
}

 
 
7
 
 
//še druga funkcija za male črke
void abeceda_male() {
    int x=1;
    for(char i='a'; i<='z';i++) {
        cout<<i<<" ";
        if((x%10)==0)
            cout<<endl;
        x++;
    }
}
 
 
8
 
 
//sedaj je navrsti main funkcija, v kateri bomo zgornji funkciji seveda tudi klicali
int main () {
abeceda_male(); //klic funkcije za male črke
cout<<endl<<endl;
abeceda_velike(); //klic funkcije za velike črke
cout<<endl;
system("pause");
return 0;
}

Sedaj ta program deluje zelo pregledno, saj je v glavni funkciji zelo malo število vrstic in to je tudi ena poleg ostalih prednosti funkcij.
 
 
9
 
 
Do sedaj smo funkcije definirali že takoj na začetku, zdaj pa vam bom pokazal še drugi način definiranja.
#include <iostream>
using namespace std;
//ponovno bomo definirali funkcijo vsota vendar na malo drugačen način
int vsota(int a, int b); //temu delu rečemo tudi prototip funkcije, v njem samo povemo tip, ime, in argumente funkcije...
 
 
10
 
 
int main () {
int x=10, y=20;
cout<<vsota(x, y)<<endl;
system("pause");
return 0;
}
//sedaj pa še dodajmo kodo funkcije
int vsota(int a, int b) { //kopiramo prototip vendar brez podpičja (;) in dodamo zavita oklepaja
return a+b;
}

Oba načina sta seveda pravilna in je samo stvar vašega okusa, kater način boste uporabljali
 
 
11
 
 
Za konec vam bom napisal še postopek sortiranja polj - in sicer se ta postopek imenuje bubble sort oz. mehurčno urejanje. Spoznali boste tudi prenos po referenci, kaj pa to pomeni, boste izvedeli v nadaljevanju...
 
 
12
 
 
#include <iostream>
using namespace std;
void IzpisiPolje(int polje[], int vel); //prototip funkcije za izpis polja
void Zamenjaj(int& a, int& b); //prenos po referenci (&) -  prototip funkcije, ki bo zamenjala dve števili
void Uredi(int polje[], int vel); //prototip funkcije, ki bo polje uredila po velikosti
void IzpolniPolje(int polje[], int vel); //funkcija, s katero bomo v polje vnesli števila
 
 
13
 
 
int main () {
int velikost=10;
int polje[velikost];
IzpolniPolje(polje, velikost);
cout<<"Polje pred ureditvijo: "<<endl;
IzpisiPolje(polje, velikost);
cout<<"Polje po ureditvi: "<<endl;
Uredi(polje, velikost);
IzpisiPolje(polje, velikost);
 
 
14
 
 
//zaključimo program
system("pause");
return 0;
}
 
 
15
 
 
//...vendar nismo še končali, saj moramo naloge funkcij še definirati
void IzpisiPolje(int polje[], int vel) {
for(int i=0;i<vel;i++)
cout<<polje[i]<<endl;
}
void Zamenjaj(int& a, int& b) {
if(a<b) {
int zacasna=a;
a=b;
b=zacasna;
}
}

 
 
16
 
 
void Uredi(int polje[], int vel) {
for(int i=0;i<vel;i++) {
for(int j=0;j<vel;j++)
Zamenjaj(polje[i], polje[j]); //klic funkcije
}
}
 
 
17
 
 
void IzpolniPolje(int polje[], int vel) {
for(int i=0;i<vel;i++) {
cout<<"Vnesi "<<i+1<<". stevilo: ";
cin>>polje[i];
}
}
 
 
18
 
 
Sedaj pa vam bom še razložil, kako zgornje funkcije delujejo.

1. Funkcija enostavno s pomočjo for zanke izpiše vrednosti vseh celic polja
2. Pri drugi funkciji pa ste mogoče opazili malo drugačno deklariranje spremenljivk a in b. Z operatorjem & namreč ustvarimo referenco. Referenca je v bistvu samo drugo ime neke druge spremenljivke - imata isto vrednost. Ključnega pomena pa za to funkcijo je, da če referenci spremenimo vrednost, se vrednost spremeni tudi prvotni spremenljivki.
 
 
19
 
 
Z if stavkom nato preverimo, če je vrednost a manjša od vrednosti b. Če je pogoj resničen, dobi spremenljivka a vrednost b in spremenljivka b vrednost spremenljivke a (pomagamo si z začasno - pomožno spremenlljivko).

Verjetno se še zmeraj sprašujete, zakaj smo uporabili referenci. Zato, ker če spremenljivki ne bi bili referenci, bi se vrednosti znotraj funkcije spremenili, vendar pa se izven funkcije ne bi. Ker pa smo ju uporabili, se bosta vrednosti spremenili tudi izven funkcije!
 
 
20
 
 
Lahko tudi naredite preizkus in funkciji podate argumenta (int a, int b) { ... }

3. V to funkcijo smo vključili prejšnjo funkcijo, s katero preverimo vrednosti celic na indeksih i in j.
4. Z zadnjo funkcijo pa polje preko for zanke enostavno inicializiramo.
 
 
Komentiraj
 
 
 
 
 
9.2.2011, 14:49
Ahhh zelo enostavno . Sicer pa bom to moral znati... Dobra lekcija!
 
 
 
 
17.2.2011, 14:46
Za kaj se sploh uporablja C++? V katerem formatu lahko to potem odpreš itd.?
 
 
 
 
17.2.2011, 15:11
C++ je programski jezik, se pravi z njim izdelujemo programčke. C++ datoteke so v formatu .cpp (.cxx). Te datoteke lahko odpreš s poljubnimi urejevalniki besedil, najboljše pa je, da uporabiš programe, ki imajo vključen tudi prevajalnik (Dev C++, Visual Studio itd) ...

Je pa C++ eden izmed najbolj razširjenih programskih jezikov in je zelo primeren za začetnike, ki bi se radi naučili programirati.
 
 
 
 
17.2.2011, 16:26
Za začetnike ga jaz ne bi priporočal, saj se mu precej pozna, da je bil ustvarjen pred nekaj deset leti.

V tem času je prišlo ven precej jezikov, ki so bili že v osnovi zastavljeni z modernimi principi programiranja (objektno programiranje, ...).

Za učenje bi sam osebno raje priporočil Visual Basic ali pa Javo.
 
 
 
 
17.2.2011, 16:53
Da je C++ za začetnike boljši sem rekel zato, ker je prvi jezik, ki sem se ga začel učiti in sem z njim pridobil veliko osnov programiranja, zato ga za učenje priporočam.

Po mojem mnenju je prednost C++ v primerjavi z recimo Javo tudi ta, da je sintaksa samega jezika veliko enostavnejša. Primer: če hočemo pri C++ iz standardnega vhoda prebrati vrednost, enostavno napišemo ukaz cin ali pa scanf (iz C-ja). Pri Javi pa je to lahko dosti bolj zakomplicirano, saj se vse shranjuje v niz, ki ga je potem potrebno "razrezati", da dobimo ven določeno vrednost ...

Za konec kot zanimivost: OpenGL (na katerem temelji kar nekaj iger in tudi programov) ima funkcije napisane v C/C++. Kar pomeni, da lahko zahtevnejše grafične oblike (tudi tri-dimenzionalne) pišemo kar v C++ z uporabo OpenGL-jevih knjižnic. Nekaj več na: http://www.cprogramming.com/tutorial/ope....
 
Prijava in registracija
 
 
 
Zmaga.com ponuja brezplačno in razumljivo učenje računalniških programov, vas na enkraten način spozna z različnimi svetovnimi jeziki, s podrobno obrazloženimi recepti prikaže čare kulinarike in vam prežene strahove pred domačimi opravili.
 
 
Poleg tega lahko prebirate poučne članke, ki so namenjene širjenju naše splošne razgledanosti ter preverite svoje znanje z priljubljenim in enostavnim sistemom za preverjanje znanja. Če med vsebinami, ki se dodajajo vsak dan, ne najdete želenega znanja, je za vaša vprašanja na voljo dobro obiskan forum, kjer lahko tudi aktivno sodelujete. V primeru, da bi radi svoje praktično znanje delili z ostalimi, pa to lahko storite preko preprostega vmesnika za dodajanje vsebin. Zmagajte z znanjem z Zmaga.com!