Problem mit Potenzen



  • Ich habe mal eine funktion geschrieben um potenzen zu berechnen aber es funktioniert nicht der compiler komplimiert es aber dann berechnet er das ergebnis des potenzierens nicht, hier die funktion:

    [c++] int potenz(int x, int exponent)
    {
    int i = 0;
    while(i==exponent)
    {
    x*=x;
    i++;
    }
    return x;
    }[/c++]

    wo ist da ein fehler?



  • Naja, das ist eigentlich alles falsch 😃 (Jedenfalls mehr als 50%)

    int potenz(int basis, int exponent)
    {
        int i = 0;
        int ergebnis = 1;
        while(i != exponent)
        {
            ergebnis *= basis;
            ++i;
        }
        return ergebnis;
    }
    

    So müsste es stimmen. Der größte Fehler ist natürlich das

    while(i == exponent) //bricht sofort ab
    

    anstatt

    while(i != exponent)
    

    der zweite Fehler ist das

    x *= x;
    

    Dadurch wird x nämlich immer mit sich selbst malgenommen, obwohl es im vorhergehenden Schleifendurchlauf ja schon verändert wurde. Dafür habe ich jetzt eine Hilfsvariable eingeführt.

    Felix

    EDIT: Die Hilfsvariable i könnte man sich natürlich auch sparen:

    int potenz(int basis, int exponent)
    {
        int ergebnis = 1;
        while(exponent != 0)
        {
            ergebnis *= basis;
            --exponent;
        }
        return ergebnis;
    }
    


  • #include <stdio.h>
    
    int potenz(int a, int b)
    {
      int p = 1;
    
      while (b--) {
        p *= a;
      }
      return p;
    }
    
    void main(void)
    {
      int i, j;
    
      printf("Zwei Zahlen: ");
      scanf("%d %d", &i, &j);
      printf("potenz(%d,%d)=%d\n", i, j, potenz(i, j));
    }
    

    Edit:// zu langsam



  • also wenn man schon nicht auf negative Potenzen eingeht:
    unsigned int 😉

    sonst:

    double mypow(int base, int exp) {
      if(exp > 0) {
        double result = 1.0;
        while(exp--) {
          result *= base;
        }
      }
      else if(exp==0)
        return 1.0;
      else
        return 1.0/Pow(base, -exp);
    }
    

Anmelden zum Antworten