![]() |
Re: Rechenprogramm
Ob dein Programm nun entsprechend Lange Zahlen Kann oder nicht ist eine Sache.
Ich nutze dein Programm mittlerweile gern und oft. Der Fade beigeschmack das mir "Interne" fehler, also üebrläufe und der leien, nicht mit geteilt werden ist allerdings sehr störend. Wenn du entsprechende Fehlerbehandlungen einbaust, wäre das für mich aber auch vollkommen OK. BZW, wie ists denn mit nem Flag das man setzen kann, das die Anwendung auf gänzlich große Zahlen umschaltet ? Denn zumindest bei mir ists ja so das ich nur 5 - 10 Rechnungen gleichzeitig habe, und wenn dann bei einer die Fehlermeldung käme, dann könnte ich sozusagen hergehn und einfach sagen, Umschalten und langsam rechnen, danach wieder im "schnell" modus ? oder ist das zu aufwendig ... |
Re: Rechenprogramm
Zitat:
Zitat:
Und noch mal zum "Mod"-Problem. Verwende lieber IMOD bzw || . x Mod y bzw. x|y ist bei mir definiert als x-y*Floor(x/y) und da ergibt dann 35 mod 3.6 = 2.6 |
Re: Rechenprogramm
Zitat:
z.B.: || und mod als "normales" MOD | und fmod als x-y*Floor(x/y) vorallem MOD kenn ich eigentlich mehr im Zusammenhang mir Integern/Ganzzahlen, aber wenn man sich das mal gemerkt hat, daß hier mod nicht so wie in Delphi und Co. arbeitet, dann ginge es auch so- |
Re: Rechenprogramm
nochmal zu den vielen Befehlen ...
z.B. TAutoComplete siehe ![]()
Delphi-Quellcode:
Also das was in der Liste steht, wird so angezeigt und auch eingefügt
uses AutoComplete;
MathAutoComplete: TAutoComplete; // Form.OnCreate SL: TStringList; SL := TStringList.Create; Try SL.Add('Abs()'); SL.Add('Sqr()'); ... SL.Add('Power(, )'); ... MathAutoComplete := TAutoComplete.Create(Memo2, SL); MathAutoComplete.CompleteStartLength := 2; Finally SL.Free; End; // Form.OnDestroy MathAutoComplete.Free; Per Standard wird ab dem 3. Zeichnen die Liste eingeblendet, hier hab ich's aber auf 2 eingestellt (CompleteStartLength), wobei auch bestimmt noch gehn würde. Und mit Strg+Leertaste wird die Liste sofort angezeigt. Achtung: Von der Komponente werden .OnKeyDown, .OnKeyUp, .OnKeyPress und .OnChange des Controls geändert. Also wenn/da du dort bestimmt selber was eingetragen hast, dann diese Komponente erst später hinzufügen, falls du diesen Ereignissen im Code etwas zuweist (im OI isses egal, da dieses eh vorher schon existiert) Es werden allerdings die alten/vorherigen Zuweisungen gemerkt und die Aufrufe weitergeleitet. |
Re: Rechenprogramm
Zitat:
Die Definitionen werden dann so sein : x MOD y (bzw. x|y) = Trunc( x )-Trunc( y ) * Trunc( Trunc( x ) / Trunc( y ) ) x RMOD y (bzw. x||y) = x - y * Floor( x / y ) (Das Floor ist nicht das aus Math.pas) x DIV y (bzw. x\y) = Trunc( Trunc( x ) / Trunc( y ) ) x RDIV y (bzw. x\\y) = Int( x / y ) Ich denke, daß ich in der 2ten Hälfte Juli die neue Version in die DP stellen werde. Neu sind ein paar zusätzliche Funktionen (die, die keiner braucht) und neu ist auch daß ich das unterste nach oben gekehrt habe. Intern steht da kein Stein mehr auf dem anderen. Nach Außen ist davon nichts zu sehen, außer daß die Auswertung um ca. 50 % schneller ist als vorher. Zitat:
Ist also nicht auf meinem Mist gewachsen. |
Re: Rechenprogramm
Ich habe eine neue Version des Rechenprogramms in #1 gestellt.
Wie schon im vorigen Beitrag angedeutet, habe ich den Teil, der Ausdrücke auswertet komplett überarbeitet. Ich gehe davon aus, daß ich den einen oder anderen Bug noch nicht gefunden habe...... Die im .zip file enthaltenen .dcu Dateien parser_base.dcu parser_parse.dcu parser_errors.dcu können in eigene Programme eingebunden werden. Näheres hierzu steht im Helpfile unter "Einbinden in eigene Programme". Änderungen des Parsers Funktion RSum Die Funktionen, die Listen verarbeiten können, wurden ergänzt um die Funktion RSum(a,b,c,...) die die Summe der Quadratwurzeln ermittelt. Funktionen FMin, FMax, FAvg, FSum, FMul, FQSum und FRSum In Anlehnung an die Funktionen Min, Max, Avg, Sum, Mul, QSum und RSum wurden die Funktionen FMin, FMax, FAvg, FSum, FMul, FQSum und FRSum implementiert. Ein Beispiel : FSum( a, b, 1 / x ! ) gibt die Summe aus 1/a! + 1/(a+1)!, +..., + 1/b! zurück Zum Beispiel FSum(0,20,1/x!) errechnet e (2,718...) Die ersten beiden Parameter sind Integerzahlen im Bereich 0 bis 2^31-1, der dritte Parameter ist ein beliebiger Ausdruck, der eine Variable (x) enthalten muß (soll). x wird dann von a bis b hochgezählt und der Ausdruck mit diesem Wert von x ausgewertet. Aus den Ergebnissen der Ausdrücke wird dann die Summe gebildet (oder das Minimum, Maximum etc. bei den anderen Fxx-Funktionen) Funktion Ord Die Funktion Ord(x) wurde implementiert. Innerhalb der () muß genau 1 Zeichen stehen, dessen numerischer Wert zurückgegeben wird. Das Zeichen steht nicht in Anführungszeichen und es kann auch das "(" oder ")" sein. Ord(() und Ord()) (auch wenn's bescheuert aussieht) sind gültige Ausdrücke, die 40 bzw 41 als Resultat liefern. Das Gegenstück zu Ord, also Chr ist hier nicht als Funktion implementiert, aber als Ausgabeoption vorhanden. Zum Beispiel Chr 65 oder )65 gibt ein A aus. Funktion Erase Die Funktion Erase(name, name, ... ) wurde implementiert. Die Parameterliste enthält beliebig viele, durch Kommas voneinander getrennte Namen von Variablen, die gelöscht werden sollen. Ist die Parameterliste leer, werden alle Variablen gelöscht. Die Anzahl gelöschter Variablen wird als Resultat zurückgegeben. Funktionen EqC und EqE Die Funktionen EqC und EqE zum lösen von Gleichungen erster bis vierter Ordnung wurden implementiert. Beispiel: EqE( 2x² + 2x - 12 ) ergibt 2 EqE( 2x² + 2x - 12, #2 ) ergibt -3 (die zweite mögliche Lösung) Bei der Funktion EqC wird nicht der Text der Gleichung eingegeben, sondern nur die Koeffizienten. EqC( 2, 2, - 12 ) ergibt 2 EqC( 2, 2, - 12, #2 ) ergibt -3 (die zweite mögliche Lösung) Ergebnisse ins Clipboard kopieren Eine Zeile kopieren: Rechtsklick in Zeile kopiert diese Zeile ins Clipboard. Mehrere Zeilen kopieren: In erste zu kopierende Zeile zeigen. Rechte Mousetaste drücken. Zeiger mit gedrückter rechter Mousetaste in letzte zu kopierende Zeile ziehen. Mousetaste loslassen. Wenn dezimale-, hexadezimale-, binäre Zahlen oder Zahlen mit anderer Basis Trennzeichen wie Kommas oder Blanks enthalten, werden diese entfernt, es sei denn, beim loslassen der rechten Mousestaste ist die Shift-Taste gedrückt. Alle Zeilen kopieren : Strg-A bzw Shift-Strg-A drücken Die Bedeutung von @ und # wurden vertauscht also # steht für das Resultat der vorigen Zeile #x steht für das Resultat von Zeile x (wobei x eine Folge von Ziffern ist) #-x steht für das Resultat aus Zeile (aktuelle Zeile - x) x@Ziffern = Zahl mit der Basis x Warum die Änderung?: Weil ich registriert habe, daß ich oft und gern auf die Ergebnisse vorheriger Zeilen zugreife und # leichter zu tippen ist als @ Für Div und Mod wurden die Namen der Operatoren geändert Div (bzw. " \ ") ist das frühere IDiv (bzw. " \\ ") RDiv (bzw. " \\ ") ist das frühere Div (bzw. " \ ") Mod (bzw. " | ") ist das frühere IMod (bzw. " || ") RMod (bzw. " || ") ist das frühere Mod (bzw. " | ") |
Re: Rechenprogramm
Zitat:
(vermute einfach mal, daß sie damit kompiliert wurden) DCUs können nur mit der Delphi-Version verwendet werden, womit sie auch kompiliert wurden (manchmal sogar auch noch nur mit dem selben Servicepack), da sie Compilerspezifig sind ... also nur von diesem Compiler verstanden werden. |
Re: Rechenprogramm
@himitsu:
Das war mir nicht bekannt. Danke für den Hinweis. Und : Ja, mit Delphi 2005 kompiliert. |
Re: Rechenprogramm
[nicht wichtig]
mathe parser sind nur'n paar Stichworte für die Suchfunktion |
Re: Rechenprogramm
Kleiner Bug:
Ausgabe = Dec Präfix ausgeben (Lang oder Kurzform) Ergebnis = 0 :arrow: Gleitkommadivision durch Null |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz