Fehler beim Taschenrechner mit Fakultät



  • Hallo, ich bin relativ neu hier.
    Ich habe als Übung meines Profs die Implementierung der Fakultät und Potenz in meinen Taschenrechner bekommen.
    Potenz funktioniert soweit nur Fakultät will einfach nicht.
    Der Taschenrechner soll eine 0 ausgeben. Danach darf man einen Operanten eingeben und die Zahl dahinter. Fakultät soll ohne Zahl funktionieren -> 5!
    Bitte um Hilfe 😉

    #include <iostream>
    #include <math.h>
    
    using namespace std;
    void druckEingabeHilfe();
    int fakultaet(int ergebnis);
    int potenz(int ergebnis, int zahl);
    
    void main()
    {
    double ergebnis = 0.0;
    double zahl;
    char zeichen;
    
    druckEingabeHilfe();
    cout << ergebnis;
    cin >> zeichen;
    
    	while(zeichen != 'e')
    	{
    		if(zeichen != 'c')
    		{
    		cin >> zahl;
    		}
    
    	switch(zeichen)
    	{
    	case '+': ergebnis = ergebnis + zahl; break;
    	case '-': ergebnis = ergebnis - zahl; break;
    	case '*': ergebnis = ergebnis * zahl; break;
    	case '/': 
    		if(zahl != 0)
    		{
    		ergebnis = ergebnis / zahl;
    		}
    			else
    			{
    			cout << "Keine Division durch 0 erlaubt!\n\n";
    			} break;
    
    	case '!': ergebnis = fakultaet(int(ergebnis)); break;
    
    	case '^':
    		if(zahl != int(zahl))
    		{
    		cout << "Es sind nur ganze Zahlen erlaubt!\nBitte wiederholen Sie die Eingabe.\n\n";
    		}
    
    		else
    		{
    		ergebnis = potenz(int(ergebnis), int(zahl));
    		} break;
    
    	case 'c': ergebnis = 0.0; break;
    
    	default: cout << "! Achtung ! - ! Das ist nicht erlaubt !\n\n";
    }
    cout << ergebnis;
    cin >> zeichen;
    }
    }
    
    ///////////////////////////////////////// Unterprogramm für die Darstellung/////
    void druckEingabeHilfe()												
    {																		
    cout << "\n\t<------------Taschenrechner-------------->"					
    	 << "\n\tEinleitung:"											
    	 << "\n\tAddieren = +"											
         << "\n\tSubtrahieren = -"									
         << "\n\tMultiplizieren = *"
         << "\n\tDiviedieren = /"
    	 << "\n\tFakultaet = !"
    	 << "\n\tPotenz = ^"
    	 << "\n\tReset =  c"
         << "\n\tBeenden = e"
         << "\n\t<---------------------------------------->\n";
    }
    
    ///////////////////////////////////////// Unterprogramm für die Potenz/////
    double potenz(double x,double n)
    {
    	double result;
    	result = pow(x,n);
    	return result;
    }
    
    ////////////////////////////////Fakultät////
    
    int fakultaet(int ergebnis)
    {
    	int i;
    	int result = 1;
    	if(ergebnis == 0 || ergebnis == 1)
    	{
    		result = 1;
    	}
    	else
    	{
    		for(i=1;i<=ergebnis;i++)
    		{
    			result = result * i;
    		}
    	}
    
    	return result;
    }
    
    int potenz(int ergebnis, int zahl)
    {
    	int result;
    	result = int(pow(double(ergebnis), double(zahl)));
    
    	return result;
    }
    


  • Fakultäten "ohne Zahl" gibt es nicht.
    Und was genau funktioniert nicht?


  • Mod

    Durchdenk nochmal deine Menüstruktur. Du wirst sehen, dass bei dir nach der Eingabe von '!' trotzdem noch nach einer Zahl verlangt wird. Bloß bei Eingabe von 'e' und 'c' wird dieser Schritt übersprungen. Füge dort auch '!' hinzu und es wird wie gewünscht funktionieren.

    Ansonsten fällt mir spontan auf:
    1. Das heißt "int main()"
    2. Das heißt "#include <cmath>"



  • Ich bin mir nicht ganz sicher, ob du die Fakultät verstanden hast. Nanyuki hat es ja schon angesprochen. Die Fakultät ist ein zweistelltiger Operator.
    z.B

    int fac_5_of_7 = 7%5; // 2
    

    entspricht 7 mod 5

    Um das selbst zu berechnen würde ich das gar nicht mal mit einer Schleife machen, sondern gleich direkt mal die Integer Division machen. Und dann einfach vom ursprünglichen Wert den enthaltenen Wert mal dem Divisor abziehen.



  • drakon schrieb:

    Ich bin mir nicht ganz sicher, ob du die Fakultät verstanden hast. Nanyuki hat es ja schon angesprochen. Die Fakultät ist ein zweistelltiger Operator.
    z.B

    int fac_5_of_7 = 7%5; // 2
    

    entspricht 7 mod 5

    Um das selbst zu berechnen würde ich das gar nicht mal mit einer Schleife machen, sondern gleich direkt mal die Integer Division machen. Und dann einfach vom ursprünglichen Wert den enthaltenen Wert mal dem Divisor abziehen.

    Falsch.


Anmelden zum Antworten