Wissenschaftliche Darstellung



  • Hallo,
    ich habe ein Programm geschrieben, welches die Fakultät errechnen kann. Sobald ich jedoch die Fakultät von einer Zahl >= 10 errechnen möchte, zeigt er mir nur die wissenschaftliche (?) darstellung, sprich "3.6288e+006" anstatt 3628800. Hättet ihr eine Idee, woran dies liegen könnte?
    mfg
    Dennis



  • Schau dir mal "Manipulatoren" an... 😃



  • klingt vielleicht doof, aber es müsste doch auch ohne gehen, oder?
    Hier mein Code, damit es vielleicht einfacher fällt eine Hilfestellung zu geben

    #include <iostream>
    using namespace std;
    
    const int INT_OVERFLOW = -1;
    
    ////////////////////////////////////////////////// Überprüfung auf Ganzzahl //////////////////////////
    double ganzZahl(double operand)
    
    {
    	if((int)operand != operand)
    	{
    		return(0);
    	}else
    	{
    		return(operand);
    	}
    }
    
    ////////////////////////////////////////////////// Eingabehilfe //////////////////////////
    void druckEingabeHilfe()
    
    // Dieses Programm gibt eine kleine Eingabehilfe aus.
    {
    
    	cout << "Dieses Programm unterstuetz alle gaengigen Grundrechenarten.\n" << endl
    		 << "Die Bedienung:\nDurch Eingabe von c wird das Ergebnis auf 0 zurueckgesetzt" << endl
    		 << "Durch Eingabe von e wird das Programm beendet" << endl 
             << "Durch den Operator ! wird die Fakultaet des jeweiligen Ergebnisses errechnet" << endl;
    }
    
    ////////////////////////////////////////////////// Fakultaet //////////////////////////
    int fakultaet(int wert)
    
    {
    int fakul=1;
    int overflow;
    
    for(int i = 1; i<=wert; i++)
    {
    	fakul = fakul * i;
    }
    overflow=fakul;
    for (wert;wert>= 1; wert--)
    {
    	overflow = overflow/wert;
    }
    if(overflow != 1)
        return(INT_OVERFLOW);
    else
        return(fakul);
    
    }
    
    ////////////////////////////////////////////////// Potenz //////////////////////////
    double potenz (double basis, double exponent)
    {
    double ergebnis = basis;
    double negativ = exponent;
    
    if (exponent < 0)
    exponent = exponent * (-1);
    
    while (exponent != 0)
    {
          for(int i = 1; i < exponent; i++)
          {
            basis = basis * ergebnis;
          }
    
    if (negativ < 0)
        return (1/basis);
    else
        return (basis);
    }
    return (1);
    }
    
    ////////////////////////////////////////////////// MAINFUNKTION //////////////////////////
    int main()
    {
    
    double operand;
    double ergebnis=0;
    double KOoperand;
    char Operator;
    int fergebnis;
    
    druckEingabeHilfe();
    cout<<"Berechnung"<<endl;
    cout<< ergebnis;
    
    do
    {	
     cin >> Operator;
    
    switch(Operator)
    {
    
    case '+':	cin >> operand;
    			ergebnis=ergebnis+operand;
    			cout << ergebnis;
    			break;
    
    case '*':	cin >> operand;
    			ergebnis=ergebnis*operand;
    			cout << ergebnis;
    			break;
    case '-':	cin >> operand;
    			ergebnis=ergebnis-operand;
    			cout << ergebnis;
    			break;
    case '/':	cin >> operand;
    			if(Operator == '/' && operand == 0)
    			{ 
    			cout << "Keine Division durch 0\n";
    			}else 
    			{
    				ergebnis=ergebnis/operand;
    			}
    			cout << ergebnis;
    			break;
    
    case 'c':	
    			ergebnis = 0;
    			cout << ergebnis;
    			break;
    case 'e':	break;
    
    case '!':	
    			if(ergebnis < 0.0)
    			{
    				cout << "Bitte natuerliche Zahl verwenden\n";
    			}else
    			{
    			KOoperand = ganzZahl(ergebnis);
                 if(ergebnis != KOoperand) 
                 {
                   cout << "Bitte natuerliche zahl verwenden\n";
                   }else
                        {
    
                          fergebnis = (fakultaet((int)ergebnis)); 
                          if (fergebnis == INT_OVERFLOW)
                          {
                                        cout << "Zahl war zu gross, bitte kleinere Zahlen verwenden\n" << ergebnis;
                                        }
                                        else
                                        {
                                            ergebnis = fergebnis;
                                            cout << ergebnis;
                                            }
    			   }
    			}
    break;
    
    case '^':	cin >> operand;
    			KOoperand = ganzZahl(operand); 
    			if(operand != KOoperand)		  
    			{
    				cout << "Ganzzahl verwenden\n";
    			}else
    			{
    
    			ergebnis = potenz((int)ergebnis, (int)operand);
    			}
    			cout << ergebnis;
    			break;
    
    default:	cin >> operand;
    			cout << "Falsche Operation -> " << Operator << " " << operand << endl;
    			cout << ergebnis;
    
    }
    }while(Operator != 'e');
    
    }
    

    Bei einen anderen Komillitonen von mir geht es nämlich ohne und ich kann einfach keinen Unterschied finden 🙂



  • Hallo

    Kein Wunder wenn du die Zahl als double ausgibst. Dabei gibt ja sogar deine Fakultät-Funktion int zurück, die Umwandlung in double ist gar nicht nötig.

    bis bald
    akari



  • oh man, genau! vielen Dank! 😉



  • ehm gib mal bei deiner potenz-Funktion 0 ein.

    Aja die FUnktionen kannst du dir auch einfach aus <cmath> nehmen ^^ std::pow ist power (Potenz) ...


Anmelden zum Antworten