Fehler im Programm

Rene42

Erfahrenes Mitglied
Hi Leute,

ich verwende folgenden Code:

PHP:
//Absolut
float Abs(float a)
      {
       if(a<0)
         {
          a=-a;
         }
        return a;
      }


//Potenzieren
float Potenz(float a, int b)
      {
       //Variabeln bestimmen
       int e = Abs(b);
       int i = 0;
       int x = 1;
       //Multiplikation ausführen
       do
         {
           x = x * a;
           i++;
         } while(i<e);
       //Falls negativer Exponent
       x = 1 / x;
       //Falls b Null ist
       if(b==0)
         {
          x = 1;
         }
       //Wert zurückgeben
       return x;
      }

Ärgerlicherweise gibt folgende Zeile:

PHP:
cout << "2 hoch 4 ist: " << Potenz(2,4) << endl;

2 hoch 4 i ist: 0

zurück.

Leider weiss ich nicht wie es zu der Rückgabe kommt. Ich kann mir nicht erklären wie die Funktion 0 zurückgeben kann.
Hoffe einfach es hilft wenn mal wer anders draufguckt.

Gruß Rene
 
Öhm wenn ich das gerade auf die schnelle richtig analysiert habe wir folgendes auf jeden fall ausgeführt :

x = 1/x;

So wenn x>1 ist, dann ist x irgendwas mit 0,xxx. Dein Programm macht dann daraus 0. Also schneidet den Rest ab, da x int ist.
Du müsstest vorher in einer if klären ob du nun einen neg oder pos Exponenten hast.

Gruß
 
Ausserdem solltest du prüfen ob a 0 ist. Ansonsten hast du ein Problem bei 1 / x. Division durch 0 wird vom OS nicht akzeptiert.
 
Moin,

weiterhin übergibst Du Deiner Deiner "abs"-Funktionen einen Integer !
Sie ist aber so deklariert, dass ein float-Wert erwartet und auch zurückgegeben wird :eek:

Gruß
Klaus
 
Hi Leute,

danke erstmal für die guten Vorschläge:

habe die Funktion Abs() geändert, sodass sie int erwartet und int zurückgibt. Auch die Zeile bezüglich des Exponenten habe ich angepasst, wie konnte ich dort nur das if vergessen - keinen Schimmer

PHP:
       //Falls negativer Exponent
       if(b<0)
         {
          x = 1 / x;
         }

Jedoch gibt der Funktionsaufruf
PHP:
Poten(2,4)
immer noch Null zurück :(

Jemand noch eine Idee vorran das liegen könnte....

Gruss Rene
 
Poste am besten nochmals kurz deinen ganzen Code damit man genau sieht, was du geändert hast.

Ausserdem würde ich noch bisschen auf korrekte Einrückungen achten, das erleichtert einem das Fehlerfinden enorm!
 
Jo ok, hier noch mal der komplette Code, ich bildete mir ein bereits sinnvoll eingerückt zu haben, was schlägst du korrigierend vor....


PHP:
//Absolut
int Abs(int a)
      {
       if(a<0)
         {
          a=-a;
         }
        return a;
      }


//Potenzieren
float Potenz(float a, int b)
      {
       //Variabeln bestimmen
       int e = Abs(b);
       int i = 0;
       float x = 1;
       //Multiplikation ausführen
       do
         {
           x = x * a;
           i++;
         } while(i<e);
       //Falls negativer Exponent
       if(b<0)
         {
          x = 1 / x;
         }
       //Falls b Null ist
       if(b==0)
         {
          x = 1;
         }
       //Wert zurückgeben
       return x;
      }
 
Das kann doch nicht wahr sein :eek:

so ruf ich den Code auf

PHP:
using namespace std;

int main(int argc, char *argv[])
{
    cout << "2 hoch 4 ist: " << Potenz(2,4) << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

und bei mir kommt null raus :confused:

Gruss Rene
 
Hi

:offtopic:
Dein Programm würde übrigens bei
Code:
Potenz(2,4)
und
Code:
Potenz(2,-4)
in beiden Fällen 16 liefern.

2^(-4) ergibt jedoch 0.0625
Zur Berechnung von Potenzen ist das Programm so weniger geeignet. Wenn du willst, dass nur postive Potenzen übergeben werden können sollen, solltest du als Datentyp eher uint nutzen. Ansonsten verhält sich das Programm nicht wie erwartet.


//EDIT
Hast du mal debuggt um zu schauen, wo das Programm sich anders verhält als erwartet?
 
Zurück