Deutsch
Forum

Mathe-Parser

 

Jac
de
Lad
Hallo Community!

Bis jetzt bin ich euch eigentlich nur auf die Nerven gegangen, hab unendlich viele Fragen gestellt und meine Progs und Codeschnipsel im Hintergrund gehalten. Naja, das liegt daran, dass meine Programme wahrescheinlich keine große Verwendung für euch haben. Wie auch immer. Ich arbeite im Moment an einem Taschenrechner, der nicht nur einfach rechnen soll, sondern auch Funktionen (auch in 3D) darstellen soll, sowie Terme umformen und auf lösen, Umgehen mit komplexen Zahlen etc...jedenfalls habe ich angefangen einen Parser für mathematische Ausdrücke zu schreiben. Ich denke, den könnt ihr vielleicht auch gebrauchen...allerdings ist der noch nicht fertig. Er beherrscht im Moment folgendes:
- Die Grundrechenarten +-*/ sowie (Division mit Abschneiden der Machkommastellen) und Potenzen (mit ^)
- Klammern (egal ob (), [], {}, <> oder gemischt, alles wird erkannt)
- Leerzeichen werden ausgefiltert
- negative Zahlen müssen nicht in Klammern gefasst werden (bitte ausprobieren)
- fängt folgende Fehler ab: Division durch 0, unausgewogene Klammern, nicht vorhandener Term, unerlaubte Zeichen im Term (noch unvollständig), falsche Klammeranordnung
- Groß- und Kleinschreibung wird ignoriert (für spätere trigonometrische Funktionen und so, jetzt noch nicht von Belang)
aber das Wichtigste: er orientiert sich an Punktrchnung vor Strichrechnung und Potenzen vor Punktrechnung!

Alle die im Zeit haben: Bitte probiert das Teil mal aus. Das ganze habe ich in eine PCU gepackt und ist im Prinzip eine Klasse. Hier ein Demo-Code:
 $U Parser.pcu=Math.
 {$iq}
declare term$,m#
Dim m#,Math
term$="-2*-12-3*6"
m#.Term&=Addr(term$)
cls
Print "PCU-Version: "+m#.Version()
Print "Term: "+term$
Print "Ergebnis: "+m#.Parse()
Print "Fehlernummer: "+Str$(m#.Error%)
Print "Fehlerstring: "+m#.ErrCode()
Print "Iterationen: "+Str$(m#.iterations%)
Print "Benötigte Berechnungszeit: "+Str$(m#.Time&)+" Millisekunden"
Print "--- Taste ---"
Dispose m#
waitinput

Ich will im Moment noch nicht viel verraten, das folgt alles, wenn der Parser einwandfrei funktioniert. Zum Ausprobieren einfach die Formel ändern, der Demo-Code ist eigentlich auch nicht schwer zu verstehen. Mir gehts, wie gesagt, im Moment nur darum Fehler aufzudecken. Ich hab bis jetzt keine gefunden, aber ich rechne mit ner Lawine Zuschriften. Naja, wenn das dann irgendwann richt funzt kann ich die Trigonometrie einbauen und Stochastik und so, dann werde ich auch eine vollständige Beschreibung liefern. Also wie gesagt: BITTE FEEDBACK, gerade wegen negativer Zahlen!

Jac

@Michael Wodrich: Vielen Dank für deine Hilfe! Ich hab leider die alte Version völlig verhunzt und hab deswegen nochmal von vorne angefangen. Aber einiges konnte ich wiederverwenden, vor allem wäre ich ohne deine Hilfe nicht so schnell vorangekommen!!!

Nachtrag:
Auf neue Version aktualisiert: 0.1.0.4 (Verbesserung der Erkennung negativer Zahlen, müsste jetzt perfekt sein, der Term kann jetzt auch Parameter der Prozedur Parse angegeben werden [hat Vorrang vor der Angabe mit .term&!]).

5 kB
Kurzbeschreibung: Matherparser 0.1.0.4 (09.02.2006)
Hochgeladen:09.02.2006
Ladeanzahl312
Herunterladen
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
09.02.2006  
 



Super Teil! Nurn andern Namen braucht es wohl.

Parser gibts ja viele...

Meine kurzen Tests hatte er fehlerlos Überstanden!
 
09.02.2006  
 




Jac
de
Lad
Gut, ich werde weiter dran feilen! Hab schon etliche Ideen. Name...hm...mir ist nichts besseres eingefallen als Matheparser (was es ja im Grunde ist). Wenn jemand Vorschläge hat...

Schade nur eine Rückmeldung; also wenn noch jemand einen Kommentar hat: hier, hier (winke, winke!)!!!

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.02.2006  
 




Frank
Abbing
Hi,

ich selber benötige so einen Parser nicht.
Aber wenn du XPIA nutzten würdest, könntest du auf viele hochwertige und schnelle Mathefunktionen und Fliesskommafunktionen zugreifen. Masms eigene Library masmlib32 bietet in dieser Richtung einiges. Mathe und Konvertierung (z.B. String nach Fliesaskommo und umgekehrt).
 
10.02.2006  
 




Jac
de
Lad
Hallo Community. Hm, auch wenn das Interesse nur mäßig ist mache ich das Teil fertig. Ich hatte es ja urspränglich auch nur für mich gedacht.

@Frank: Ja, ich weiß, aber ich bin noch nicht so Assemblerfirm, dass ich das hinkriegen würde. Deswegen mache ich das jetzt in Profan fertig.

Hier die Änderungen der neuen Version:

Parser 0.2.0.7:
- das * muss nicht mehr vor Klammern angegeben werden
- beherrscht ! (Fakultät) und ° (Umwandlung von Dezimalgrad in Bogenmaß)
- Aufeinanderfolgende Operatoren werden erkannt
- Potenzen mit der Basis 0 werden nun korrekt erkannt (vorher Fehlermeldung)
- Operatoren am Anfang oder Ende des Terms werden erkannt
- mehrere Dezimalpunkte in einer Zahl werden erkannt
- Führende Null von Kommazahlen 1<x<1 muss nicht angegeben werden
- Neue Funktionen: Sinus, Cosinus, Tangens, Cotangens, Sekans...(insgesamt 32 Stück)
- 3 Konstanten eingeführt: Pi, Eulersche Zahl und Phi (mit pi, ez und phi)

Und hier ein aktualisierter Testcode:
KompilierenMarkierenSeparieren
 $U Parser.pcu=Math.
 {$iq}
declare term$,m#
Dim m#,Math
term$="(sin(2*4-11^2)°)"
m#.Term&=Addr(term$)
cls
Print "PCU-Version: "+m#.Version()
Print "Größe der Struktur: "+Str$(SizeOf(m#))+" Byte"
Print "Term: "+term$
Print "Ergebnis: "+m#.Parse()
Print "Fehlernummer: "+Str$(m#.Error%)
Print "Fehlerstring: "+m#.ErrCode()
Print "Iterationen: "+Str$(m#.iterations%)
Print "Benötigte Berechnungszeit: "+Str$(m#.Time&)+" Millisekunden"
Print "--- Taste ---"
Dispose m#
waitinput

Naja, wer Lust hat...und für Fehler bin ich immer offen!

Jac

12 kB
Kurzbeschreibung: Matherparser 0.2.0.7 (10.02.2006)
Hochgeladen:10.02.2006
Ladeanzahl132
Herunterladen
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.02.2006  
 




Jac
de
Lad
Uups, hier noch schnell ein Bugfix (tut mir leid):

- Neue Funktion: lz (logarithmus zur Basis 2)
- Bugfix der Funktion cosec (hatte Compilieren verhindert)

Jac

12 kB
Kurzbeschreibung: Matherparser 0.2.1.8 (10.02.2006)
Hochgeladen:10.02.2006
Ladeanzahl165
Herunterladen
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.02.2006  
 




Jac
de
Lad
So, hier ist das vorerst letzte Update. Mangels Interesse poste ich hier nur die korrigierte Version, wer doch Interesse haben sollte kann das hier posten oder mit per Email an jac@parasun.de schreiben. Ich werde trotzdem weiterentwickeln, also wer Interesse hat bekommt ne gut ausgebaute Version. Letzte Änderungen (Version 0.3.0a.15):

- Bugfix wegen Fehler verhinderte Ausführen von Compilaten
- 6 neue Winkelfunktionen
- viele unmögliche Operationen werden nun erkannt
- Das Ergebnis wird nun auch in .Result$ zurückgegeben
- Mit großen Zahlen (Zahlen mit Exponenten) konnten Fehler auftreten, behoben
- Bugfix wegen Fehler verhinderte Ausführen von Compilaten
- 6 neue Winkelfunktionen
- viele unmögliche Operationen werden nun erkannt
- Das Ergebnis wird nun auch in .Result$ zurückgegeben
- Mit großen Zahlen (Zahlen mit Exponenten) konnten Fehler auftreten, behoben
- neue Operationen mit mehreren Paramtern (Stochastik, etc.)

Jac

17 kB
Kurzbeschreibung: Matherparser 0.3.0a.15 (11.02.2006)
Hochgeladen:11.02.2006
Ladeanzahl162
Herunterladen
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
11.02.2006  
 



Die PCU ist sehr nett - und das mit dem magelnden Interesse wird sich sicherlich auch ändern. Bitte vergiss nicht das dies hier eine sehr kleine Community ist.

Hast Du Interesse das die Unit hier: [...]  aufgelistet wird?
 
12.02.2006  
 




Michael
Wodrich
Die Beschreibung hört sich gut an, aber ich bekomme nur eine PCU Datei als Download.

Du hast da ja in kürzester Zeit ganz schön zugeschlagen...

...aber meine Kristallkugel ist grad in Reparatur, kannst Du nicht mal konkrete Funktionsnamen nennen, damit wir das mal durchtesten können?

ZIP mit PCU und Hilfedatei wäre gut.

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
12.02.2006  
 




Jac
de
Lad
@iF: Hm, noch nicht, weil die PCU noch nicht fertig ist. Ich habe auch grad wieder eine Latte von Fehlern entdeckt, die ich im Moment behebe (einige gehen sogar so tief, dass die komplette Berechnung durch Schlüsselwörter betroffen ist. Ich melde mich, wenn ich eine neue, verbesserte oder wenigstens gefixte Version fertig habe.

@Michael: Meinst du Funktionen der PCU oder Funktionen, die innerhalb des Terms erlaubt sind? Die PCU hat nur die Klasse, da gibts eigentlich nicht mehr zu erklären; die Funktionen in den Termen (hab im Moment 59 eingebaut) erkläre ich demnächst. Ich habe wie gesagt grad noch ein paar massive Probleme gefunden, sodass ich das erstmal korrigieren muss und mich dann um eine Dokumentation kümmern werde! Aber Standardfunktionen wie Sinus und Cosinus und so sind wie überall bezeichnet (Sin(3,141593) oder Cos(180°)). Wie gesagt eine Doku kommt bald.

Schön, dass doch ein wenig Interesse da ist!

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
12.02.2006  
 




Michael
Wodrich
[quote:bc8ba170c1]Schön, dass doch ein wenig Interesse da ist![/quote:bc8ba170c1]
Das liegt einfach nur daran, daß man nicht immer gleich sein gerade aktuelles Projekt beiseite legen kann...

Ich warte auf Nachschub von Dir, bis dahin ist bestimmt auch mehr Zeit verfügbar...

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
12.02.2006  
 



@Jac:

Um das Herstellen einer Hilfe deutlich zu beschleunigen habe ich dem XPSE paar kleine tolle Features für die Herstellung von Units beigebracht. Schau mal in die Hilfe.

a) Da schreibt sich das Dokumentieren wie von selbst.
b) jedem Kompilieren entsteht eine .def Datei. Darin stehen dann schonmal alle Procs.
c) ein paar offensichtliche Fehler werden angezeigt.
 
12.02.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

23.204 Betrachtungen

Unbenanntvor 0 min.
Sven Bader31.08.2023
iF06.12.2020
RudiB.15.04.2020
kustg02.03.2020
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie