bin ich vollkommen bescheuert, oder was? eine funktion zum errechnen von exponenten



  • #include <iostream>
    using namespace std;
    
    int main()
    {
    	int a, b, c;
    
    	cout << "zahl: ";
    	cin  >> a;
    	cout << "exponent: ";
    	cin  >> b;
    
    	while(b>1)
    	{
    		a = a * a;
    		b--;
    	}
    
    	cout << "\n\nergebnis: ";
    	cout << a;
    
        return 0;
    }
    

    hab ichn blackout, oder warum kommt da immer 0 raus?

    HILFE! Was mach ich falsch?

    Mr. B



  • Mr. B schrieb:

    hab ichn blackout, oder warum kommt da immer 0 raus?

    Du bekommst etwas undefiniertes raus.
    aber vermutlich initialisiert dein compiler variablen standardmaessig mit 0
    und 0*0 ist bekanntlich 0, egal wie oft du es mit 0 multiplizierst.

    btw: potentieren tut man trotzdem anders 😉



  • Mr. B schrieb:

    #include <iostream>
    using namespace std;
    
    int main()
    {
     int a, b, c;
    
     cout << "zahl: ";
     cin  >> a;
     cout << "exponent: ";
     cin  >> b;
    
     while(b>1)
     {
      a = a * a;
      b--;
     }
    
     cout << "\n\nergebnis: ";
     cout << a;
    
        return 0;
    }
    

    hab ichn blackout, oder warum kommt da immer 0 raus?

    HILFE! Was mach ich falsch?

    Mr. B

    Es kommt nicht immer 0 raus. Bei Zahl 2 und Exponent 3 kommt 16 raus.
    Du potenzierst hier aber nicht sondern rechnest a(2(b-1))



  • ok, aber jetzt mal abegesehen davon, dass ich nicht potenziere (ah, jetzt fällt mir der begriff wieder ein) :), wieso kriege ich etwas undefiniertes raus? ich mein, ich gebe für a im programm 2 ein, dann dürfte doch nicht 0 rauskommen, weil 2*2 eben 4 und nich null is.



  • Integer Overflow



  • du kannst deinen code auf das hier runterkürzen:

    std::cout << 65536 * 65536 << std::endl;
    

    Bei mir ergibt das 0.



  • Ponto schrieb:

    Du potenzierst hier aber nicht sondern rechnest a(2(b-1))

    Wie kommst du auf "a(2(b-1))"???????

    Mr. B



  • Mr. B schrieb:

    Ponto schrieb:

    Du potenzierst hier aber nicht sondern rechnest a(2(b-1))

    Wie kommst du auf "a(2(b-1))"???????

    Mr. B

    Mit jedem Schleifendurchlauf quadrierst Du a, deshalb ist
    1. a = aa
    2. a = (a*a)*(a
    a)
    3. a= (a*a*a*a) * (a*a*a*a)
    usw. usf.

    was Du brauchst ist

    a *= a;
    


  • Mr. B schrieb:

    Ponto schrieb:

    Du potenzierst hier aber nicht sondern rechnest a(2(b-1))

    Wie kommst du auf "a(2(b-1))"???????

    Mr. B

    Weil wenn b = 4 und a = 2 ist, rechnest du zuerst

    a = 2 * 2; // a = 4
    --b // b = 3

    in der nächsten Iteration:

    a = 4 * 4; // a = 16
    --b; // b = 2

    und in der letzten dann:

    a = 16 * 16;
    --b; // b = 1

    Das heisst du quadrierst dein a von Iteration zur Iteration. Das ist aber nicht der Sinn des Potenzierens.



  • Ein Gast schrieb:

    was Du brauchst ist

    a *= a;
    

    Fast 🙂

    Die Variable c sollte genutzt werden:

    c = a;
    while(b>1)
    {
      c = c * a;
      b--;
    }
     cout << "\n\nergebnis: ";
     cout << c;
    


  • Ich geb zu, der Code ist trotzdem ein wenig unübersichtlich, aber so klappts:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int zahl, exponent, ergebnis, temp = 1;
    
    	cout << "Geben Sie eine Zahl ein: ";
    	cin  >> zahl;
    	cout << "\nGeben Sie den Exponenten ein: ";
    	cin  >> exponent;
    
    	if(exponent == 0)
    	{	
    		cout << "\n\nErgebnis: 0";
    		return 0;
    	}
    
    	ergebnis = zahl;
    	while(temp<exponent)
    	{
    		ergebnis = ergebnis * zahl;
    		temp++;
    	}
    
    	cout << "\n\nErgebnis: " << ergebnis;
    
        return 0;
    }
    

    Danke,
    Mr. B



  • Mr. B schrieb:

    Ich geb zu, der Code ist trotzdem ein wenig unübersichtlich, aber so klappts

    immer noch nicht richtig 😃

    if (exponent == 0)
    {   
      ergebnis = 1;
    }
    


  • jetzt blamier ich mich aber 😞

    entweder das haben wir damals nicht dazu gelernt, oder ich habs vergessen.

    x^0 = 1
    x^1 = x
    x^2 = x * x

    *lern* 🙂

    Mr. B


Anmelden zum Antworten