C++ Taschenrechner Programmier-Problem

  • C++

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    C++ Taschenrechner Programmier-Problem

    Habe den folgenden Code geschrieben und finde die Fehler nicht.

    C-Quellcode

    1. #include "pch.h"
    2. #include <iostream>
    3. #include <math.h>
    4. #include <cstdlib>
    5. using namespace std;
    6. //^2 und ^3 Gleichungen
    7. int main()
    8. {
    9. int z0, z1, z2, z3, z4, z6, z7, z8, z01, z02, z03, z04, z05, z06, z07, z08, z09, z00, z11, z22, z5, divi, glei, multi, addi, subtr;
    10. cout << "Dies ist ein Taschenrechner.";
    11. cout << "\n In der nächsten Zeile findest du die Abkürzungen die du in der darauffolgenden Zeile eingeben musst, um Rechenoperationen auszuführen.";
    12. cout << "\n Addition: addi, Subtraktion: subtr, Multiplikationen: multi, Divisionen: divi, Gleichungen 2. und 3. Grades: glei";
    13. cin >> z3;
    14. if (z3 = glei) {
    15. cout << "Hier kannst du ^2 und ^3 Gleichungen lösen!";
    16. cout << "\n Bitte gib deine höchste Potenz an:";
    17. cin >> z4;
    18. cout << "\n Falls ein Fehler auftritt, überprüfe, ob die Gleichung überhaupt eine reelle Lösung hat";
    19. if (z4 == 2)
    20. {
    21. cout << "\n a=";
    22. cin >> z0;
    23. cout << "\n b=";
    24. cin >> z1;
    25. cout << "\n c=";
    26. cin >> z2;
    27. cout << (-z1 + sqrt(z1 ^ 2 - 4 * z0*z2)) / 2 * z1;
    28. cout << (-z1 - sqrt(z1 ^ 2 - 4 * z0*z2)) / 2 * z1;
    29. }
    30. if (z4 == 3)
    31. {
    32. cout << "\n a=";
    33. cin >> z0;
    34. cout << "\n b=";
    35. cin >> z1;
    36. cout << "\n c=";
    37. cin >> z2;
    38. cout << "\n d=";
    39. cin >> z5;
    40. z00 = 3 * z0;
    41. z11 = 2 * z1;
    42. z22 = z2;
    43. }
    44. if (z4 > 3)
    45. {
    46. cout << "I cannot do this on myself. You have to give me a ^2 or ^3 function";
    47. }
    48. if (z4 < 2)
    49. {
    50. cout << "I cannot do this on myself. You have to give me a ^2 or ^3 function";
    51. }
    52. }
    53. }
    54. //Additionen
    55. if (z3 == addi)
    56. {
    57. cout << "\n \n Hier kannst du Additionen ausführen lassen!";
    58. cout << "\n Gib hier die erste Zahl ein:";
    59. cin >> z6;
    60. cout << "\n Gib hier die zweite Zahl ein:";
    61. cin >> z7;
    62. cout << "\n Das ist das Ergebnis:";
    63. z8 = z6 + z7;
    64. cout << z8;
    65. return 0;
    66. }
    67. // Subtraktionen
    68. if (z3 == subtr)
    69. {
    70. cout << "\n \n Hier kannst du Subtraktionen ausführen lassen!";
    71. cout << "\n Gib hier die Zahl ein von der abgezogen werden soll:";
    72. cin >> z01;
    73. cout << "\n Gib hier die Zahl ein die abgezogen werden soll:";
    74. cin >> z02;
    75. cout << "\n Dein Ergebniss:";
    76. z03 = z02 + z01;
    77. cout << z03;
    78. return 0;
    79. }
    80. //Multiplikationen
    81. if (z3 == multi)
    82. {
    83. cout << "\n \n Hier kannst du Multiplikationen ausführen lassen!";
    84. cout << "\n Gib hier deine erste Zahl ein:";
    85. cin >> z;
    86. cout << "\n Gib hier deine zweite Zahl ein:";
    87. cin >> z2;
    88. cout << "\n Hier ist dein Ergebnis:";
    89. z06 = z04 * z05;
    90. cout << z06;
    91. return 0;
    92. }
    93. //Divisionen
    94. if (z3 == divi)
    95. {
    96. cout << "\n \n Hier kannst du Divisionen ausführen lassen!";
    97. cout << "\n Gib hier die Zahl ein die dividiert werden soll:";
    98. cin >> z07;
    99. cout << "\n Gib hier die Zahl ein durch die du dividieren willst:";
    100. cin >> z08;
    101. cout << "\n Dein Ergebnis:";
    102. z09 = z07 / z08;
    103. cout << z09;
    104. return 0;
    105. }


    Bei den Fehlermeldungen finde ich das hier:
    Spoiler anzeigen
    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler (aktiv) E0169 Es wurde eine Deklaration erwartet. ConsoleApplication1 57
    Fehler (aktiv) E0169 Es wurde eine Deklaration erwartet. ConsoleApplication1 83
    Warnung C4101 "z08": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z06": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z6": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z05": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "subtr": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z02": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z03": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z8": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "multi": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z01": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "divi": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z04": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "addi": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z09": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z07": Unreferenzierte lokale Variable ConsoleApplication1 13
    Warnung C4101 "z7": Unreferenzierte lokale Variable ConsoleApplication1 13
    Fehler C2059 Syntaxfehler: "if" ConsoleApplication1 60
    Fehler C2143 Syntaxfehler: Es fehlt ";" vor "{" ConsoleApplication1 61
    Fehler C2447 "{": Funktionsheader fehlt - Parameterliste im alten Stil? ConsoleApplication1 61
    Fehler C2059 Syntaxfehler: "if" ConsoleApplication1 73
    Fehler C2143 Syntaxfehler: Es fehlt ";" vor "{" ConsoleApplication1 74
    Fehler C2447 "{": Funktionsheader fehlt - Parameterliste im alten Stil? ConsoleApplication1 74
    Fehler C2059 Syntaxfehler: "if" ConsoleApplication1 86
    Fehler C2143 Syntaxfehler: Es fehlt ";" vor "{" ConsoleApplication1 87
    Fehler C2447 "{": Funktionsheader fehlt - Parameterliste im alten Stil? ConsoleApplication1 87
    Fehler C2059 Syntaxfehler: "if" ConsoleApplication1 99
    Fehler C2143 Syntaxfehler: Es fehlt ";" vor "{" ConsoleApplication1 100
    Fehler C2447 "{": Funktionsheader fehlt - Parameterliste im alten Stil? ConsoleApplication1 100


    Ich hoffe das mir Irgenderwer behilflich sein kann. Danke schon einmal im vorhinein.
    Lg Lucas

    *Thema verschoben und Codetags eingefügt* ~NoFear23m

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Willkommen im Forum.
    Folge den Fehlermeldungen. Ab Zeile#57 bist Du außerhalb einer Prozedur. Da ist ne } zuviel. Das macht auch schon die Code-Einrückung klar.

    C-Quellcode

    1. if (z3 = glei) {
    das = ist falsch, da muss == stehen
    Bitte Titel abändern, der ist nichtssagend.
    Zeile#78 enthält einen Logikfehler.
    Der ganze Aufbau ist ein stückweit hanebüchen, aber Dir geht's ja wohl auch darum, erstmal das Programm an sich zum Laufen zu bringen, richtig?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    VaporiZed schrieb:

    C-Quellcode
    if (z3 = glei) {
    das = ist falsch, da muss == stehen


    Soweit ich das sehe, hat Luci_101 versucht gleichzeitig zuzuweisen und zu überprüfen ob der Wert 0 (false) oder irgendeine Zahl die nicht 0 ergibt (true) ist oder nicht.
    Ist ganz normal möglich mit C++, nur halt etwas unübersichtlich und führt sehr schnell aber sicher zu haarsträubenden Fehlern, da es sehr schwer zu finden ist wenn man gar nicht weiß wo der Fehler überhaupt liegt. (wenn nicht beabsichtigt)

    Wenn das nicht der Fall ist hast du hier einen Fehler und versuchst eine uninitialisierte Variable zu vergleichen! (Lokale Variablen immer zuerst zuweisen bevor man nicht-zuweisende Operationen mit ihnen durchführt, da diese ,wenn du Pech hast, nicht wie angenommen einen Standardwert sondern einen zufälligen Wert zugewiesen bekommen könnten!)

    Soweit dazu!

    "Unreferezierte lokale Variable" bedeutet, dass du diese Variablen nicht in Verwendung hast, was daran liegt (wie VaporiZed schon angemerkt hat), dass die Verwendung der Variablen nicht in deren Definitionsbereich liegt.
    Die '}' Klammer ist zu viel!

    Edit:
    Was mir nach weiterem durchlesen aufgefallen ist!

    Du willst also das der Benutzer die Abkürzung eingibt damit je nach Eingabeergebnis die jeweilige Rechenoperation ausgeführt wird?
    So wie ich das nämlich sehe versuchst du die Eingabe mit dem Variablennamen zu vergleichen, was so aber nicht funktionieren wird!!!

    So wie ich das sehe hast du hier 2 möglichkeiten:

    1.
    Du gibst die Operationen an und gibst jeder Operation einen einheitlichen Wert!
    Wie z.B Addition (0), Subtraktion (1) ect.
    Der Benutzer gibt diese Zahl ein und je nach Eingabe wird dann die jeweilige Operation ausgeführt!
    z.B.

    C-Quellcode

    1. ...
    2. dein code
    3. ...
    4. // Hier wird die Addition ausgeführt
    5. if(z3==0)
    6. {
    7. ...
    8. }
    9. // Die anderen Operationen
    10. else if(.....


    2.
    Du vergleichst Zeichenketten.
    Dies wird normalerweise mit char-Zeigern gemacht!
    Das musst du aber nicht, den der std-namespace bietet dir die sogenannte "string" klasse welche einige funktional brauchbare Methoden bereitstellt!

    C-Quellcode

    1. // Bemerke hier das ich diese Variable nicht initialisieren muss, da sie einen sogenannten standard konstruktor definiert!
    2. std::string eingabe;
    3. // aufpassen, std::cin liest nicht weiter als bis zum ersten Leerzeichen z.B "Hallo, ich bin Daniel!" würde "Hallo," zurückgeben!
    4. // in deinem Fall würde es warscheinlich aber funktionieren
    5. std::getline(std::cin, eingabe);
    6. // konvertiere die Zeichenkette zu kleinen Zeichen, da der Vergleich von zwei Zeichenketten Groß/Kleinschreibung beachtet! (benötigt den algorithm header)
    7. std::transform(eingabe.begin(), eingabe.end(), eingabe.begin(), ::tolower);
    8. ...
    9. // Vergleiche Eingabe und schaue nach ob sie divi entspricht, wenn beide gleich sind, wird 0 zurückgegeben
    10. if(eingabe.compare("divi") == 0)
    11. {
    12. ...
    13. } else if(......


    Edit 2:
    Ich musste einfach nochmal zurückkommen und nur aus Sicherheitsgründen etwas klarstellen!
    Diese Code-Beispiele sind absichtlich minimalistisch aufgeführt, im Normalfall würdest du noch einige checks ausführen um sicherzugehen, dass du die richtigen Zeichen als Eingabe bekommen hast und so weiter!
    Mit ein bisschen Google Recherche wirst du aber schnell fündig!
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „Elanda“ () aus folgendem Grund: Einige Grammatik- und Code- schnelligkeitsfehler und Codeformatierung ausgebessert und kleine Informationsanfügung

    Auch an Dich: Willkommen im Forum.

    Elanda schrieb:

    Soweit ich das sehe, hat Luci_101 versucht gleichzeitig zuzuweisen und zu überprüfen ob der Wert 0 (false) oder irgendeine Zahl die nicht 0 ergibt (true) ist oder nicht.

    Wenn Du noch eine Zeile weiter drüber schaust, glaube ich eher nicht, dass Deine Vermutung richtig ist bzw. Luci_1001 sowas versucht:

    C-Quellcode

    1. cin >> z3;
    2. if (z3 = glei) {

    Und da glei auch noch nicht initialisiert ist, ist hier ziemlich viel Chaos angesagt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Wenn Du noch eine Zeile weiter drüber schaust, glaube ich eher nicht, dass Deine Vermutung richtig ist bzw. Luci_1001 sowas versucht:


    Habe ich nach genauerem durchlesen auch gemerkt und meinen Beitrag editiert!
    Aber danke für's Hinweisen. :)

    Edit:
    Danke für das herzliche Willkommen! :)
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Elanda“ () aus folgendem Grund: Grammatikfehler