[Delphi] Taschenrechner - Eval?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Telefonzelle, 14. Februar 2007 .

  1. 14. Februar 2007
    Taschenrechner - Eval?

    Hi

    Hab n Edit Feld, wo rein ich alles klopp, wo dann am Schluss zb sowas steht:

    1+2+3+4+5*4

    Kann man das dann irgwie "ausrechnen" lassen? In JS / PHP etc gibts ja n Eval Befehl, gibts sowas auch für Delphi?

    Code:
     DasFeld.Text := Eval(DasFeld.Text);
    
    So worked das nicht.

    Wenn mir jmd helfen kann, kthnx.

    (Also im Feld "DasFeld" soll im `Text` das eval'te dann stehen.
     
  2. 14. Februar 2007
    AW: Taschenrechner - Eval?

    nein das geht meines Wissens nach nicht.
    Das musst du selber Programmieren:
    Baum aufbauen mit Operation = Knoten, Blätter = Werte
    Und dann von unten nach oben aufrechnen.
     
  3. 14. Februar 2007
    AW: Taschenrechner - Eval?

    Mit nem normalen Editfenster geht das nicht! Kannst aber soweit ich weiß ein eigenes Editfenster erstellen, dass du aus dem Unit des Editfensters ableitest. Musst halt nur noch paar extra Sachen einbinden und dann hasse dein eigenes Editfenster, mit dem du das machen kannst...

    Vllt red ich auch Schwachsinn...glaubs aber eher net
     
  4. 14. Februar 2007
    AW: Taschenrechner - Eval?

    du kannst dich ja auch erstmal auf nen paar operatoren beschränken und dann gucken ob die im text vorhanden sind und dann den ganzen spaß splitten usw.

    Dann kannst das sicherlich über nen paar schleifen so einrichten das du die formel aus nem textfel ausrechnen kannst!

    Knusperkeks
     
  5. 14. Februar 2007
    AW: Taschenrechner - Eval?

    Nein so was gibt es bei Delphi (noch) nicht, wenn dann müsstest du,
    wie oben mehrmals gesagt worden ist, das selber Programmieren,
    dabei müsstest du die Zahlen, Operationen, .... aus dem String extrahieren
    und Variablen zuweisen und dann nach und nach die Operationen durchführen
    lassen. Bei wenigen Operationen wie nur "+,-,/,*" ist das ja kein so großes Problem,
    aber wenn du noch Klammern, Sinus, Kosinus, Logarithmen... usw. ausrechnen
    lassen willst, dann wird das alles verschachtelter und komplizierter.

    Mfg

    Rushh0ur
     
  6. 15. Februar 2007
    AW: Taschenrechner - Eval?


    Prinzipiell ist es nicht schwer, wenn man wie oben geschrieben einen Baum aufbaut. Dann spielt es keine Rolle mehr, welche Operationen man nutzt, das Programm muss sie nur kennen.
    Mit Schleifen und solchen Tricks -> kriegt man zwar funktionsfähig, aber wohl eher zu fehleranfällig und bei vielen verschiedenen Operationen zu komplex.

    Ohne Berücksichtigung von Klammern, folgendes Verfahren:
    1. Suche Operation mit höchster Prio (bei Punkt-vor-Strich wichtig)
    2. Mache daraus Knoten mit den Blättern: linke und rechte Hälfte von der Operation aus
    3. Führe Schritt 1 und 2 in den Blättern aus bis keine Operationen mehr vorhanden

    Klammern lassen sich damit auch halbwegs einfach realisieren, weil diese nur im 1. Schritt beachtet werden müssen.
    Funktionen beeinflussen Schritt 2
     
  7. 15. Februar 2007
    AW: Taschenrechner - Eval?

    @Unplugged

    Wie stellst du dir das Programmieren des Baumes den eigentlich vor?
    Würdest du es über das Objekt TTreeNodes machen oder ohne einem Objekt
    sondern nur mit Zeigern (Pointer) arbeiten.

    Also meiner Meinung sollte man das Problem über Zeiger lösen und damit den
    Baum aufbauen als mit dem Objekt. Es ist zwar leichter mit einem Objekt das
    ganze zu machen aber über Pointer wäre das ja weniger Rechenauslastung für
    die CPU und damit auch schneller, zwar nur im Bereich von ns bzw. ms, aber was
    ist wenn man eine riesige Aufgabe eingibt, dann würde sich ja das in der Zeit
    bemerkbar machen. Oder sehe ich das ganze Falsch?

    Mfg

    Rushh0ur
     
  8. 21. Februar 2007
    AW: Taschenrechner - Eval?

    Strenggenommen versteht man unter einer Klasse nicht mehr oder weniger als einen Rekord, der zusätzlich neben Feldern auch Methoden, Funktionszeiger... enthalten kann. Über die Geschwindigkeitsunterschiede kann ich wenig sagen, aber ich würde persönlich eine Klassearchitektur vorziehen, da sie einfach viel flexibler ist und nicht umsonst rät man immer wieder zur Objektorientierung...
     
  9. 21. Februar 2007
    AW: Taschenrechner - Eval?

    mit TTreeNode hat das nichts zu tun.
    Du erstellst ein Objekt mit beliebig vielen Unterzeigern, welche dann auf die Unterknoten zeigen. Zu jedem Objekt musste natürlich noch nen paar andere Sachen wie Anzahl der Unterobjekte, Typ etc. speichern. Bei Blättern haste dann keine Zeiger mehr drin bzw. die Anzahl ist 0 und der Typ muss dann ne Konstante sein.
    Mit TTreeNode könnte man es eigentlich auch machen, wäre aber auf jeden Fall langsamer. Ich bin auch nicht gerade sicher, wie gut man nen TTreeNode abscannen kann, weil für die Berechnung musst du immer die Knoten suchen, die als Unterknoten nur noch Konstanten haben.
    Ein "ausgerechneter" Operationsknoten wird dann zum Konstanten-Knoten mit dem Wert des Ergebnisses. Am Ende ist die Wurzel auch nur eine Konstante mit dem Endergebnis.

    @testitest
    Natürlich sollte man Klassen nutzen. Die Verwendung von Zeigern steht dem ja auch nicht gegenüber.
    Die Geschwindigkeit wird am meisten vom Suchalgorithmus und der eigentlichen Berechnung beeinflusst und dort sollte auch primär optimiert werden.
     
  10. 25. Februar 2007
    AW: Taschenrechner - Eval?

    Also, die idee mim edit Feld is erstmal nicht die beste! Ich denk mal das erste, was man in delphi macht ist ja Hallo welt und das 2. ist doch der taschenrechner! Und da würd ich einfach erstmal so anfangen, dass ich entweder buttons für die rechenmethoden machen würde oder diese anklickdinger(xD)! Und dann nimmste Variablen, die die Zahlen auslesen!
    Wenn es aber irgendnen Grund gibt, warum du das so machst, dann würde ich die Zahlen aus dem Feld in ne Feld- Variable auslesen lassen! a:=[x,y]....! Und die Zahlen würd ich daraus mit dem Pos befehl holen! Die Rechenmethoden kannste auch mit variablen rausholen und prüfen lassen ob die variable +,-,* oder / sind! und dann kannste ja einfach ausrechnen lassen! Und noch n tipp am rande: Punkt vor Strich ^^!!
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.