Chcesz stworzyć funkcję calculate(), która pobierze dwie wartości typu double i wskaźnik funkcji mającej dwa argumenty double, zwracającej wartość double? Jeśli tak to funkcja calculate() też ma być typu double i ma zwracać wartość, którą wyliczy wskazana funkcja po przekazaniu jej obu argumentów.
Jeśli chcesz stworzyć tablicę wskaźników funkcji podobnych do add(),
double add(double x, double y)
{
return x + y;
}
i w pętli stosować calculate() z tymi funkcjami, to deklaracja takiej tablicy powinna wyglądać następująco:
double(*pf)(double, double);
Przykład:
#include <iostream>
using namespace std;
const int NUMBER_FUNCTIONS = 4; // ustalam liczbę (wskaźników) funkcji dla funkcji calculate()
double add(double, double); // prototyp funkcji która obliczy sumę
double ratio(double, double); // prototyp funkcji która obliczy iloczyn
double difference(double, double); // prototyp funkcji która obliczy różnicę
double quatient(double, double); // prototyp funkcji która obliczy iloraz
// prototyp funkcji która wywołuje odpowiednie funkcje do obliczeń
double calculate(double, double, double(*calledFunctions)(double, double));
int main() {
// tablica z 4 wskaźnikami funkcji
double(*calledFunctions[NUMBER_FUNCTIONS])(double, double) { add, ratio, difference, quatient };
// stała tablica z nazwami obliczeń
const char *NAME_CALCULATION[NUMBER_FUNCTIONS] { "Suma", "Iloczyn", "Roznica", "Iloraz" };
double a = 0, b = 0; // zmienne do obliczeń
cout << "Podaj dwie liczby (K koniec): ";
while (cin >> a >> b) {
for (int i = 0; i < NUMBER_FUNCTIONS; i++) {
cout << NAME_CALCULATION[i] << ": " << calculate(a, b, (*calledFunctions[i])) << endl;
}
cout << "\nPodaj klolejne dwie liczby (K koniec): ";
}
system("pause");
return 0;
}
// funkcje która liczy sumę
double add(double x, double y) {
return x + y;
}
// funkcje która liczy iloczyn
double ratio(double x, double y) {
return x * y;
}
// funkcje która liczy różnicę
double difference(double x, double y) {
return x - y;
}
// funkcje która liczy iloraz
double quatient(double x, double y) {
return x / y;
}
// funkcje która zwraca wynik innej funkcji
double calculate(double x, double y, double(*calledFunctions)(double, double)) {
return (*calledFunctions)(x, y);
}