Thema: Delphi Delphi Taschenrechner

Einzelnen Beitrag anzeigen

Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Delphi Taschenrechner

  Alt 7. Okt 2007, 19:58
So schwer ist es nicht, nur für Anfänger ist es ziemlich schwierig, vor allem die Vorstellung dahinter wie man es umsetzen kann und vor allem warum ist nicht einfach.

Wenn du es wirklich machen möchtest, solltest du dir eine komplizierte Rechnung aufschreiben und diese Zerlegen, also zB
34+2*9*(39/3+(1+5))^2
Allerdings sollten wir erstmal ohne Klammern anfangen, zB mit 1+5*8+1
Jetzt durchsuchst du wiederholt den string von vorne nach hinten einem * oder / bis keins mehr vorhanden ist, weil es ja punkt vor strich ist. hast du eins gefunden, hier an position4, sucht du ab position 4 rückwärts bis zum Anfang des Strings nach dem nächsten rechenzeichen, klammer oder string-anfang und nimmst den teil als linke seite der rechnung, hier wäre das das + zwischen 1 und 5, die linke seite ist also 5. Das gleiche machst du ab der 4 aufwärts bis Rechenzeichen, Klammer oder Stringende, hier wäre das das + zwischen 8 und 1, also ist die rechte seite die 8. Jetzt hast du die rechenoperation (*) und beide seiten und kannst es ausrechnen, 5*8 ist 4, und den gesamten teil "5*8" mit dem Ergebnis ersetzen.
Bleibt noch 1+40+1
Jetzt gibt es weder / noch * und wir gehen weiter, suchen nach + und - von vorne nach hinten
wir finden das vordere +, gehen nach links bis zum string-anfang, vorher gibt es kein rechenzeichen: linker teil ist also 1. Rechts weiter, wir finden das +, rechter Teil ist 40. Ausrechnen: kommt 41 raus
Bleibt noch 41+1
es ist noch + und - vorhanden, machen das gleiche Spielchen nochmal usw usf.

Mit Klammern ist das ganze ein wenig komplexer,
das heisst: Zuerst musst du ja die Klammern ausrechen. Eine möglichkeit ist die letzte ( zu finden, hier die vor 1, und den gesamten klammerinhalt zu nehmen und deine Funktion die das ding berechnet damit rekursiv aufzurufen, dann den ganzen teil inklusive der Klammern mit dem ergebnis erstzen.

Der von mir beschriebene Lösungsansatz ist auf Verständlichkeit optimiert, das ganze kann man sicher noch Optimieren und ein paar Bugs sind auch drin.
Viel glück
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat