From c21d16235853391c7deb910987ba1029e4d75c99 Mon Sep 17 00:00:00 2001 From: gitea <3029257@stud.hs-mannheim.de> Date: Mon, 22 Dec 2025 18:04:36 +0100 Subject: [PATCH] Aufgabenstellung v1.0 --- .classpath | 7 ++ .project | 17 +++++ README.md | 63 +++++++++++++++- .../Rekursiver_Rechner.java | 73 +++++++++++++++++++ .../Rekursiver_Rechner_Test.java | 61 ++++++++++++++++ 5 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 src/de/hs_mannheim/Rekursiver_Rechner/Rekursiver_Rechner.java create mode 100644 src/de/hs_mannheim/Rekursiver_Rechner/Rekursiver_Rechner_Test.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..6220d0d --- /dev/null +++ b/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..d3b78a6 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Rekursiver_Rechner + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/README.md b/README.md index 5da762a..0e05b5b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,62 @@ -# Rekursiver_Rechner_Aufgabenstellung +# Rekursiver Rechner +## Repo zur Aufgabe +Hier: +finden Sie ein git-repo mit der Aufgabenstellung und Tests. Sie müssen lediglich die Funktion: `double RekursiveSquentielleBerechnung()` vervollständigen. Mit Hilfe der Tests weiß man, ob die Aufgabe korrekt ist. +## Aufgabe +Erstellen Sie einen Rechner der [Sequentielle Eingabe](https://de.wikipedia.org/wiki/Taschenrechner#Eingabelogik) zum Berechnen des Ergebnisses rekursiv verwendet. +In dem Eingabe String sind nur die folgenenden Zeichen erlaubt: 0-9.+-/* +## Immediate execution erklärt +Wikipedia: [Sequentielle Eingabe (Deutsch)](https://de.wikipedia.org/wiki/Taschenrechner#Eingabelogik) + +``` +Bsp.: +5.5+4.5*10 +``` +Normale Berechnung(Algebraische Notation): +``` +5.5+4.5*10 | Klammern setzen (Rangfolge der Operatoren beachten) +=5.5+(4.5*10) +=5.5+45 +=50.5 +``` +Sequentielle Eingabe: +``` +5.5+4.5*10 |Von links nach rechts berechnen (ohne Beachtung der Rangfolge der Operatoren) +=10*10 +=100 +``` +Hinweis: Der "normale" Windows Rechner arbeitet nach dem Sequentiellen Eingabe Prinzip. +## Weitere Hinweise +### Randfälle definiert +Falls ein Operator am Ende des Strings steht, soll er ignoriert werden. + +Bsp.: +``` ++ - / * +10+ 10- 10/ 10* +=10+0 =10-0 =10/1 =10*1 +=10 =10 =10 =10 +``` +Falls Operator an Operator steht, soll er das Ergebniss nicht ändern. + +Bsp.: +``` ++++ --- /// *** +-/* +10++++5 10----5 10////5 10***5 10+-/**5 +=10+0+0+0+5 =10-0-0-0-5 =10/1/1/1/5 =10*1*1*1*5 =10+0-0/1*1*5 +=15 =5 =2 =50 =50 +``` +Falls ein Operator an erster Stelle steht ist die vorhergehende Zahl 0. + +Bsp.: +``` ++ - / * +=0+0 =0-0 =0/1 =0*1 +=0 =0 =0 =0 +``` +Zahlen wie "5." entsprechen "5.0" und ".5" entsprechen "0.5". + +Nur "." als Zahl ist ungültig. + +Bei Rechnungen "/0" soll als Ergebniss `Double.POSITIVE_INFINITY` oder `Double.NEGATIVE_INFINITY` zurück gegeben werden. (Das macht Java bei Rechnungen "/0" von sich aus.) -PR1 Aufgabensammlung \ No newline at end of file diff --git a/src/de/hs_mannheim/Rekursiver_Rechner/Rekursiver_Rechner.java b/src/de/hs_mannheim/Rekursiver_Rechner/Rekursiver_Rechner.java new file mode 100644 index 0000000..4feb1a3 --- /dev/null +++ b/src/de/hs_mannheim/Rekursiver_Rechner/Rekursiver_Rechner.java @@ -0,0 +1,73 @@ +package de.hs_mannheim.Rekursiver_Rechner; + +import java.util.Scanner; + +public class Rekursiver_Rechner { + private static Scanner sc; + public static void main(String[] args) { + sc = new Scanner(System.in); + Menu(); + System.out.println("Ende."); + } + + public static double RekursiveSquentielleBerechnung(String formel) { + //Todo: Implementiere den Rechner rekursiv. + return 0.0; + } + + public static void Menu() { + Boolean ende = false; + while(!ende) { + System.out.println("Schreiben Sie eine Rechnung die nach \"Sequentielle Eingabe\" berechnet werden soll (\"exit\" to quit):"); + System.out.println(); + String eingabe = sc.nextLine(); + if("exit".equals(eingabe)) { + ende = true; + continue; + } + if(!isValidString(eingabe)) { + System.out.println("Die Eingegebene Rechnung ist nicht valide. Probieren Sie es nochmal."); + continue; + } + System.out.println("Das Ergebniss ist: "+RekursiveSquentielleBerechnung(eingabe)); + } + } + + public static Boolean isValidString(String formel) { + //Check if all Chars are allowed + for(int i = 0; i='0' && formel.charAt(i)<='9')||formel.charAt(i)=='.'||formel.charAt(i)=='+'||formel.charAt(i)=='-'||formel.charAt(i)=='/'||formel.charAt(i)=='*')) { + return false; + } + } + //Check if all Numbers can be parsed + int startNumber = 0; + int endNumber = 0; + for(int i = 0; i