63 lines
2.3 KiB
Markdown
63 lines
2.3 KiB
Markdown
# Rekursiver Rechner
|
|
## Repo zur Aufgabe
|
|
Hier: https://gitty.informatik.hs-mannheim.de/3029257/Rekursiver_Rechner_Aufgabenstellung
|
|
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.+-/*
|
|
## Sequentielle Eingabe 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.)
|
|
|