C++/Kleiner Taschenrechner in der Konsole

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C++/Kleiner Taschenrechner in der Konsole

    Hii Leute,

    ich habe mich dran gegeben einen kleinen Taschenrechner zu coden in C++ 2008
    Hier der entsprechende Code meiner Headerdatei
    #include<iostream>

    using namespace std;


    void addieren(){
    cout << " Sie haben sich zum addieren entschieden." << endl;

    cout << " Zahl 1:" << endl;
    double zahl1;
    cin >> zahl1;

    cout << " Zahl 2:" << endl;
    double zahl2;
    cin >> zahl2;

    double Summe = zahl1+zahl2;
    cout << " Ergebniss : " << Summe << endl;

    }

    void subtrahieren(){
    cout << " Sie haben sich zum subtrahieren entschieden." << endl;

    cout << " Zahl 1 : "
    << endl;
    double subtrahierenzahl1;
    cin >> subtrahierenzahl1;

    cout << " Zahl 2 : "
    << endl;
    double subtrahierenzahl2;
    cin >> subtrahierenzahl2;

    double Lösung = subtrahierenzahl1+subtrahierenzahl2;
    cout << " Ergebniss : "
    << Lösung << endl;
    }

    int main (){
    cout << " Herzlich Willkommen zum Taschenrechner." << endl;
    cout << " 1. Addieren " << endl;
    cout << " 2. Subtrahieren. " << endl;
    cout << " 3. Multiplizieren." << endl;
    cout << " 4. Diffidieren." << endl;

    int zahlenaddieren;
    cin >> zahlenaddieren;

    if (zahlenaddieren==1){

    addieren();
    }

    int zahlensubtrahieren;
    cin >> zahlensubtrahieren;

    if (zahlensubtrahieren==2){
    subtrahieren();
    }
    }

    Wie ihr seht bin ich noch nicht ganz fertig, aber es funktioniert soweit auch schon alles, aber wenn wenn ich jetzt zum subtrahieren die Zahl 2 eingeben will muss ich dies 2mal machen ???


    Warum ist das so ??
    Wie ändere ich den Code das ich nur noch einmal die 2 eingeben muss

    mfg
    sky-guy
    C++

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sky-guy ()

  • Also erstmal:
    Es ist keine Header-Datei!
    Bitte benutze Codetags!

    Zu der Lösung:
    Vergleiche folgenden Code mit deinem Code:

    Quellcode

    1. #include<iostream>
    2. using namespace std;
    3. void addieren(){
    4. cout << " Sie haben sich zum Addieren entschieden." << endl;
    5. cout << " Zahl 1: ";
    6. double summand1;
    7. cin >> summand1;
    8. cout << endl << " Zahl 2: ";
    9. double summand2;
    10. cin >> summand2;
    11. double Summe = summand1+summand2;
    12. cout << endl << " Ergebnis: " << Summe << endl;
    13. }
    14. void subtrahieren(){
    15. cout << " Sie haben sich zum Subtrahieren entschieden." << endl;
    16. cout << " Zahl 1 : ";
    17. double minuend;
    18. cin >> minuend;
    19. cout << endl << " Zahl 2 : " ;
    20. double subtrahend;
    21. cin >> subtrahend;
    22. double Differenz = minuend-subtrahend;
    23. cout << endl << " Ergebnis : " << Differenz << endl;
    24. }
    25. int main (){
    26. cout << " Herzlich Willkommen zum Taschenrechner." << endl;
    27. cout << " 1. Addieren " << endl;
    28. cout << " 2. Subtrahieren. " << endl;
    29. cout << " 3. Multiplizieren." << endl;
    30. cout << " 4. Diffidieren." << endl;
    31. int Eingabe=0;
    32. cin >> Eingabe;
    33. if (Eingabe==1){
    34. addieren();
    35. }
    36. else if (Eingabe==2){
    37. subtrahieren();
    38. }
    39. else
    40. {
    41. cout << endl << "FALSCHE EINGABE" << endl;
    42. }
    43. }
    Alles anzeigen


    Zum Einen ist dein Schreibstil echt schlimm, zum anderen ist dieser "Taschenrechner" viel einfacher zu programmieren.
    Das wesentliche:
    -Wenn man subtrahiert wird auch subtrahiert, nicht addiert!
    -Du darfst nur einmal cin benutzen, mit einer Variablen die die Auswahl bestimmt.
    -Nutze nicht nur If, else if sowie else ist auch noch da. Das ganze lässt sich auch mit swithc & case realisieren.

    MfG
    Check
  • Das simpelste was man ohne Funktionen machen kann:

    Quellcode

    1. #include <iostream> //iostream einbinden
    2. #include <Windows.h> //Windows.h einbinden
    3. using namespace std;
    4. int main() //Hauptthread
    5. {
    6. int auswahl=0; //Auswahl
    7. float zahl1=0.f; //zahl1 einer Aufgabe /* Ob 0.f oder
    8. float zahl2=0.0f; //zahl2 einer Aufgabe 0.0f ist egal */
    9. bool schleife=true; //Schleife noch am laufen oder nicht?
    10. while(schleife) //Schleife
    11. {
    12. system("cls"); //Bildschirm leeren
    13. cout << " Rechner" << endl;
    14. cout << "1 - Addition" << endl;
    15. cout << "2 - Subtraktion" << endl;
    16. cout << "3 - Multiplikation" << endl;
    17. cout << "4 - Division" << endl;
    18. cout << "5 - Beenden" << endl;
    19. cout << "Auswahl: ";
    20. cin >> auswahl; //Auswahl eingeben
    21. switch(auswahl) //Fokus auf Auswahl
    22. {
    23. case(1): //Wenn Auswahl == 1 dann
    24. {
    25. cout << endl << "Summand 1: ";
    26. cin >> zahl1; //Summand 1 eingeben
    27. cout << endl << "Summand 2: ";
    28. cin >> zahl2; //Summand 2 eingeben
    29. cout << endl << "Aufgabe: " << zahl1 << "+" << zahl2 << "=" << (zahl1+zahl2) << endl; // Aufgabe und dann Ergebnis ausgeben
    30. zahl1=0; //Beide Zahlen
    31. zahl2=0; //zuruecksetzen
    32. Sleep(1500); //Pausieren fuer 1,5sek
    33. }break;
    34. case(2): //Wenn Auswahl == 2 dann
    35. {
    36. cout << endl << "Minuend: ";
    37. cin >> zahl1; //Minuend eingeben
    38. cout << endl << "Subtrahend: ";
    39. cin >> zahl2; //Subtrahend eingeben
    40. cout << endl << "Aufgabe: " << zahl1 << "-" << zahl2 << "=" << (zahl1-zahl2) << endl; //Aufgabe ausgeben und dann das Ergebnis
    41. zahl1=0; //Beide Zahlen
    42. zahl2=0; //zuruecksetzen
    43. Sleep(1500); //Pausieren fuer 1,5sek
    44. }break;
    45. case(3): //Wenn Auswahl == 3 dann
    46. {
    47. cout << endl << "Faktor 1: ";
    48. cin >> zahl1; //Faktor 1 eingeben
    49. cout << endl << "Faktor 2: ";
    50. cin >> zahl2; //Faktor 2 eingeben
    51. cout << endl << "Aufgabe: " << zahl1 << "*" << zahl2 << "=" << (zahl1*zahl2) << endl; //Aufgabe ausgeben und dann das Ergebnis
    52. zahl1=0; //Beide Zahlen
    53. zahl2=0; //zuruecksetzen
    54. Sleep(1500); //Programm fuer 1,5sek einfrieren
    55. }break;
    56. case(4): //Wenn Auswahl == 5 dann
    57. {
    58. cout << endl << "Dividend: ";
    59. cin >> zahl1; //Dividend eingeben
    60. cout << endl << "Divisor: ";
    61. cin >> zahl2; //Divisor eingeben
    62. cout << endl << "Aufgabe: " << zahl1 << ":" << zahl2 << "=" << (zahl1/zahl2) << endl; //Aufgabe ausgeben und dann das Ergebnis
    63. zahl1=0; //Beide Zahlen
    64. zahl2=0; //zuruecksetzen
    65. Sleep(1500); //Pausieren fuer 1,5sek
    66. }break;
    67. case(5): //Wenn Auswahl == 5 dann
    68. {
    69. schleife=false; //Aus Schleife raus gehen
    70. }break;
    71. default: //Wenn Auswahl == Irgendwas Anderes dann
    72. {
    73. cout << "FALSCHE EINGABE" << endl; //Fehlermeldung
    74. }
    75. }
    76. }
    77. return (0); //0 als Rueckgabewert senden um Programm zu schließen
    78. }
    Alles anzeigen


    Das wäre sehr simpel, wie erwähnt. Mit Funktionen würden sich Rückgabewerte lohnen.
    Also mal als Pseudocode:

    Quellcode

    1. ...
    2. //Parameter
    3. double addieren(double summand1, double summand2);
    4. double subtrahieren(double minuend, double subtrahend);
    5. double multiplizieren(double faktor1, double faktor2);
    6. double dividieren(double dividend, double divisor);
    7. ...
    8. ...
    9. cout << endl << "Aufgabe: " << zahl1 << "+" << zahl2 << "=" << addieren(zahl1, zahl2) << endl;
    10. ...
    11. cout << endl << "Aufgabe: " << zahl1 << "-" << zahl2 << "=" << subtrahieren(zahl1, zahl2) << endl;
    12. ...
    13. cout << endl << "Aufgabe: " << zahl1 << "*" << zahl2 << "=" << multiplizieren(zahl1, zahl2) << endl;
    14. ...
    15. cout << endl << "Aufgabe: " << zahl1 << "/" << zahl2 << "=" << dividieren(zahl1, zahl2) << endl;
    16. ...
    17. ...
    18. double addieren(double summand1, double summand2)
    19. {
    20. return (summand1+summand2);
    21. }
    22. double subtrahieren(double minuend, double subtrahend)
    23. {
    24. return (minuend-subtrahend);
    25. }
    26. double multiplizieren(double faktor1, double faktor2)
    27. {
    28. return (faktor1*faktor2);
    29. }
    30. double dividieren(double dividend, double divisor)
    31. {
    32. return (dividend/divisor);
    33. }
    Alles anzeigen


    MfG
    Check
  • Gib mal in die Suche hier im Forum "Taschenrechner C" ein.

    Da sollten viele Lösungen angezeigt werden. Teilweise elegant, teilweise auch weniger gut, aber auf jeden Fall viel Anschauungsmaterial. Wenn das nicht reicht, kannst du ja noch im Netz suchen :D

    Quelltext formatieren bitte -> C oder C++ Quelltext mit Maus markieren und anschliessend unten den 2. Button C&C++ drücken.

    MfG bcc-fan
  • hmm also rein theoretisch, wenn es nicht sein muss mit der Auswahl, lang auch folgendes..

    Quellcode

    1. /**************************************
    2. * kleiner Taschenrechner
    3. *
    4. */
    5. #include <iostream>
    6. using namespace std;
    7. int main()
    8. {
    9. double zahl1, zahl2;
    10. char rechenzeichen;
    11. cout << "Bitte geben Sie ein: Zahl Rechenzeichen Zahl" << endl;
    12. cin >> zahl1 >> rechenzeichen >> zahl2;
    13. switch(rechenzeichen)
    14. {
    15. case '+':
    16. cout << "=" << (zahl1 + zahl2) << endl;
    17. break;
    18. case '-':
    19. cout << "=" << (zahl1 - zahl2) << endl;
    20. break;
    21. case 'x':
    22. case 'X':
    23. case '*':
    24. cout << "=" << (zahl1 * zahl2) << endl;
    25. break;
    26. case ':':
    27. case '/':
    28. cout << "=" << (zahl1 / zahl2) << endl;
    29. break;
    30. default:
    31. cout << "Tut mir leid, dieses Zeichen kenne ich nicht." << endl;
    32. }
    33. cin.ignore();
    34. cin.get();
    35. }
    Alles anzeigen
    .

    oder was sagt Ihr dazu?
  • Ein for-Endlos sieht so aus:

    Quellcode

    1. for( ; ; )


    :thumbup:

    Aber für ein Taschenrechner ist eine Endlosschleife meiner Meinung nach nicht eine vernünftige Lösung. Denn beschreibt mal wie ihr euer Taschenrechnerprogramm beenden wollt? Wollt ihr die Spannungsversorgung zu eurem Rechner kappen? Oder fällt euch noch etwas besseres ein?

    Ja mir sind einige Lösungen bekannt 8)

    MfG bcc-fan

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bcc-fan ()

  • oki habe jetzt eine for schleife eingebaut.

    Quellcode

    1. /**************************************
    2. * kleiner Taschenrechner
    3. *
    4. */
    5. #include <iostream>
    6. using namespace std;
    7. int main()
    8. {
    9. double zahl1, zahl2;
    10. char rechenzeichen;
    11. for(int i=0; i<10;) // Schleife, damit man erneut gefragt wird.
    12. {
    13. cout << "Bitte geben Sie ein: Zahl Rechenzeichen Zahl" << endl;
    14. cin >> zahl1 >> rechenzeichen >> zahl2;
    15. switch(rechenzeichen)
    16. {
    17. case '+':
    18. cout << "=" << (zahl1 + zahl2) << endl;
    19. break;
    20. case '-':
    21. cout << "=" << (zahl1 - zahl2) << endl;
    22. break;
    23. case 'x':
    24. case 'X':
    25. case '*':
    26. cout << "=" << (zahl1 * zahl2) << endl;
    27. break;
    28. case ':':
    29. case '/':
    30. cout << "=" << (zahl1 / zahl2) << endl;
    31. break;
    32. default:
    33. cout << "Tut mir leid, dieses Zeichen kenne ich nicht." << endl;
    34. }
    35. }
    36. cin.ignore();
    37. cin.get();
    38. }
    Alles anzeigen


    Als nächstes versuche ich eine Abfrage mit einzubauen am Ende.

    So wie, "Wollen Sie den Taschenrechner beenden: Ja/Nein"
    Bei nein erfolgt halt die schleife und bei ja soll er sich schließen.

    Weiß nur noch nicht so recht wie :D Ich teste mal ein wenig :)

    Edit: ich habe gerade ein Problem festgestellt. Die schleife scheint wohl einen fehler zu haben.
    Wenn ich z.B zahlen eingebe mit , also 3,6 + 3,5
    dann gibt er mir endlos aus :
    "Tut mir leid, dieses Zeichen kenne ich nicht"

    jemand eine idee wo der fehler ist?

    Edit2:
    liegt daran das man einen punkt machen muss. Dann klappts auch.
    Aber wie kann ich dafür sorgen das er bei falscher eingabe mit dem , nur 1x ausgibt "Tut mir leid, dieses Zeichen kenne ich nicht"
    Bei anderen zeichen z.B 6 ü 6 zeigt er es nur 1x an wie es auch soll.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Pl0x ()

  • Quellcode

    1. /**************************************
    2. * kleiner Taschenrechner
    3. *
    4. */
    5. #include <iostream>
    6. using namespace std;
    7. void trechner()
    8. {
    9. double zahl1, zahl2;
    10. char rechenzeichen;
    11. {
    12. cout << endl << "Bitte geben Sie ein: Zahl Rechenzeichen Zahl" << endl;
    13. cin >> zahl1 >> rechenzeichen >> zahl2;
    14. switch(rechenzeichen)
    15. {
    16. case '+':
    17. cout << "=" << (zahl1 + zahl2) ;
    18. break;
    19. case '-':
    20. cout << "=" << (zahl1 - zahl2);
    21. break;
    22. case 'x':
    23. case 'X':
    24. case '*':
    25. cout << "=" << (zahl1 * zahl2);
    26. break;
    27. case ':':
    28. case '/':
    29. cout << "=" << (zahl1 / zahl2);
    30. break;
    31. default:
    32. cout << "Tut mir leid, dieses Zeichen kenne ich nicht.";
    33. }
    34. cout << endl;
    35. }
    36. // cin.ignore();
    37. // cin.get();
    38. }
    39. int main()
    40. {
    41. char menu;
    42. do
    43. {
    44. cout << "Sie haben die Wahl: " << endl;
    45. cout << "e -> Ende" << endl;
    46. cout << "t -> Taschenrechner" << endl;
    47. cin >> menu;
    48. switch(menu)
    49. {
    50. case 'e':
    51. cout << endl;
    52. break;
    53. case 't':
    54. trechner();
    55. break;
    56. default:
    57. cout << "Nicht implementiert" << endl;
    58. }
    59. }while( menu != 'e');
    60. }
    Alles anzeigen


    :sleeping:
  • Hallöchen ich wollte nocheinmal zur for schleife zurück kommen..

    Quellcode

    1. for(int i = 0;i < 10;i++)
    2. {


    beim taschenrechner, funktioniert diese schleife auch. Warum nimmt man dafür

    Quellcode

    1. i < 10
    ist klar es soll an dieser stelle eine Bedingung rein.
    Aber das gleich funktioniert auch mit

    Quellcode

    1. for(int i = 0;i < 5;i++)
    oder jeder anderen zahl die ich genommen habe außer 0.

    Ist es in diesem falle egal ob dort eine 10, 5 oder 8 drinne steht`Ich habe bisher den sinn dieser Zahl leider nicht verstanden.
  • Das Bestimmt wie oft deine Schleife wiederholt wird....
    Wenn du jetzt die Schleife hast:

    Quellcode

    1. for(int i=0; i<7; i++)

    Dann wäre das in Zahlen jetzt so:
    0<7; 0++;
    1<7; 1++;
    2<7; 2++;
    3<7; 3++;
    4<7; 4++;
    5<7; 5++;
    6<7; 6++;
    7=7 <-was nicht die Bedingung war, also hört Schleife auf

    Das Ganze geht natürlich auch rückwärts:

    Quellcode

    1. for(int i=10; i>0; i--)

    Dann das Ganze wieder in Zahlenform:
    10>0; 10--;
    9>0; 9--;
    ....; ....;
    2>0; 2--;
    1>0; 1--;
    0=0 <- Was nicht die Bedingung war, also hört Schleife auf

    MfG
    Check