Probleme beim Potenz berechnen mit Schleife

  • C++/CLI

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Probleme beim Potenz berechnen mit Schleife

    Hallo Leute

    ich schreibe grad mit C++ eine Taschenrechener der auch soweit funktioniert. Jetzt soll ich noch eine Funktion hinzufügen und zwar das der Taschrechner auch Potenz berechen kann. Dies soll als Schleife geschehen und genau da komm ich nicht weiter. Ich wüsste nicht wie ich die Schleife in das bereits laufende Programm reinbekomm.

    C-Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. //Deklaration der Variablen
    6. double zahl1, zahl2, ergebnis;
    7. char rechenzeichen;
    8. //Aufgabe einlesen
    9. cout << "Geben Sie die Rechnung ein mit +, -, *, /, p =Potenz \n";
    10. cin >> zahl1 >> rechenzeichen >> zahl2;
    11. // Ermitteln der Rechennung
    12. switch(rechenzeichen)
    13. {
    14. case '+': ergebnis = zahl1+zahl2; break;
    15. case '-': ergebnis = zahl1-zahl2; break;
    16. case '*': ergebnis = zahl1*zahl2; break;
    17. case '/': ergebnis = zahl1/zahl2; break;
    18. case 'p': ergebnis = (zahl1, zahl2); //ab hier habe ich die Probleme ich will die Schleife in meine switch case Anweisung einbauen.
    19. {
    20. int ergebnis = 1; // das Programm läuft so zwar gibt mir aber kein Potenz aus.
    21. while(zahl2 != 0) // auch wie ich das Rechenzeichen in die Rechnung einfüge ist mir noch schleierhaft.
    22. {
    23. ergebnis *= zahl1;
    24. --zahl2;
    25. }
    26. return ergebnis; break;
    27. }
    28. }
    29. // Ausgabe Ergebnis
    30. cout << ergebnis;
    31. return 0;
    32. }


    Ich hoffe Ihr könnt mir Helfen und erklären wo mein Fehler liegt.
    Danke schon mal im Vorraus
    Gruß
    Sebastian
    @Sebastian.Pape Wo kommt denn so eine blöde Aufgabenstellung her?
    Habt Ihr einen neu gebildeten Informatik-Lehrer?
    So was:

    C-Quellcode

    1. case 'p': //ergebnis = Math.Power(zahl1, zahl2);
    2. {
    3. double ergebnis = 1;
    4. for(int i = 0; i < zahl2; i++)
    5. {
    6. ergebnis *= zahl1;
    7. }
    8. return ergebnis;
    9. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    C-Quellcode

    1. switch(...)
    2. {
    3. //...
    4. case 'p':
    5. ...;
    6. {
    7. //...
    8. break;
    9. }
    10. }

    Das ist ein äußerst unübliches Konstrukt. Bist Du Dir darüber im klaren, wie ein switch-Block funktioniert?
    Die geschwungenen Klammern machen hier nichts, außer einen Scope abzugrezen.
    Eine Schleife in einem switch-Block würde man z.B. so hinschreiben:

    C-Quellcode

    1. switch (...)
    2. {
    3. case ...:
    4. //...
    5. break;
    6. case ...:
    7. for (...)
    8. {
    9. }
    10. break;
    11. case ...:
    12. //...
    13. break;
    14. }


    ergebnis = (zahl1, zahl2); ist sicher auch nicht gewollt. Alle (durch Komma getrennte) Ausdrücke in der Klammer werden ausgewertet (was bei einfachen Variablen keinen Effekt hat), aber bis auf den letzten werden die Ergebnisse verworfen. Die Klammer evaluiert dann zum letzten Ausdruck (in diesem Fall zahl2). Du hättest effektiv auch einfach ergebnis = zahl2; hinschreiben können und es wäre aufs gleiche gekommen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @RodFromGermany
    das frag ich mich auch wenn ich das mit "include math.h" machen könnte kann ich die Potenz mit "Pow" ausgeben. Aber so steht halt in der Aufgabe: Erweitern Sie den Taschenrechner so, dass er Potenz berechnen kann. Erstellen Sie für das Berechnen eine eigene Funktion. Die Potenz soll durch eine Schleife errrechnet werden.
    Würde der Taschenrechener nur Potenz berechenen ist das ja kein Problem aber da ich den ja erweitern soll muss ich die Schleife eben einbauen und da Blick ich net durch.
    Wenn ich deinen Code eingebe bekomm ich auch einen Fehler da Math.Power nicht übersetzt werden kann.
    @Niko Ortner
    Wie gesagt mit der Schleife hab ich da noch meine Probleme da muss ich nochmal ran...
    Du baust den Code, der für eine Funktion vorgesehen ist, in deine Methode direkt ein.
    Du brauchst weder den Funktionskopf noch ein return.
    Die elegantere Methode mit for statt while hat ja @RodFromGermany schon vorgeschlagen.

    C-Quellcode

    1. case 'p':
    2. {
    3. for(int i = 0; i < zahl2; i++)
    4. {
    5. ergebnis *= zahl1;
    6. }
    7. break;
    8. }
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Sebastian.Pape schrieb:

    Wenn ich deinen Code eingebe bekomm ich auch einen Fehler da Math.Power nicht übersetzt werden kann.
    Math.Power ist in meinem Snippet auskommentiert, es soll Dir zeigen, wie meine Implementierung zu verstehen ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!