Veröffentlicht 14. Juli 20214 j Hallo, Ich bin relativ weit gekommen mit dem Taschenrechner aber stehe jedes mal vor neuen Herausforderungen. Ich bin dabei meinen Taschenrechner zu optimieren und soll kein einfacher sein. Ich möchte dass der Taschenrechner in Dauerschleife läuft bis der Benutzer off eintippt, jedoch weiß ich nicht wie ich das hinbekommen kann und welche Schleife ich nehmen soll 😕 // Taschenrechner V1.0 Double zahl1, zahl2, ergebnis; Int32 art; Console.WriteLine("Gib deine erste Zahl ein:"); zahl1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Gib eine der folgenden Rechenarten ein:"); Console.WriteLine("1|plus"); Console.WriteLine("2|minus"); Console.WriteLine("3|mal"); Console.WriteLine("4|geteilt"); Console.WriteLine("5|hoch"); Console.WriteLine("6|wurzel"); Console.WriteLine("off"); art = Convert.ToInt32(Console.ReadLine()); if (art != 1 && art != 2 && art != 3 && art != 4 && art != 5 && art != 6) { Console.WriteLine("Error"); } else { if (art == 6) { ergebnis = Math.Sqrt(zahl1); ergebnis = Math.Round(ergebnis, 3); Console.WriteLine("Ergebnis: " + ergebnis); } else { Console.WriteLine("Gib deine zweite Zahl ein:"); zahl2 = Convert.ToDouble(Console.ReadLine()); if (art == 1) { ergebnis = zahl1 + zahl2; ergebnis = Math.Round(ergebnis, 3); Console.WriteLine("Ergebnis: " + ergebnis); } else if (art == 2) { ergebnis = zahl1 - zahl2; ergebnis = Math.Round(ergebnis, 3); Console.WriteLine("Ergebnis: " + ergebnis); } else if (art == 3) { ergebnis = zahl1 * zahl2; ergebnis = Math.Round(ergebnis, 3); Console.WriteLine("Ergebnis: " + ergebnis); } else if (art == 4) { ergebnis = zahl1 / zahl2; ergebnis = Math.Round(ergebnis, 3); Console.WriteLine("Ergebnis: " + ergebnis); } else if (art == 5) { ergebnis = Math.Pow(zahl1, zahl2); ergebnis = Math.Round(ergebnis, 3); Console.WriteLine("Ergebnis: " + ergebnis); } } } Console.ReadKey(); Ich würde mich sehr auf eine Hilfreiche Antwort freuen und mich herzlich bedanken
14. Juli 20214 j Mal ganz unabhängig von deinem Code, da hätte ich nämlich hier und da schon was auszusetzen, mal erklärt wie du diese "Dauerschleife" hinbekommst: Im Einsteigspunkt rufst du eine Methode auf, die du als "Menü" ansehen könntest. Hier forderst du den Benutzer auf Eingaben auf. Dann prüfst du die Eingabe und führst über ne Switch die entsprechende Methode aus (Addieren, Subtrahieren usw.). Statt die Eingaben zu konvertieren, prüfst du im Switch einfach auf den richtigen String, so kannst du auch "off" abfangen und das Programm beenden. Am Ende der jeweiligen Methoden rufst du die Methode für das Menü erneut auf. Vorher nutzt du Console.Clear() um die Konsole zu leeren.
14. Juli 20214 j vor 43 Minuten schrieb KeeperOfCoffee: Am Ende der jeweiligen Methoden rufst du die Methode für das Menü erneut auf. Vorher nutzt du Console.Clear() um die Konsole zu leeren. bzw. kannst du dies auch nach der Switch machen
15. Juli 20214 j Autor Am 14.7.2021 um 10:40 schrieb KeeperOfCoffee: Mal ganz unabhängig von deinem Code, da hätte ich nämlich hier und da schon was auszusetzen, mal erklärt wie du diese "Dauerschleife" hinbekommst: Im Einsteigspunkt rufst du eine Methode auf, die du als "Menü" ansehen könntest. Hier forderst du den Benutzer auf Eingaben auf. Dann prüfst du die Eingabe und führst über ne Switch die entsprechende Methode aus (Addieren, Subtrahieren usw.). Statt die Eingaben zu konvertieren, prüfst du im Switch einfach auf den richtigen String, so kannst du auch "off" abfangen und das Programm beenden. Am Ende der jeweiligen Methoden rufst du die Methode für das Menü erneut auf. Vorher nutzt du Console.Clear() um die Konsole zu leeren. //Taschenrechner V2.0 Double zahl1, zahl2, ergebnis; Int32 art; Console.Write("Gib deine erste Zahl ein: "); zahl1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("1 = Addieren"); Console.WriteLine("2 = Subtrahieren"); Console.WriteLine("3 = Multiplizieren"); Console.WriteLine("4 = Dividieren"); Console.WriteLine("5 = Potenzrechnen"); Console.WriteLine("6 = Wurzel ziehen"); Console.Write("Wähle eine Rechenart aus: "); art = Convert.ToInt32(Console.ReadLine()); Console.Write("Gib deine zweite Zahl ein: "); zahl2 = Convert.ToDouble(Console.ReadLine()); switch (art) { case 1: ergebnis = zahl1 + zahl2; Console.WriteLine("Ergebnis: " + ergebnis); break; case 2: ergebnis = zahl1 - zahl2; Console.WriteLine("Ergebnis: " + ergebnis); break; case 3: ergebnis = zahl1 * zahl2; Console.WriteLine("Ergebnis: " + ergebnis); break; case 4: ergebnis = zahl1 / zahl2; Console.WriteLine("Ergebnis: " + ergebnis); break; case 5: ergebnis = Math.Pow(zahl1, zahl2); Console.WriteLine("Ergebnis: " + ergebnis); break; case 6: ergebnis = Math.Sqrt(zahl1); Console.WriteLine("Ergebnis: " + ergebnis); break; default: Console.WriteLine("Ungültige eingabe."); Console.Write("Wähle eine Rechenart aus: "); break; } Console.ReadKey(); Soweit bin ich gekommen, jedoch verstehe ich danach nichts mehr 😕 Könntest du es mir bitte etwas ausführlicher erklären ^^´?
15. Juli 20214 j Ich werde jetzt keinen Code für dich posten, du sollst das schon selbst tippen und verstehen^^ Hier kannst du die simple Angehensweise mal nachvollziehen. Gibt sicher andere Wege, das ist aber relativ einfach Quck & Dirty. Vermutlich würde ich es nicht in statischen Klassen machen, aber darum gehts grad ja nicht.
16. Juli 20214 j Am 14.7.2021 um 10:27 schrieb Schwegelberger: Dauerschleife läuft bis der Benutzer off eintippt, jedoch weiß ich nicht wie ich das hinbekommen kann und welche Schleife ich nehmen soll 😕 Da gibt es einige möglichkeiten um sowas zu realisieren bsp. While (true) Methode() welches rekursiv sich selber aufruft ..... Um die schleife zu verlassen hast du wieder mehrere möglichkeiten goto => goto (C#-Referenz) wenn du lustig drauf bist kannst du mit goto anweisung auch eine endlosschfeie realisieren und kontruieren Lies dir das mal durch Sprunganweisung / Sprungbefehl (( wikipedia ) goto) if(benutzer eingabe == Of ) { break; <= zum beispiel } Spiele mal der goto Anweisung hätte auch mega lern effekt Bearbeitet 16. Juli 20214 j von Hisoka
16. Juli 20214 j vor 12 Minuten schrieb Hisoka: Methode() welches rekursiv sich selber aufruft Das führt irgendwann zu einem Stapelüberlauf (Stack Overflow) Du kannst jede Rekursion in eine Schleife umwandeln aber nicht jede Schleife in eine Rekursion. vor 14 Minuten schrieb Hisoka: goto => goto (C#-Referenz) Die 80er haben angerufen und wollen goto zurück haben. Nein, ernsthaft. goto ist eine schlechte wahl. goto sollte man meiden, wie der Teufel das Weihwasser. In Hochsprachen, wie C# nun mal ist, ist die Verwendung von goto unnötig.
16. Juli 20214 j vor 23 Minuten schrieb Whiz-zarD: vor 43 Minuten schrieb Hisoka: Methode() welches rekursiv sich selber aufruft Das führt irgendwann zu einem Stapelüberlauf (Stack Overflow) Du kannst jede Rekursion in eine Schleife umwandeln aber nicht jede Schleife in eine Rekursion. Das Sollte doch so sein 😭 ich wolle doch das er einen Stack Overflow hat. "Oo es hat geklappt aber noch nicht so gut wie ich es wollte" war mein ziel (Lern effekt) Später wollte ich ihm eine OOP lösung andrehen => wo ich ihn wieder geziel auf sachen aufmerksamm gemacht hätte.. Zum Beispiel Large Objekt Heap wollte ihn damit bisschen auf die eier gehen außerdem so lernt man gut. Mann macht was sieht ooo das war scheiße und versucht es besser hinzu bekommen. => ich hatte gehofft das er von alleine drauf komm und sich mit den Internas aus der .net entwicklung beschäftig und sich mal gedanken über den .NET Garbage Collector (GC) später noch macht. Ich könnte ihn auch eine Lösung runter rotzten aber da hat er doch auf langer sich nichts von.
16. Juli 20214 j vor 30 Minuten schrieb Whiz-zarD: vor 50 Minuten schrieb Hisoka: goto => goto (C#-Referenz) Die 80er haben angerufen und wollen goto zurück haben. Nein, ernsthaft. goto ist eine schlechte wahl. goto sollte man meiden, wie der Teufel das Weihwasser. In Hochsprachen, wie C# nun mal ist, ist die Verwendung von goto unnötig. Ja kann nicht schaden zu wissen das es geht
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.