Mathematische EditBox ?
-
Hi,
gibt es eine Art mathematische Editbox, in der man Berrechnungen mit
Variablen eingeben kann. Ich stelle mir das so vor, das man einige Variablen
in die Box Übergibt und diese lassen sich dann verwenden.x=z*2/r
oder so ...
Gruß
thenoname
-
Hem, seh ich das richtig, das du willst, das der User eine Formel eingeben kann, die dann berechnet werden soll? Oder geht es dir eher um die Darstellung?
Wenn es ersteres ist, solltest du dir mal Lua anschauen. Das ist eine Scriptsprache, die man in seine C und C++ binden kann. Alles was der User eingibt (entweder in ein solches Texteingabefeld oder auch in eine Scriptdatei) kann dann ausgeführt werden. Und dein C oder C++ Programm kann dann das Ergebnis des Scripts abfragen.
Lue unetsrtützt sowohl die Grundrechenarten und hat zus. mathematische Funktionen, wie cos, sin usw.
Hier die offizielle Website:
http://www.lua.orgUnd eine hilfreiche Seite mit Tutorials usw.:
http://lua-users.org/
-
-
Hi Verwegener,
In den nachfolgenden Beispielen wird vorausgesetzt, daß die Konstanten RADIUS, HÖHE, XDL und YDL vorab definiert wurden (und im Parser mit einem Zahlenwert gespeichert sind):
1 / 3 * pi * RADIUS ^ 2 * HÖHE
3 * sinh (xdl / 4 + 2) + 4 * sqrt ( 0.98 * ydl + 2)
Bedeutet das, das es sich hier um Konstanten handelt ? oder
lassen sich hier Radius=variable setzen ?
Bestimmt hast du den Parser schon mal benutzt ?Gruß
thenoname
-
Hi Artchi,
das ist viel Stoff. Angenommen ich hab die Sprache intus,
müssen meine Kumpels das auch checken
Dadurch wirds fast schon etwas unbrauchbar ...Gruß
thenoname
-
Notfalls schreibst du dir selber einen Parser. Hab ich zumindest in einem Programm so gemacht. Vor allem, wenn nur die wenigen Funktionen wie + - * / ( )gebraucht werden, ist das durchaus eine alternative.
Da zerlegst zuerst den String der Eingegeben wird, listest ihn auf, und führst dann alles dem entsprechend aus. Immer auf Punkt vor Strich achten (also immer in der Liste ein Operator voraus schauen gehen) und die Klammern macht mit einer zweiten Liste, indem du das derzeitige Resultat abspeicherst und dann das in der Klammer zuerst ausrechnest
...
Ein sehr einfacher und langsamer Parser aber für Grundoperationen und nicht all zu langen Formeln reicht es durchaus.Und beim auseinandernehmen der Formel kannst du Zahlen raussuchen Operatoren und dabei auch nach Konstanten schauen, welche du selber definieren kannst.
Grüssli
-
thenoname schrieb:
das ist viel Stoff. Angenommen ich hab die Sprache intus,
müssen meine Kumpels das auch checken
Dadurch wirds fast schon etwas unbrauchbar ...Also für reine mathematische Rechnungen, müssen deine Kumpels eigentlich nichts groß lernen. Sagen wir mal, du hast ein Eingabefeld, wo einfach nur eine Rechnung mit zwei Variablen eingegeben werden soll. Du _könntest_ zwei Variablen (a und b) vorgeben, die in deinem C Code schon definiert sind. Dann können die User im Editfeld diese benutzen. Das würden die eingeben:
a + 12 * bDas ist gültige Lua-Syntax.
Aber, die User können auch eigene Variablen definieren, wenn sie wollen!
x = 1 a + 12 * b + xIst jetzt nur ein Beispiel. Lua hat den Vorteil, das es eine sehr natürliche Syntax hat, wie man sieht (es sieht nicht gerade nach eine Computersprache aus). Klar, bei komplexeren matherechnungen, müssen die Kumpels schon mal das hier anschauen: http://www.lua.org/manual/5.1/manual.html#5.6
Da sind alle mathematischen Funktionen aufgeführt. Aber das Kapitel ist so mega kurz, da muß man nicht mal den Text komplett durchlesen.Wenn ein User den Cosinus berechnen will, gibt er in dein Editfeld einfach das ein:
math.cos(12)Er kann natürlich auch kombinieren:
x = 1 w = a + 12 * b + math.cos(x)Ich schätze mal, den umfangreichen Stoff den du meintest, ist die gesamte Scriptsprache? Ja, die ist natürlich umfangreich. Aber die muß der User nicht kennen. Er muß nur das lernen, was er für sein Problem benötigt. Für Berechnung muß er sich nur die Mathelib von Lua anschauen. Und die ist (wie man sieht) sehr einfach zu benutzen.
Der Vorteil von Lua ggü. einem reinem (einfachen) Matheparser ist, das der User auch Bedingungen (if/else) reinschreiben kann, wenn er will. Er muß ja nicht. Weiterhin _kannst_ du dein Programm auch anderweitig scriptfähig machen, nicht nur in diesem einen Editfeld. Glaube mir, wenn du erstmal Lua in deiner Anwendung drin hast, werden dir im Laufe der Zeit mehr Nutzungsfälle einfallen.

Du selbst mußt natürlich aber in deiner Anwendung erstmal Vorkehrungen treffen. D.h. die Lua-VM reinkompilieren und eine Schnittstelle für das Editfeld programmieren bzw. den CString vom CEditCtrl "holen" (Lua interessiert ja nur die Zeichenkette, obs vom Editfeld oder Textdatei her kommt, ist ja egal). Aber das sind nur ein paar Zeilen C und C++ Code. Und schon kanns losgehen.
-
Achja, noch was, was mir bei deiner Frage auffiel: Du mußt die Sprache Lua doch garnicht lernen! Das ist ein ganz wichtiger Punkt! Du mußt nur zum testen vielleicht die Grundrechenarten kennen (a = 1 + 2), mehr nicht. Womit du dich beschäftigen mußt ist, wie du Lua in deine MFC-Anwendung einbettest und der String aus dem Editfeld abgearbeitet werden soll. Mehr nicht. Schau dir also eher die Beispiele an, wie man Lua in sein C/C++ Programm einbettet. Die Lua-Sprache mußt du jetzt nicht lernen, außer vielleicht mal ein HelloWorld.
-
Ja, das wäre genau mein Dingen.
Werde heute mal ein wenig experimentieren, wenngleich
ich schon bei der Auswahl der Downloads ewig nach den passenden
Sourcen für VS2003 gesucht habe. (Ich hoffe VS2003 ist VS7 ?)
Jetzt suche ich gerade nach passenden MFC Demos zum nachschauen,
wie eine Variable x als x in dem String benutzt wird.
Überhaupt finde ich es programmiertechnisch als sehr interressant,
eine Variable aus einem String heraus ansprechen zu können.Gruß
thenoname
-
thenoname schrieb:
(Ich hoffe VS2003 ist VS7 ?)
VC95: VC5
VC97: VC6
VC2002: VC7
VC2003: VC7.1
VC2005: VC8