Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 4.281 pregleda

Najnovija ↓

Funkcija kao parametar funkcije 29.01.2007. u 18:45 · pre 240 meseci #1
Dva sata kopam po staroj dokumentaciji, ali se nikako ne mogu sjetiti kako se funkcija poziva kao parametar druge funkcije.
Evo zadatka:
Pomocu malenih funkc saberi, oduzmi i pomnozi izvrsiti racunske operacije nad a i b, ali tako da se poziva funkc izracunaj koja kao parametre uzima a,b i pokazivac na funkc koja treba da se pozove. ja sam dosao dovde i zapeo. prijavljuje greske o nepoznatoj funkciji-pointeru, o zagradama koej okruzuju pointer i o tome da je funkcija return vrijednost

Code:

#include <iostream>
using namespace std;

int izracunaj(int a,int b,(*pFunk)(int x,int y)){
    return pFunk(a,b);
}
int saberi(int a,int b){
    return a+b;
}
int oduzmi(int a,int b){
    return a-b;
}
int pomnozi(int a,int b){
    return a*b;
}

int main()
{
    int a,b;
    char operacija;
    cout << "Unesite dva broja!\n";
    cin >> a >> b;
    cout << "Unesite racunsku operaciju: ";
    cin >> operacija;
    int rezultat;
    if (operacija=='+')
        rezultat=izracunaj(a,b,&saberi(a,b));
    if (operacija=='-')
        rezultat=izracunaj(a,b,&oduzmi(a,b));
    if (operacija=='*')
        rezultat=izracunaj(a,b,&pomnozi(a,b))
    cout << "Rezultat je "<<rezultat<<endl;
    
    return 0;
}
Potpis
"I don't read books, but I have friends who do."
George W. Bush
Re: Funkcija kao parametar funkcije 29.01.2007. u 20:08 · pre 240 meseci
izmenjeno 1 put, poslednji put X Files 29.01.2007. u 20:23
  1. X Files29.01.2007. u 20:23zapis iz teksta poruke
#2
Onako, odokativno /netestirano/:
Umesto:
Citat:

int izracunaj(int a,int b,(*pFunk)(int x,int y)){
return pFunk(a,b);
}

... mozda bi trebalo:
Code:

typedef int (*pFunk)(int x,int y);
int izracunaj(int a,int b, int (*pF)(int, int)){
    return pF(a,b);

Dalje, umesto:
Citat:

if (operacija=='+')
rezultat=izracunaj(a,b,&saberi(a,b));
if (operacija=='-')
rezultat=izracunaj(a,b,&oduzmi(a,b));
if (operacija=='*')
rezultat=izracunaj(a,b,&pomnozi(a,b));

Pokusaj:
Code:

if (operacija=='+')
    rezultat=izracunaj(a,b,/*(pFunk)*/saberi);
if (operacija=='-')
    rezultat=izracunaj(a,b,/*(pFunk)*/oduzmi);
if (operacija=='*')
    rezultat=izracunaj(a,b,/*(pFunk)*/pomnozi);

Ovo moras sam da pokusas, ja sam odavno sa Borlandom, pa sam izgubio svaki smisao i osecaj
za prenosivost i standarde.
Re: Funkcija kao parametar funkcije 29.01.2007. u 22:20 · pre 240 meseci #3
>
hm...moze li ikako bez typedef? sto je najgore, pointer na funkciju
treba da radi kao (*pointer) (tip,tip), ali ne znam sto ga funkcija ne
prihvaca. VS ga podvlaci kao neku nepostojecu varijablu, tj. kao da se
parametar mora prethodno deklarirati. cudno skroz.
Potpis
"I don't read books, but I have friends who do."
George W. Bush
Re: Funkcija kao parametar funkcije 30.01.2007. u 08:01 · pre 240 meseci #5
Citat:

hm...moze li ikako bez typedef?

Može. Evo sad sam pogledao. To typedef mi je ionako ostalo kao slepo crevo
(dok sam gledako kako da se to kulturno odradi) - nije uopšte potrebno.

Ceo primer je lepo postavio Mali Misa. Radi cak i na Borlandu ;)
Re: Funkcija kao parametar funkcije 30.01.2007. u 14:25 · pre 240 meseci #6
>
@MaliMisha

Hvala, radi super. Znaci grijesio sam jer sam pogresno slao adresu
funkcije. medjutim, sta si ti ovdje uradio - jesi li pukim navodjenjem
imena funkcije (bez zagrada) u stvari proslijedio adresu pointeru? davno
sam ovo ucio, pa se vise ne sjecam da se funkc moze proslijediti samo
preko njenog imena.
Potpis
"I don't read books, but I have friends who do."
George W. Bush
Re: Funkcija kao parametar funkcije 30.01.2007. u 14:29 · pre 240 meseci #7
Greška je bila i ovo:
Code:

int izracunaj(int a,int b,(*pFunk)(int x,int y)){ // <--- Nisi naveo povratni TIP: int (*pFunk)
return pFunk(a,b);
}


Re: Funkcija kao parametar funkcije 30.01.2007. u 15:50 · pre 240 meseci #8
Citat:
X Files: Greška je bila i ovo:
Code:

int izracunaj(int a,int b,(*pFunk)(int x,int y)){ // <--- Nisi naveo povratni TIP: int (*pFunk)
return pFunk(a,b);
}


hm, zar treba povratni tip kad se funkcija koristi kao parametar?
Potpis
"I don't read books, but I have friends who do."
George W. Bush
Re: Funkcija kao parametar funkcije 30.01.2007. u 16:09 · pre 240 meseci #9
Citat:

hm, zar treba povratni tip kad se funkcija koristi kao parametar?

Pazi, imaš int a - integer, int b - integer, (*pFunk)(int x,int y) - nema, nisi naveo?!
Re: Funkcija kao parametar funkcije 30.01.2007. u 16:45 · pre 240 meseci #10
Citat:
X Files: Pazi, imaš int a - integer, int b - integer, (*pFunk)(int x,int y) - nema, nisi naveo?!


ma evo skontao sam kakve gluposti i ja pitam :D :D :D
Potpis
"I don't read books, but I have friends who do."
George W. Bush
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme