PR1_Aufgabensammlung_Rekurs.../README.md

63 lines
2.2 KiB
Markdown

# 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.)