Taschenrechner mit hoch (^)



  • Hallo zusammen!
    Wenn ich mir die anderen Threads durchlese, dann ist mir meine Frage schon beinahe peinlich weil sie so leicht erscheint.
    Aber ich fange grade erst an mit dem programmieren und hoffe ihr könnt mir helfen.

    ich möchte mit dem C++ Builder (Trial '09) einen Taschenrechner erstellen, der mir bis jetzt eig. ganz gut gelungen ist.
    Dennoch scheitere ich an dem Versuch das "Hoch" neben den Grundrechenarten einzubauen.
    Meinen Quelltext füge ich mal an, das einzige was er zur zeit macht ist, das er die erste eingegebene zahl (GrundRechenArten.a) mit sich selbst einmal multipliziert.
    (das ganze GrundRechenArten - zeugs kommt davon, das ich die funktionen ausgelagert und eine neue klasse erstellt habe, um erfahrung damit zu sammeln.

    int TGrundRechenArten::hoch (int a, int b)
    {
    int c = 1;
    GrundRechenArten.a = StrToInt (Form1 ->Edit1 -> Text);
    GrundRechenArten.b = StrToInt (Form1 ->Edit2 -> Text);
    int d = GrundRechenArten.a;
    if (c != GrundRechenArten.b) {
    d = d*GrundRechenArten.a;
    GrundRechenArten.b = GrundRechenArten.b - 1;
    }
    Form1 ->Edit3 ->Text = d;
    }

    über eine antwort würde ich mich freuen!

    mfg
    aimless



  • #include <cmath>

    und
    x = a hoch b
    geht dann mit
    x = std::pow(a,b);



  • nach der Überarbeitung des Quellcodes kommt jetzt leider diese Meldung beim Compillieren:

    [BCC32 Fehler] auslagern.cpp(67): E2015 Mehrdeutigkeit zwischen 'std::pow(long double,int) at c:\programme\codegear\rad studio\6.0\include\math.h:293' und 'std::pow(double,int) at c:\programme\codegear\rad studio\6.0\include\math.h:273'

    Der Code sieht jetzt so aus, steckt da vllt der Fehler?:

    int c;
    GrundRechenArten.a = StrToInt (Form1 ->Edit1 -> Text);
    GrundRechenArten.b = StrToInt (Form1 ->Edit2 -> Text);
    c = std::pow(GrundRechenArten.a, GrundRechenArten.b);
    Form1 ->Edit3 ->Text = c;

    mfg aimless



  • int TGrundRechenArten::hoch (int a, int b) 
    { 
    int c = 1; 
    GrundRechenArten.a = StrToInt (Form1 ->Edit1 -> Text); 
    GrundRechenArten.b = StrToInt (Form1 ->Edit2 -> Text); 
    int d = GrundRechenArten.a; 
    [b]if (c != GrundRechenArten.b) [/b]{ 
    d = d*GrundRechenArten.a; 
    GrundRechenArten.b = GrundRechenArten.b - 1; 
    } 
    Form1 ->Edit3 ->Text = d; 
    }
    

    bei einer if-anweisung geht man nur einmal die ganze Sache durch, darum multipliziert er nicht c mal mit sich selbst, sondern nur einmal.
    Darum hast du lediglich eine 2er Potenz... hoffe dies hilft dir 🙂

    edit: Dein fehler kommt daher, dass der compiler nicht weiß, welche funktion er anwenden soll. Soll er die Funktion mit den Parametern (long double, int) oder mit (double, int) nutzen. vllt. könnte man dort casten
    also

    c = std::pow((double)GrundRechenArten.a, GrundRechenArten.b)
    

    sicher bin ich mir dabei nicht.



  • und wie das geholfen hat 😉

    kurz nach deinem post lam der geistesblitz.
    einfach am Ende der schleife eine goto-anweisung drangeklatscht und ferig, jetzt läufts.
    danke für die tipps, kann geschlossen werden!



  • aimless schrieb:

    und wie das geholfen hat 😉

    kurz nach deinem post lam der geistesblitz.
    einfach am Ende der schleife eine goto-anweisung drangeklatscht und ferig, jetzt läufts.
    danke für die tipps, kann geschlossen werden!

    hm... goto ist glaube immer etwas unsauber (sollte man aus lesbarkeit vermeiden).
    Deine if-Anweisung ist im übrigen keine Schleife, sondern nur eine Verzweigung 😉
    Wollte eigentlich auf while/for-schleife anspielen.
    Aber dies wäre nur schönheits-meckern *g*


Log in to reply