Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wskaźniki na funkcje

Ostatnio zmodyfikowano 2017-11-29 01:35
Autor Wiadomość
Filippo9669
Temat założony przez niniejszego użytkownika
Wskaźniki na funkcje
» 2017-11-29 01:09:59
Cześć! Mam problem z wskaźnikami na funkcje. Dopiero się ich uczę i postanowiłem napisać krótki kod, obliczający w dwu funkcjach wyróznik trójmianu kwadratowego oraz pierwiastek z niego. Oto kod:

C/C++
#include <iostream>
#include <string>
#include <cmath>

using namespace std;

double delta( double a, double b, double c ) //funkcja obliczajaca delte
{
    return( b * b - 4 * a * c );
}

double sqrtdelta( double a, double b, double c, double( * f2 )( double, double, double ) ) // funkcja obliczajaca pierwiastek z delty
{
    return sqrt(( * f2 )( a, b, c ) );
}



int main()
{
    double a, b, c;
    cout << "Funkcja kwadratowa postaci ax^2 + bx + c. ";
    cout << endl << "Podaj wspolczynniki: " << endl << endl;
    cout << "Wspolczynnik a: ";
    cin >> a;
    cout << "Wspolczynnik b: ";
    cin >> b;
    cout << "Wspolczynnik c: ";
    cin >> c;
   
    cout << sqrtdelta( a, b, c, delta );
   
    return 0;
}

I tutaj jest moje pytanie: czy istnieje inny sposób, by funkcja
sqrtdelta
 mogła przyjmować tylko jeden argument, mianowicie wartość delty? Oczywiście w wersji:
C/C++
double sqrtdelta( double( * f2 )( double, double, double ) )
{
    return sqrt(( * f2 ) );
}
program się nie kompilował, ze względu niepoprawną liczbę argumentów. Co mogę zrobić? Przyjmowanie tych samych argumentów w obu tych funkcjach pozbawia sensu korzystanie z wskaźnika do tej funkcji.
P-167380
pekfos
» 2017-11-29 01:12:24
I jak by wyglądało użycie tego?
P-167381
Filippo9669
Temat założony przez niniejszego użytkownika
» 2017-11-29 01:13:05
co masz na myśli?
P-167382
pekfos
» 2017-11-29 01:22:32
Jak chcesz tu coś obliczyć, skoro nie chcesz przekazać parametrów?
P-167383
Filippo9669
Temat założony przez niniejszego użytkownika
» 2017-11-29 01:24:25
W taki sposób, że mam obliczoną wartość delty i ją chcę przekazać. Następnie, w tej funkcji
sqrtdelta
 - po prostu obliczyć z niej pierwiastek.
P-167384
pekfos
» 2017-11-29 01:30:30
To przekaż tą wartość. Wskaźnik na funkcję nie jest od tego.
P-167385
Filippo9669
Temat założony przez niniejszego użytkownika
» 2017-11-29 01:33:32
No dobrze, ale co zrobić w przypadku, gdy jako argument jednej funkcji chcę przyjąć wartość drugiej funkcji? Choćby rozwijając ten kod, że pierwiastki trójmianu kwadratowego mają być obliczane w funkcji do tego stworzonej, która za argument przjmuje wartość pierwiastka z delty, który to jest obliczany w innej funkcji. Co wtedy?
P-167386
pekfos
» 2017-11-29 01:35:38
C/C++
int f();
int g( int );

g( f() );
P-167387
« 1 »
  Strona 1 z 1