View Single Post
Sitat av |d13m0b Vis innlegg
Det snakk om eleganse, kan han også løse dette på en meget flott måte med en funksjonspeker.
Vis hele sitatet...
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;
}