Veröffentlicht 16. August 20196 j Hey, könnte jemand mir netterweise Zeigen was ich verändern muss, damit ich die das Programm nochmal laufen lassen kann, ohne es zu beennden. Beste Grüße und danke schon mal Max Schlensag namespace Taschenrechner2 { public class Program { public static void Main(string[] args) { // Benutzer begrüßen Console.WriteLine("Hallo Benutzer, bitte Formel eingeben"); //string gleichung = "13*-3"; // string gleichung = "12*13"; string gleichung = Console.ReadLine(); // nächsten Operator ermitteln char operatorWert = GetOperator(gleichung); while (operatorWert != ' ') { int index = gleichung.IndexOf(operatorWert); Console.WriteLine("Der Operator ist an Stelle {0}", index); int positionVorherrigerOperator = GetVorherrigerOperator(gleichung, index); string wert1 = ""; for (int i = index - 1; i >= 0; i--) { if (i > positionVorherrigerOperator) { wert1 = gleichung + wert1; } } // Operator suchenl Console.WriteLine(wert1); int positionNaechsterOperator = GetNaechsterOperator(gleichung, index + 1); string wert2 = ""; for (int index2 = index + 1; index2 < gleichung.Length; index2++) { if (index2 < positionNaechsterOperator || positionNaechsterOperator == -1) { wert2 = wert2 + gleichung[index2]; } } Console.WriteLine(wert2); // jetzt versuchen wir zu rechnen double zahl1 = double.Parse(wert1); double zahl2 = double.Parse(wert2); double ergebnis = Rechne(zahl1, zahl2, operatorWert); gleichung = gleichung.Replace(wert1 + operatorWert + wert2, ergebnis.ToString()); operatorWert = GetOperator(gleichung); } //Ergebnis ausgeben plus Rechnung Console.WriteLine("Ergebnis: " + gleichung); Console.WriteLine("Wollen sie noch eine Rechnung rechnen, dann schreiben sie j wenn sie keine weitere Rechnung rechen wollen n"); Console.ReadKey(); } //switch private static double Rechne(double zahl1, double zahl2, char operatorWert) { switch (operatorWert) { case '*': return zahl1 * zahl2; case '/': return zahl1 / zahl2; case '+': return zahl1 + zahl2; case '-': return zahl1 - zahl2; } throw new ArgumentException("da hat was nicht geklappt"); } //Methode private static char GetOperator(string gleichung) { //mal rechnung for (int i = 0; i < gleichung.Length; i++) { char zeichen = gleichung; char zeichen2 = i > 0 ? gleichung[i - 1] : ' '; if (zeichen == '*' && IsOperator(zeichen, zeichen2)) { return '*'; } if (zeichen == '/' && IsOperator(zeichen, zeichen2)) { return '/'; } } //geteilt rechnung for (int i = 0; i < gleichung.Length; i++) { char zeichen = gleichung; char zeichen2 = i > 0 ? gleichung[i - 1] : ' '; if (zeichen == '/' && IsOperator(zeichen, zeichen2)) { return '/'; } } //plus rechnung for (int i = 0; i < gleichung.Length; i++) { char zeichen = gleichung; char zeichen2 = i > 0 ? gleichung[i - 1] : ' '; if (zeichen == '+' && IsOperator(zeichen, zeichen2)) { return '+'; } } //minus rechung for (int i = 0; i < gleichung.Length; i++) { char zeichen = gleichung; char zeichen2 = i > 0 ? gleichung[i - 1] : ' '; if (zeichen == '-' && IsOperator(zeichen, zeichen2)) { return '-'; } } return ' '; } private static int GetNaechsterOperator(string gleichung, int position) { int result = -1; for (int i = position; i < gleichung.Length; i++) { char zeichen = gleichung; char zeichen2 = i > 0 ? gleichung[i - 1] : ' '; if (IsOperator(zeichen, zeichen2)) { result = i; break; } } return result; } //Zweiten Operator finden private static int GetVorherrigerOperator(string gleichung, int index) { int result = -1; for (int i = index - 1; i >= 0; i--) { char zeichen = gleichung; char zeichen2 = i > 0 ? gleichung[i - 1] : ' '; if (IsOperator(zeichen, zeichen2)) { result = i; break; } } return result; } // Zum erkennen, dass es kein Operator ist private static bool IsOperator(char zeichen, char zeichen2) { if (zeichen == '*' || zeichen == '/' || zeichen == '+' || zeichen == '-') { if (zeichen2 == '*' || zeichen2 == '/' || zeichen2 == '+' || zeichen2 == '-' || zeichen2 == ' ') { return false; } return true; } return false; } } }
16. August 20196 j Stichwort: Schleife. Du packst den Teil, der wiederholt werden soll in eine Schleife.
16. August 20196 j Autor Gerade eben schrieb Whiz-zarD: Stichwort: Schleife. Du packst den Teil, der wiederholt werden soll in eine Schleife. Also quasi alles?
16. August 20196 j Lagere das Zeug aus deiner Main() erstmal ein eine eigene Methode, die dann so lange läuft, wie deine Methode true zurückgibt (also an die Schleife). Ob true oder false zurückkommen entscheidet halt der Benutzer, wenn du abfragst, ob er noch eine Rechnung machen will. Übrigens: Das hättest du locker in den anderen Thread packen können. Ist schließlich das gleiche Thema. Bearbeitet 16. August 20196 j von KeeperOfCoffee
16. August 20196 j Und noch eine kleine Randbemerkung: es gibt im Editor die Code Tags "<>". Damit wird der Code formatiert im Thread dargestellt. Das würde die Übersicht wesentlich verbessern. ?
16. August 20196 j Hallo, bitte verwende für Programmierfragen auch die passenden Unterbereiche dafür - ich habe den Thread mal richtig einsortiert. Danke.
16. August 20196 j Und wenn wir schon beim Thema "Taschenrechner" sind: Wie man einen Taschenrechner programmiert
16. August 20196 j Autor Lösung Könne mir trotzdem jemand ein Beispiel zeigen? Müsst es ja nicht anhand meines Taschenrechners machen
16. August 20196 j Du hast doch in deiner Anwendung schon for-Schleifen verwendet. Wo ist nun das Problem? Schaue dir doch mal andere Schleifen-Varianten an. z.B. while.
16. August 20196 j Autor Gerade eben schrieb Whiz-zarD: Du hast doch in deiner Anwendung schon for-Schleifen verwendet. Wo ist nun das Problem? Schaue dir doch mal andere Schleifen-Varianten an. z.B. while. Das war mein chef
16. August 20196 j vor 6 Minuten schrieb Max01: Das war mein chef https://www.codecademy.com/learn/learn-c-sharp https://docs.microsoft.com/de-de/dotnet/csharp/getting-started/ Lies/Arbeite dich erstmal in die Sprache ein
16. August 20196 j Um das noch mal näher aufzugreifen: Dies ist kein Forum, wo man die Aufgaben von anderen übernimmt. Das musst du schon selbst machen. Wir können dir zwar zu konkreten Problemen Antworten geben aber wenn wir dir jetzt nun zeigen, was du genau machen sollst, lernst du nichts dazu. Ich kann dir den Hinweis geben, dass du dir mal while-schleifen anschauen sollst. Noch eine Frage: Machst du gerade eine Ausbildung zum Fachinformatiker - Anwendungsentwickler und dein Chef ist dein Ausbilder?
16. August 20196 j Autor vor 3 Minuten schrieb Whiz-zarD: Um das noch mal näher aufzugreifen: Dies ist kein Forum, wo man die Aufgaben von anderen übernimmt. Das musst du schon selbst machen. Wir können dir zwar zu konkreten Problemen Antworten geben aber wenn wir dir jetzt nun zeigen, was du genau machen sollst, lernst du nichts dazu. Ich kann dir den Hinweis geben, dass du dir mal while-schleifen anschauen sollst. Noch eine Frage: Machst du gerade eine Ausbildung zum Fachinformatiker - Anwendungsentwickler und dein Chef ist dein Ausbilder? Okay werde ich machen und ja mach ich plus er ist mein chef
16. August 20196 j Gerade eben schrieb Max01: und ja mach ich plus er ist mein chef Auweia... Wie ich gerade sehe, ist der Code gar nicht mal lauffähig.
16. August 20196 j Autor vor 6 Minuten schrieb Whiz-zarD: Auweia... Wie ich gerade sehe, ist der Code gar nicht mal lauffähig. Was meinst du genau, er läuft bei mir Prima?
16. August 20196 j vor 14 Minuten schrieb Whiz-zarD: Auweia... so wie ich das verstanden habe, kommt das mit den Schleifen von seinem Chef. So wie ich da sehe fehlen hier noch grundlegende Kenntnisse. Bitte erst mal ein wenig üben, bevor du an dem Rechner weitermachst. Bearbeitet 16. August 20196 j von KeeperOfCoffee
16. August 20196 j So, wie der hier steht, kann er gar nicht laufen: private static char GetOperator(string gleichung) { //mal rechnung for (int i = 0; i < gleichung.Length; i++) { char zeichen = gleichung; [...] } [...] } Der Parameter "gleichung" dieser Methode ist ein string. Die Variable "zeichen" ist aber ein char und dennoch wird Variable mit "gleichung" intialisiert. char zeichen = gleichung; Beides sind aber unterschiedliche Typen.
24. August 20195 j Hey! Bitte programmiere in Englisch! Ich sehe das auch an der Berufsschule, dass die Lehrer es den Schülern auf Deutsch zeigen... No Go! Weiterhin erzeuge mehr Klassen die sich um die verschiedensten Verhalten deines Programms kümmern - C# ist OOP! Es gibt noch mehr Punkte, aber das ist das Gröbste
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.