Sitat av
|d13m0b
Det snakk om eleganse, kan han også løse dette på en meget flott måte med en funksjonspeker.
Jeg tok meg friheten til å skrive et eksempel basert på koden i førsteposten som nettopp gjør dette.
Kode
#include <iostream>
using namespace std;
// Funksjoner (regneformer)
float pluss(float a, float b) { return a + b; };
float substraksjon(float a, float b) { return a - b; };
float ganger(float a, float b) { return a * b; };
float dele(float a, float b) { return a / b; };
int main()
{
// Initsialiser variabler
float tall1;
float tall2;
char regneform;
// Initsialiser funksjonspekeren
float (*funksjonspeker)(float, float);
cout << "Kalkis!\n";
cout << "+=pluss -=minus *=ganger /=delt på\n";
cout << "Skal du ha pluss, substraksjon, ganger eller delt på?\n";
cin >> regneform;
// Sjekk hvilken regneform vi skal bruke og sett funksjonspekeren til å
// peke til riktig funksjon
switch (regneform)
{
case '+':
funksjonspeker = &pluss;
break;
case '-':
funksjonspeker = &substraksjon;
break;
case '*':
funksjonspeker = &ganger;
break;
case '/':
funksjonspeker = &dele;
break;
default:
cout << "Dette er ikke en gyldig regneform\n";
return 1;
}
cout << "Skriv inn det første tallet i regnestykket (eks. 37)\n";
cin >> tall1;
cout << "Skriv inn det siste tallet i regnestykket (eks. 37)\n";
cin >> tall2;
// Bruk funksjonspekeren til å gjøre kalkulasjonen brukeren valgte
float tall3 = (*funksjonspeker)(tall1, tall2);
cout << tall1 << regneform << tall2 << "=" << tall3 << endl;
return 0;
}