PureBasic: reversePolishNotation

Aus Wikibooks
OpenConsole()

NewList entries.s()
PrintN("Please type only numbers and arithmetic operators(+,-,*,/)") 
PrintN("Input:")

Repeat
  entry.s = Input()
  AddElement(entries())
  entries() = entry
  
  If entries() = "="
    DeleteElement(entries())
    PrintN(entries())
    Input()
    Break
  EndIf
  If entries() = "-" Or entries() = "+" Or entries() = "/" Or entries() = "*"
    If ListSize(entries()) < 3
      PrintN("Not enough Elements for calculating")
      Input()
      Break
    EndIf
    
    index = ListIndex(entries())
    SelectElement(entries(),index-2)
    
    a.f = ValF(entries())
    DeleteElement(entries())
    NextElement(entries())
    
    b.f = ValF(entries())
    DeleteElement(entries())
    NextElement(entries())
    
    Select entries()
      Case "-"
        InsertElement(entries())
        entries() = StrF(a-b)
        NextElement(entries())
        DeleteElement(entries())
      Case "+"
        InsertElement(entries())
        entries() = StrF(a+b)
        NextElement(entries())
        DeleteElement(entries())
      Case "/"
        InsertElement(entries())
        entries() = StrF(a/b)
        NextElement(entries())
        DeleteElement(entries())
      Case "*"
        InsertElement(entries())
        entries() = StrF(a*b)
        NextElement(entries())
        DeleteElement(entries())
    EndSelect
  EndIf
ForEver

Was soll das Programm tun?[Bearbeiten]

Das Programm stellt einen Taschenrechner dar, der jedoch mit der umgekehrten polnischen Notation arbeitet. Bei dieser schreibt man die zwei Zahlen, mit denen gerechnet werden soll zuerst und danach die Rechenoperation. "2+8" würde man also als "2 8 +" schreiben. Hierdurch kann man sich die Klammersetzung sparen: "2*(5-3)" könnte man schreiben als "2 5 3 - *".

Wie funktioniert das Programm?[Bearbeiten]

Das Programm ist sehr einfach gehalten. Es werden alle Rechenzeichen und Zahlen hintereinander eingegeben. Jede Eingabe wird dabei zu einer Liste hinzugefügt. Sobald ein Rechenzeichen eingeben wird, wird entsprechend auf dieses reagiert, wobei mit den beiden Zahlen gerechnet wird, die zuvor zur Liste hinzugefügt wurden. Nach dem Beispiel aus dem vorigen Abschnitt passiert also folgendes: Es werden hintereinander die Zahlen 2, 5 und 3 eingegeben. Nun wird das Minus eingeben, woraufhin die Zahlen 5 und 3 aus der Liste geholt und danach subtrahiert werden. In der Liste sind also nun die Zahlen 2 und 2. Gibt man nun die Multiplikation ein, geschieht das gleiche mit den beiden Zweien, sodass in der Liste nur noch eine 4 ist. Mit "=" wird diese 4 ausgegeben.