Potenz in C++



  • :Daniel: schrieb:

    Also ich hab

    int my_pow(int base, int exponent)
    {
        // 2*2
      for(int result = 1; result >= exponent; result *= base)
      return result;
    }
    /* ... */
    

    geschrieben,doch ich verstehe echt nicht wie das funktioniert..

    Das funktioniert so auch nicht. Die main()-Funktion ist in Ordnung, aber my_pow hat noch einen Bug.
    Deine for-Schleife hat als Rumpf den Befehl "return result;". Das wird exakt einmal ausgeführt, weil ein return die Funktion sofort beendet. Vermutlich wolltest du noch ein Semikolon hinter das for(...) setzen.

    Die Abbruchbedingung ist aber auch seltsam: Solange result >= exponent ist, mache result*=base. Die Beziehung zwischen result und exponent spielt hier aber gar keine Rolle. exponent ist eine Zahl, und dein Ziel ist es den Befehl "result *= base;" so oft auszuführen, wie diese Zahl angibt. Wenn exponent z.B. 5 ist, dann muss 5 Mal der Befehl "result *= base;" ausgeführt werden.

    Wie sieht das Standard-Vorgehen für eine Schleife aus, die n Mal ausgeführt wird?



  • hi,

    danke für deine Antwort 😉
    Also ich würde das gerne so machen(weiß aber nicht wie),sodass "base" so oft multipliziert wird,wie es der Exponent angibt,also eine Potenz ist,nur kA wie ich das in C++ machen könnte.

    Christoph schrieb:

    Wie sieht das Standard-Vorgehen für eine Schleife aus, die n Mal ausgeführt wird?

    Bitte sag es mir,wie die Lösung auf diese Frage heisst,dann mach ich neuen Code und stell ihn wieder vor ^^

    Daniel 🙂



  • :Daniel: schrieb:

    Christoph schrieb:

    Wie sieht das Standard-Vorgehen für eine Schleife aus, die n Mal ausgeführt wird?

    Bitte sag es mir,wie die Lösung auf diese Frage heisst,dann mach ich neuen Code und stell ihn wieder vor ^^

    for(int i = 0; i < n; ++i) {...}
    

    Ich verschieb das mal nach C++, weil du damit anscheinend mehr Probleme als mit Mathematik hast.



  • Dieser Thread wurde von Moderator/in Christoph aus dem Forum Mathematik in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die Fehler waren zunächst, dass die Eingabe überprüft nicht wurde und danach, dass du den falschen Wert multipiziert hast: Die Variable iar anfangs 0 und dann wird mit ihr multipliziert==> Das ergebnis wird immer null sein.

    Das was ich anzumerken habe, war, dass du das "==" Zeichen (anstatt "<="/ ">=")in der For-Bedingung benutzt (eigendtlich kein Fehler aber, falls du kompliziertere Algorithmen erstellen solltest ist das eine mögliche Fehlerquelle)

    Den besseren Weg,wenn du nur Zweierpotenzen benutzen wolltest(so wie es in dem ersten Beitrag stand) ist folgendes:

    int /*BYTE*/ shift;
    cin >> shift;
    if (shift >= 0 && shift <= 0x40 /*kann auch was anderes sein*/)
    long result = 0x01 << shift;
    else
    cout << "Wrong input";
    

    Außerdem hatte ich das "Kommentar" und den cpp-Code-tag nicht brücksichtigt...

    Mein Weg:

    // "int b": Die Basis
    // "char e": Der Exponent
    long my_pow(int b, char e)
    {
      if (e > 0x40) /* oder etwas anderes */
        return 0; // oder melde Fehler
    
      /* bei "int e"
      if (e < 0)
        return 0; // oder melde Fehler
    
      if (b == 0)
        return 0;
    
      if (c == 1) /* Fehler korrigert, siehe nächsten Post */
        return b;
    
      for(long i = 2, r = 1; i++ > e; r *= b);
      return r;
    }
    

    Mit freundlichen Grüßen
    Rhombicosidodecahedron

    ^Fehler: |^



  • Und noch ein Fehler in der Schleife...

    Hier die richtige Lösung:

    for(int i = 1, r = 1; i <= e; r *= b; i++);
      return r;
    


  • Th schrieb:

    Und noch ein Fehler in der Schleife...

    Hier die richtige Lösung:

    for(int i = 1, r = 1;/*1*/ i <= e;/*2*/ r *= b;/*3*/ i++);
      return r;
    

    Drei Semikolions sind nicht erlaubt 😉 ... richtig ...richtig relativ

    Aber danke



  • hi

    danke,aber das funktioniert noch immer nicht:

    int e = 2;
        int b = 5;
        int i = e = 2;
        for(int i = 1, r = 1; i <= e; r *= b, i++);
        cout<<i;
    

    habs nähmlich in main() geschrieben,um eine Funktion daweil zu vermeiden.
    was ist überhaupt r?





  • r steht hier wohl fuer resultat, also musst du auch cout<<r schreiben.

    Etwas expliziter:

    int exponent=6;
    int resultat=1;
    int basis=4;
    for(int i=0;i<exponent;++i)
     resultat=resultat*basis;
    
    cout<<resultat;
    

    So besser verstaendlich?

    EDIT: Das entspraeche jetzt 4^6.


Anmelden zum Antworten