Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Rechenprogramm (https://www.delphipraxis.net/134885-rechenprogramm.html)

Corpsman 30. Jun 2009 10:40

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 ...

Amateurprofi 2. Jul 2009 12:17

Re: Rechenprogramm
 
Zitat:

BZW, wie ists denn mit nem Flag das man setzen kann, das die Anwendung auf gänzlich große Zahlen umschaltet ?
Sicherlich werde ich so etwas irgndwann einmal implementieren, jedoch wann und in welcher Form, steht in den Sternen (hat für mich einfach eine sehr geringe Priorität, gewissermaßen "below onIdle").

Zitat:

der ist das zu aufwendig ...
Aufwendig? Ja. Zu Aufwendig? Nein, eigentlich nicht.

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

himitsu 2. Jul 2009 13:03

Re: Rechenprogramm
 
Zitat:

Zitat von Amateurprofi
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

wäre es dann nicht etwas besser, wenn es andersrum definiert wäre?

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-

himitsu 2. Jul 2009 13:29

Re: Rechenprogramm
 
nochmal zu den vielen Befehlen ...

z.B. TAutoComplete siehe http://www.delphipraxis.net/internal...=976287#976287
Delphi-Quellcode:
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;
Also das was in der Liste steht, wird so angezeigt und auch eingefügt

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.

Amateurprofi 3. Jul 2009 00:32

Re: Rechenprogramm
 
Zitat:

Zitat von himitsu
wäre es dann nicht etwas besser, wenn es andersrum definiert wäre?
z.B.:
|| und mod als "normales" MOD
| und fmod als x-y*Floor(x/y)

Werd ich ändern, was natürlich auch eine Änderung bei div und idiv nach sich zieht.
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:

Zitat von himitsu
vorallem MOD kenn ich eigentlich mehr im Zusammenhang mir Integern/Ganzzahlen

Ich habe meine ersten Programmier-Erfahrungen mit APL gemacht. Da ist das so definiert wie ich implementiert hatte.
Ist also nicht auf meinem Mist gewachsen.

Amateurprofi 28. Jul 2009 08:22

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. " | ")

himitsu 28. Jul 2009 09:09

Re: Rechenprogramm
 
Zitat:

Zitat von Amateurprofi
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".

Es sollte vielleicht noch erwähnt werden, daß diese nur in Delphi 2005 verwendet werden konnen
(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.

Amateurprofi 28. Jul 2009 15:25

Re: Rechenprogramm
 
@himitsu:
Das war mir nicht bekannt. Danke für den Hinweis.
Und : Ja, mit Delphi 2005 kompiliert.

himitsu 10. Nov 2009 08:03

Re: Rechenprogramm
 
[nicht wichtig]

mathe parser

sind nur'n paar Stichworte für die Suchfunktion

blablab 26. Feb 2010 20:10

Re: Rechenprogramm
 
Kleiner Bug:

Ausgabe = Dec
Präfix ausgeben (Lang oder Kurzform)
Ergebnis = 0
:arrow:
Gleitkommadivision durch Null

Amateurprofi 26. Feb 2010 23:50

Re: Rechenprogramm
 
Zitat:

Zitat von blablab
Kleiner Bug:

Ausgabe = Dec
Präfix ausgeben (Lang oder Kurzform)
Ergebnis = 0
:arrow:
Gleitkommadivision durch Null

@blablab:
Das ist mir jetzt irgenwie peinlich.
Neue Version in #1

Ich wollte ohnehin demnächst ein neue Version hochladen, jedoch ist
die nocht nicht ganz fertig.
Also nicht wundern, wenn es hier und da hakt....

Was ist neu ?:

Schon in der vorigen Version konnte man auf Ergebnisse anderer
Zeilen zugreifen. (siehe #46)

Neu: ##
Ergibt die Summe der darüberliegenden Zeilen
Die Zeilen werden von unten nach oben summiert. Wird hierbei
eine Zeile ohne Ergebnis (also leer oder Fehler), wird die Summenbildung
abgebrochen und der bis dahin ermittelte Wert ausgegeben.

Neu : ##x
Die darüberliegenden x Zeilen werden summiert, mit der gleichen Logik wie oben.

Neu : Summe in Statuszeile
Im rechten Feld der Statuszeile wird die Summe aller Zeilen, die ein gültiges
Ergebnis haben, gezeigt.

Neu : Monadische Funktionen ohne Klammer
Monadische Funktionen können dann, wenn der Parameter ein Wert ist (also ein Variablenname,
ein Konstantenname, eine Zahl, etc. jedoch nicht ein Ausdruck wie 3*3), ohne Klammer
geschrieben werden.
Beispiel
Sqr 5 ergibt 25
Sqr 5 * 5 ergibt 125
Einzige Ausnahme ist die Funktion Ord.
Zur Zeit ergeben sich hierbei noch Konflikte, wenn eine gleichnamige Variable
definiert ist oder ein Variablenname der mit dem/den Anfangsbuchstaben des
Funktionsnamens identisch ist.
Beispiel
s:=25
Sqr 5 ergibt einen Fehler "Unbekannter Name", weil das s von Sqr als Variable erkannt wird,
und dann qr nicht auswertbar ist.
Das wird noch zu verbessern sein.

Neu : Farben
Ich habe mich in den letzten Tagen etwas mit Farben beschäftigt und
als Resultat Funktionen zur Umrechnung von Farbwerten in verschiedene
Farbmodelle implementiert.
Unterstützt werden RGB, HSV, HSL, CMY, CMYK, HSB (=HSV), HSI (=HSL)
Funktionen :
CvtClr(von, nach, Wert1, Wert2, Wert3, [Wert4])
von und nach sind die Bezeichnungen der Farbmodelle.
cvtclr(rgb,hsb,250,20,0) ergibt H:5 S:100 B:98
In welchen Bereichen die einzelnen Farbanteile sein müssen kann eingestellt
werden. Hierzu empfehle ich die Hilfe
(Implementierte Funktionen > nach Kategorien > sonstiges) und dann die letzte der Liste.
Weiterhin sind Funktionen implementiert deren Namen sich aus den Bezeichnungen
der Farbmodelle ergeben.
Also z.B RgbToHsb oder HsbToCMY etc.
RgbToHsb(250,20,0) ergäbe wie oben H:5 S:100 B:98

Neu : Eingabefeld
Das war bisher ein TMemo, jetzt ein TEdit mit all seinen Vorteilen....

Neu : Nochmal Farben
Ich hab einen kleinen ColorPicker mit Bildschirmlupe implementiert
der mit F11 oder mit Menu > Extras > Colorpicker aufgerufen wird.
Das Teil ist uralt und war bisher ein eigenständiges Programm.
Ich bin zur Zeit dabei es etwas aufzupeppen, daß Ganze ist also noch in der Entwicklungsphase.
In der Hilfe ist der Colorpicker auch noch nicht enthalten, ich hab deshalb einen
separaten File "Colorpicker.hlp" beigefügt, der auch noch nicht fertig ist, aber zumindest einen kurzen
Einblick gibt.
Vorschläge sind Willkommen.

blablab 8. Mär 2010 03:45

Re: Rechenprogramm
 
Wow, da ist ja noch einges dazugekommen!
Allerdings find ich, dass der umfangreiche Colorpicker eigentlich schon ein eigenes Programm wert ist.
Dazu gibt es bestimmt viele verschiedene Ansichten, aber ich finde ein Programm sollte möglichst nur eine einzige Funktion haben. Lieber 10 verschiedene Programme, die ihre Aufgabe gut beherrschen als ein riesen Programm, das dann alles kann (aber nichts so wirklich richtig)...
Dann wär es vielleicht auch noch interessant, wenn man eine Farbe vom Bildschirm auswählen könnte. Allerdings für einen Rechner fänd ich das schon ein "bisschen" zu übertrieben...

Ach eins noch: du hast Prefixe statt Präfixe geschrieben.

Amateurprofi 9. Mär 2010 10:21

Re: Rechenprogramm
 
Zitat:

Zitat von blablab
Dann wär es vielleicht auch noch interessant, wenn man eine Farbe vom Bildschirm auswählen könnte.

Kann man.
Wenn Du im Colorpicker bist, befindet sich unten ca. in der Mitte ein Button mit einer Lupe.
Klick den (linke Mouse-Taste) und halte die Taste gedrückt. (Die Lube wird dann gelb angezeigt)
Solange die Taste gedrückt ist kannst du auf dem Bildschirm herumfahren und der Ausschnitt um den Mousecursor herum wird in das Feld kopiert, in dem normalerweise das Farbspektrum dargestellt wird.
Die Farbe des Pixels unter dem Cursor wird als "aktuelle Farbe" übernommen.

Nach lösen der Mousetaste bleibt der zuletzt gewählte Ausschnitt erhalten. (Die Lube wird dann rot angezeigt)
Den Bildausschnitt kannst du dann vergrößern/verkleinern/verschieben....
Wenn du den Button noch einmal klickst, wird die Bildschirmlupe ausgeschaltet.

Amateurprofi 13. Jul 2010 21:16

AW: Rechenprogramm
 
Ich habe eine neue Version (2.3.1.1) des Parsers hochgeladen.

Was hat sich geändert ?:

Es gibt jetzt eine Context-sensitive Hilfe. Mehr dazu weiter unten.

Bisher konnten bei Funktionen, die nur einen Parameter haben die ( ) weggelassen werden.
Das geht jetzt, mit gewissen Einschränkungen für alle (genauer fast alle) Funktionen.
Die Einschränkungen sind :
Bei Funktionen die einen oder zwei Parameter haben, muß der letzte Parameter ein Wert (nicht ein Term) sein.
Beispiele
Power 2, 5 entspricht Power(2, 5)
Power 2, 5 + 3 entspricht nicht Power(2, 5 + 3) sondern Power(2, 5) + 3
Bei Funktionen mit mehr als 2 oder unbestimmter Anzahl Parametern müssen alle Parameter Werte (nicht Terme) sein.
Bei folgenden Funktionen muß die Parameterliste in ( ) stehen
FMin, FMax, FSum etc., EqE, Encode, Erase

Die Funktionen Date, Time DT wurden entfernt.

Die Funktionen Ld / ALd (Logarithmus dualis und seine Umkehrung) wurden hinzugefügt.
Warum ?: Wenn es die Funktionen Ln und Lg gibt darf man (m.E.) erwarten, das es auch Ld gibt.

Bei der Eingabe eines Datums ist jetzt das Jahr Optional.
Wird es nicht angegeben wird das Jahr aus dem System-Datum genommen.
Die Eingabe 15.07. würde dann als 15.07.2010 interpretiert.

Bei der Eingabe von Winkeln und Positionsangaben war bisher die Schreibweise g° m' s.ss" zwingend.
Jetzt kann auch g:m:s.ss geschrieben werden, wobei s.ss optional ist.
Diese Schreibweise kollidiert natürlich mit dem Eingabeformat für Zeiten (hh:mm:ss).
Das Programm unterscheidet wie folgt :
Ist der erste Wert (g oder hh) größer 23 dann handelt es sich um einen Winkel.
ist der erste Wert <= 23 hat aber (durch führende 0en) mehr als 2 Ziffern, dann handelt es sich um einen Winkel.
Ist der letzte Parameter (ss oder s.ss) ein reeller Wert dann handelt es sich um einen Winkel.

Eine Funktionalität die schon immer vorhanden (aber nicht zugänglich) war, ist das Testen der Performance des Parsers.
Mit Menu > Test > Performancetest kann getestet werden wie lange der Parser braucht, um den Ausdruck in der aktuellen Zeile auszuwerten. Auswerten heißt hier, daß dem Parser der Text übergeben wird und der Parser den Text auswertet und das Ergebnis liefert.

Ein paar kleine Bugs wurden beseitigt.

Zur Context-sensitiven Hilfe :
Ich habe 3 "Systeme" implementiert.

Anzeige von Hilfetexten zu einem im Eingabefeld stehenden Text
Hierzu wird das Caret (nicht der Mouse-Cursor) vor, hinter oder in den Text gestellt (oder der Text selektiert) und die F1 Taste gedrückt (oder Menu > Hilfe > Context sensitive Hilfe gwählt).
Wenn der Text der Name einer Funktion, eines Operators, einer Ausgabeanweisung, einer Konstanten ist, oder auch nur ein Sonderzeichen, das in der Syntax eine bestimmte Bedeutung hat, dann wird ein entsprechender Hilfetext angezeigt.

Anzeige von Funktionsnamen mit ihren möglichen Parameterlisten.
Hierzu wird das Caret hinter den Suchtext gestellt (oder der Suchtext selektiert) und Strg Space gedrückt (oder Menu > Hilfe > Funktionsparameter gewählt).
In einem Listenfeld werden alle Funktionen gezeigt die zu dem Suchtext passen.
Wie entschieden wird ob ein Funktionsname zum Suchtext paßt steht im HelpFile unter Context sensitive Hilfe.

Anzeige des Sprachschatzes des Parsers
Hierzu wird Shift-Strg-Space gedrückt (oder Menu > Hilfe > Sprachreferenz gewählt).
In einem Listenfeld werden in einer Baumstruktur alle implementierten Funktionen, Operatoren, Ausgabeanweisungen, Konstanten, Variablen, sowie alle Sonderzeichen, die irgendeine Bedeutung für den Parser haben, angezeigt und können von dort mit Doppelklick in das Eingabefeld kopiert werden. Alternativ kann durch Rechtsklick ein zugehöriger Hilfetext angezeigt werden.

Amateurprofi 12. Apr 2018 10:33

AW: Rechenprogramm
 
Das letzte Update zu diesem Programm hatte ich im Juli 2010 online gestellt.
Im Laufe der Zeit habe ich immer mal wieder Kleinigkeiten geändert und stelle deshalb heute in #1 die aktuelle Version zum Download bereit.
Was hat sich geändert?!

Der Name des Programms
Bisher "Parser", jetzt "Calculator"

Delphi-Version
Bisher Delphi 2005, jetzt Delphi XE 2

BigNumbers
Wurden in #39 erwähnt und werden jetzt unterstützt.
Realisiert wurde das durch einen zweiten "Betriebs-Modus", in den mit F4 umgeschaltet werden kann (In der Statusleiste steht dann im zweiten Panel von links ein gelb hinterlegtes B).
In diesem Modus werden diverse Funktionen des "Normal-Modus" nicht unterstützt aber die gängigen Sachen sollten funktionieren.
Intern werkeln da im Prinzip Velthuis.BigDecimals.pas und Velthuis.BigIntegers.pas, beide für meine Zwecke etwas modifiziert.

Lange Zahlen
Das wurde hier http://www.delphipraxis.net/175298-z...-ausgeben.html einmal thematisiert. Im Rahmen der BigDecimals habe ich das in Form eines separaten Dialogs implementiert. Dieser kann mit F12 geöffnet werden, oder auch durch Strg-Linksklick in ein Rechenergebnis. Schaltet mal in den BigDecimal-Modus und rechnet 333^333 und klickt bei gedrückter Strg-Taste mit der linken Maustaste ins Rechenergebnis. Kleines Gimmick am Rande: Man kann sich hier die ausgegebenen Zahlen auch vorlesen lassen.

Farben
Im integrierten "ColorPicker" wurde hinzugefügt.
- Das Farbmodell "XYZ"
- RAL-Classic-Farben
- CCS3-Farben
- Farben aus Wellenlängen (für Wellenlängen von 380nm bis 780nm)
RAL-Farben und Farben aus Wellenlängen sind auch im Hauptfenster des Programms als Konstanten verfügbar. Zum Beispiel ins Eingabefeld eintippen Ral2005 oder wl700.
Alternativ kann man sich die Farblisten auch mit Shift-Strg-F1 in der Sprachreferenz anschauen.

Funktionen
Der Funktionsumfang ist nur geringfügig verändert.
Zum einen sind wegen des zusätzlichen Farbmodells die Funktionen XYZtoRGB, XYZtoHSB, etc.
und RGBtoXYZ, HSBtoXYZ etc. hinzugekommen. Zum anderen einige, die nur für mich selbst eine gewisse Bedeutung haben.
Erwähnenswert vielleicht 2 Funktionen zur Ermittlung der Levenshtein-Distanz und der Damrau-Levenshtein-Distanz zwischen 2 Texten.
Beispiele:
Lev (Delphi-Praxis, Delhi-Paxos) ergibt 3
Lev(Hamburg, Hambrug) ergibt 2
DamLev(Hamburg, Hambrug) ergibt 1

Zugriff auf Ergebnisse anderer (über der aktuellen Zeile liegenden) Zeilen.
Da hab ich was geändert und weil dieses Thema im Thread mehrfach angesprochen wurde:
Schaut euch das in der Hilfe an.
Menu > Hilfe > Hilfe
In der Hilfe auf "Syntax von Ausdrücken klicken"
Dort "Zahl" klicken und dann auf "Ein Verweis auf Ergebnisse anderer Zeilen".

Fehleranzeige
Bei der bisherigen Version befindet sich im unteren Bereich des Fensters die "Fehleranzeige", in der bei einem Fehler die Position des Fehlers und ggfs. weiterführende Informationen gezeigt werden.
Ich habe im Laufe der Zeit gemerkt dass die (für mich) eher überflüssig ist und nur Platz wegnimmt.
Deshalb kann man die jetzt mit der F3-Taste aus- und einblenden.

Bildschirminhalte kopieren
Ermöglicht, den Bildschirm, oder ein Programmfester oder ein Control als Bitmap ins Clipboard zu kopieren oder als Bitmap oder JPEG in einer Datei zu speichern.
Beschrieben ist das in der Hilfe:
Menu > Hilfe > Hilfe.
In der Hilfe auf "Bildschirminhalte kopieren" klicken.

Hilfe
Es wurde eine "objektbezogene Hilfe" hinzugefügt.
Mit Alt-F1 wird ein Hilfetext zu dem Objekt angezeigt, auf das der Mauszeiger zeigt.
Diese funktioniert im Hauptfenster und in allen untergeordneten Fenstern.

Tutorial
Das ist nicht neu und ich erwähne es nur, weil es den Einstieg erleichtert.
Mit F2 (nur im Normal-Modus) könnt ihr ein kleines Tutorial starten.
Wie das funktioniert ist in der Hilfe beschrieben.
Menu > Hilfe > Hilfe.
In der Hilfe auf "Dialoge" klicken und dort auf "Einführung Dialog".

Ich gehe davon aus, dass auch jetzt noch einige Bugs enthalten sind.

KodeZwerg 12. Apr 2018 11:02

AW: Rechenprogramm
 
Liste der Anhänge anzeigen (Anzahl: 2)
Beim CTRL+Linksklick auf Ergebniss erscheint bei mir ein Fehler (siehe Bild 1)
worauf ich keine Kontrolle über das Window zurückerlange,
ein klick auf's [X] vom Hauptfenster verabschiedete sich mit Bild #2.
Ich nutze Windows 10 / 64 Bit.

Amateurprofi 12. Apr 2018 11:21

AW: Rechenprogramm
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398921)
Beim CTRL+Linksklick auf Ergebniss erscheint bei mir ein Fehler (siehe Bild 1)
worauf ich keine Kontrolle über das Window zurückerlange,
ein klick auf's [X] vom Hauptfenster verabschiedete sich mit Bild #2.
Ich nutze Windows 10 / 64 Bit.

Kann ich leider nicht nachvollziehen.
Bei mir (Windows 7 64 Bit) arbeitet beides korrekt.

günni0 12. Apr 2018 11:54

AW: Rechenprogramm
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398921)
Beim CTRL+Linksklick auf Ergebniss erscheint bei mir ein Fehler (siehe Bild 1)
worauf ich keine Kontrolle über das Window zurückerlange,
ein klick auf's [X] vom Hauptfenster verabschiedete sich mit Bild #2.
Ich nutze Windows 10 / 64 Bit.

Das habe ich gerade mit Windows 10 64 Bit (10.0.16299) auch mal getestet.
Keinerlei Probleme und Fehlermeldungen.

Delphi-Laie 12. Apr 2018 12:04

AW: Rechenprogramm
 
Zwei Beobachtungen nach dem Programmstart (nur Kleinigkeiten):

1. In der Standardgröße nach dem erstmaligen Programmstart sind nicht alle Einträge in der Statusleiste (unten) sichtbar. Erst beim Vergrößern des Formulares offenbaren sich mehr.

2. "Anzahl Ziffern vor dem Eingabecaret" ist leer, obwohl die Anzahl 0 gemeint ist.

Amateurprofi 13. Apr 2018 09:01

AW: Rechenprogramm
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1398930)
Zwei Beobachtungen nach dem Programmstart (nur Kleinigkeiten):

1. In der Standardgröße nach dem erstmaligen Programmstart sind nicht alle Einträge in der Statusleiste (unten) sichtbar. Erst beim Vergrößern des Formulares offenbaren sich mehr.

2. "Anzahl Ziffern vor dem Eingabecaret" ist leer, obwohl die Anzahl 0 gemeint ist.

Danke.

Zu 1.
Bei der Breite des Formulars wurde/wird nur sichergestellt, dass das Eingabefeld und das Ausgabefeld je min 100 Pixel breit sind und dass das Menu einzeilig bleibt.
Ich hab das so geändert, dass beim ersten Programmstart alle Panels der StatusBar sichtbar sind.
Es bleibt aber weiter so, dass das Fenster manuell schmaler gemacht werden kann. Bei weiteren Starts sollte dann die Breite so sein, wie sie beim Schließen des Formulars war.

Zu 2.
Hab ich geändert. Lag daran, dass diese Anzeige nur im OnSelectionChange des Eingabefeldes (Ist ein TRichEdit) geändert wurde.
Jetzt auch im OnCreate des Formulars.

Geänderte Version (3.3.1.1) in #1.

KodeZwerg 13. Apr 2018 09:40

AW: Rechenprogramm
 
Ich habe noch ein wenig herumprobiert, der Fehler den ich bekomme passiert wenn man zu schnell TextToSpeech mit Englisch On/Off aufruft, über das Menü. (Fehler kommt nur wenn man übers Menü bedient, Knöpfe arbeiten sauber.)

Da ist auch ein mini-Fehler drinn, vielleicht ist es ja auch so gedacht:
Beim Vorlesen, erzählt die Stimme korrekt Vorkommazahlen, aber ein Komma wird als Punkt gelesen und Nachkommastellen werden einzeln gelesen und nicht als ein Wert.
Also aus 123,45 wird Einhundertdreiundzwanzig Punkt Vier Fünf. Aber super Job mit den Vorkommazahlen!

Englische Sprache klingt Deutsch, ich glaube Sapi 5 hat da mehrere Aus-/Sprachen integriert.

Auch eine mini-Unzugänglichkeit, wenn man Werte mit Tausendermarkierungen einfügt, kann Dein Programm nichts mit dem Wert anfangen. Beispiel: Wenn man "100.000.000,00" eingibt/einfügt, sagt der es ist ein falsches Datum und andersrum "100,000,000.00" = Ende erwartet.

Dein Hilfesystem find ich mehr als gelungen, es ist "Yeah!"
Auch die zwei verschieden Arten wie man sich einen Fehler angucken kann = 1A gelöst, Hut ab!
Offene Wünsche zu diesem Projekt hab ich keine, nur eventuell noch ein mini-Goodie, wenn man bei Fehler auf's [i] klickt, hast du ja alles richtig gemacht, alles warum Fehler ausgelöst wurde wird angezeigt, vielleicht kann man da noch eine Zeile einfügen mit einem Vorschlag wie man es richtig machen könnte oder was für eine Eingabe Dein Programm an dieser Stelle erwartet, so als Beispiel-Text.

günni0 13. Apr 2018 09:44

AW: Rechenprogramm
 
Zitat:

und Nachkommastellen werden einzeln gelesen und nicht als ein Wert.
Ist es nicht sogar mathematisch korrekt jede Zahl nach dem Komma einzeln aufzusagen?

(1,50)
Eins Komma fünf null ist soweit ich weiß richtig.
Eins Komma fünfzig nicht.

KodeZwerg 13. Apr 2018 10:05

AW: Rechenprogramm
 
Was hat Ausprache mit Mathe am Hut? Wo ich herkomme werden Nachkommazahlen als ein Wert gesprochen, also aus 1,50 wird "Eins Komma Fünfzig" und nicht "Eins Komma Fünf Null". Sprechen bei euch Kassierer im Supermarkt echt so?

günni0 13. Apr 2018 10:10

AW: Rechenprogramm
 
Es ist ein Rechenprogramm und ich erwähnte lediglich, dass ich denke "Eins komma fünf null" sei korrekt.
So habe ich es gelernt. Aber jeder lernt anders. Dennoch bin ich mir sicher, dass ein Doktor der angewandten Mathematik (mein ehemaliger Lehrer) weiß wovon er redet.

Ergo denke ich, dass das TextToVoice richtig arbeitet.

SProske 13. Apr 2018 10:24

AW: Rechenprogramm
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399063)
Was hat Ausprache mit Mathe am Hut? Wo ich herkomme werden Nachkommazahlen als ein Wert gesprochen, also aus 1,50 wird "Eins Komma Fünfzig" und nicht "Eins Komma Fünf Null". Sprechen bei euch Kassierer im Supermarkt echt so?

Das ist aber auch nur bei 2 Nachkommastellen im Zusammenhang mit bestimmten Maßeinheiten so, also

Ein Euro Fünzig (Cent)
Drei Meter Achtundsiebzig (Zentimeter)

Sobald man das Komma selbst mitspricht, bin ich es gewohnt, dass die einzelnen Zahlen gesprochen werden, also

Eins Komma Fünf Null
Drei Komma Sieben Acht

KodeZwerg 13. Apr 2018 10:27

AW: Rechenprogramm
 
Ok, ein Professor der Mathematik sagt Nachkommastellen einzeln auf da er auch meist mehr als zwei Nachkommastellen hat.
Also wenn der Dir "Pi" aufschlüsselt, sagt er logischerweise alles einzeln.
Wiederum wenn man Einkaufen geht und nur zwei Nachkommastellen sind, wer bitteschön (abgesehen von Dir?), spricht denn Nachkommastellen noch einzeln aus? Selbst dein Prof. (ohne das ich Ihn kenne) sagt nicht er habe für "Eins Komma Fünf Null" Euro eingekauft sondern für "Eins Komma Fünfzig", oder ist der echt so abgedreht, dann nehm ich alles zurück.

Jumpy 13. Apr 2018 10:33

AW: Rechenprogramm
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399069)
Selbst dein Prof. (ohne das ich Ihn kenne) sagt nicht er habe für "Eins Komma Fünf Null" Euro eingekauft sondern für "Eins Komma Fünfzig", oder ist der echt so abgedreht, dann nehm ich alles zurück.

Kenn jetzt den Prof. auch nicht, aber "Eins Komma Fünfzig" wird er bestimmt nicht sagen, eher so "Eins-Fünfzig" oder "Eins-Fuffzich" wenn er aus Köln kommt :-D.

KodeZwerg 13. Apr 2018 10:37

AW: Rechenprogramm
 
Ja schon klar, aber bei TextToSpeech sollte schon eine Trennung passieren, ich spreche übrigens auch "eins-fuffzich" :-D

günni0 13. Apr 2018 10:42

AW: Rechenprogramm
 
Zitat:

Wiederum wenn man Einkaufen geht und nur zwei Nachkommastellen sind, wer bitteschön (abgesehen von Dir?), spricht denn Nachkommastellen noch einzeln aus?
Wo habe ich behauptet, dass ich (beispielsweise beim Einkaufen) Nachkommastellen einzeln ausspreche?

Ich schrieb
Zitat:

Ist es nicht sogar mathematisch korrekt jede Zahl nach dem Komma einzeln aufzusagen?
Da ist das Wort mathematisch drin und wir befinden uns hier in einem Thread zu einem Rechenprogramm ;)

Ist ja auch egal. Ist alles off-topic und das möchte der Themenersteller sicherlich nicht lesen!

Delphi-Laie 13. Apr 2018 13:39

AW: Rechenprogramm
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399063)
Was hat Ausprache mit Mathe am Hut? Wo ich herkomme werden Nachkommazahlen als ein Wert gesprochen, also aus 1,50 wird "Eins Komma Fünfzig" und nicht "Eins Komma Fünf Null". Sprechen bei euch Kassierer im Supermarkt echt so?

Nun, abgesehen davon, daß die 0 redundant ist, was vermutlich jeder hier weiß, sprechen die Kassierer (beiderlei Geschlechtes) doch vielmehr "Ein Euro fünfzig" oder, wenn sie eines schnodderig-ungepflegten Deutsches sich bedienen, "Ein Euro fuffzig".

Amateurprofi 13. Apr 2018 15:37

AW: Rechenprogramm
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399057)
Ich habe noch ein wenig herumprobiert, der Fehler den ich bekomme passiert wenn man zu schnell TextToSpeech mit Englisch On/Off aufruft, über das Menü. (Fehler kommt nur wenn man übers Menü bedient, Knöpfe arbeiten sauber.)

Da ist auch ein mini-Fehler drinn, vielleicht ist es ja auch so gedacht:
Beim Vorlesen, erzählt die Stimme korrekt Vorkommazahlen, aber ein Komma wird als Punkt gelesen und Nachkommastellen werden einzeln gelesen und nicht als ein Wert.
Also aus 123,45 wird Einhundertdreiundzwanzig Punkt Vier Fünf. Aber super Job mit den Vorkommazahlen!

Englische Sprache klingt Deutsch, ich glaube Sapi 5 hat da mehrere Aus-/Sprachen integriert.

Auch eine mini-Unzugänglichkeit, wenn man Werte mit Tausendermarkierungen einfügt, kann Dein Programm nichts mit dem Wert anfangen. Beispiel: Wenn man "100.000.000,00" eingibt/einfügt, sagt der es ist ein falsches Datum und andersrum "100,000,000.00" = Ende erwartet.

Dein Hilfesystem find ich mehr als gelungen, es ist "Yeah!"
Auch die zwei verschieden Arten wie man sich einen Fehler angucken kann = 1A gelöst, Hut ab!
Offene Wünsche zu diesem Projekt hab ich keine, nur eventuell noch ein mini-Goodie, wenn man bei Fehler auf's [i] klickt, hast du ja alles richtig gemacht, alles warum Fehler ausgelöst wurde wird angezeigt, vielleicht kann man da noch eine Zeile einfügen mit einem Vorschlag wie man es richtig machen könnte oder was für eine Eingabe Dein Programm an dieser Stelle erwartet, so als Beispiel-Text.

Zitat:

Ich habe noch ein wenig herumprobiert, der Fehler den ich bekomme passiert wenn man zu schnell TextToSpeech mit Englisch On/Off aufruft, über das Menü. (Fehler kommt nur wenn man übers Menü bedient, Knöpfe arbeiten sauber.)
Verstehe nicht so richtig, wie du das meinst. Ich vermute, du hast während des Vorlesens die Sprache umgestellt. Kannst du etwas genauer erklären was du genau gemacht hast.

Zitat:

Da ist auch ein mini-Fehler drinn, vielleicht ist es ja auch so gedacht:
Beim Vorlesen, erzählt die Stimme korrekt Vorkommazahlen, aber ein Komma wird als Punkt gelesen
In diesem Programm wird der Punkt als Dezimaltrennzeichen verwendet.
Stell mal im Dialog für lange Zahlen den Mauszeiger in das obere Eingabefeld und drücke dann Alt-F1.

Code:
und Nachkommastellen werden einzeln gelesen und nicht als ein Wert.
Also aus 123,45 wird Einhundertdreiundzwanzig Punkt Vier Fünf. Aber super Job mit den Vorkommazahlen!
Na ja, das Thema ist ja nun ausgiebig diskutiert worden.
Recht hast du, dass im Sprachgebrauch, z.B. an der Kasse "eins fünfzig" gesagt wird.
Aber im Thread sagst du auch "Also wenn der Dir "Pi" aufschlüsselt, sagt er logischerweise alles einzeln."
Warum ist das logisch? Soll man denn besser "drei komma eins vier" sagen, statt "drei komma vierzehn".
Ich denke es ist gar nicht so einfach, eine klare Definition zu erstellen, wann man den Nachkommateil zu einer Zahl zusammenfasst und wann nicht.
Ich sehe das so:
Bei Geldbeträgen oder z.B. bei Längenangaben (in m) sagt man "eins fünfundfünfzig" und meint "1 Euro und 55 Cent" bzw. "1 Meter und 55 Zentimeter".
Allerdings würde ich für 1.333 km nie "eins dreihundertdreiunddreißig" und für 1.33 km auch nie "eins dreiunddreißig" sagen.
Da das Programm nicht weiß, ob der User gedanklich an der Kasse steht, ist es nicht möglich zu entscheiden wann die Ziffern einzeln zu sprechen sind und wann nicht. Man könnte natürlich eine Option einbauen dass z.B. bei zwei Nachkommastellen diese zu einer Zahl zusammengefasst werden. (Hab ich aber nicht vor)

Zitat:

Englische Sprache klingt Deutsch, ich glaube Sapi 5 hat da mehrere Aus-/Sprachen integriert.
Ich denke das hängt von der Stimme ab, mit der du etwas vorlesen lässt.
Wenn du dir einen englischen Text mit einer deutschen Stimme vorlesen lässt, na klar klingt die deutsch.

Zitat:

Auch eine mini-Unzugänglichkeit, wenn man Werte mit Tausendermarkierungen einfügt, kann Dein Programm nichts mit dem Wert anfangen. Beispiel: Wenn man "100.000.000,00" eingibt/einfügt, sagt der es ist ein falsches Datum und andersrum "100,000,000.00" = Ende erwartet.
Würdest du es auch als eine "mini-Unzugänglichkeit" bezeichnen, wenn du in Delphi schreibst
Delphi-Quellcode:
A:=100.000.000,00
und das dann nicht kompiliert wird?

Das ist keine Unzulänglichkeit und auch keine mini-Unzulänglichkeit sondern absolut korrekt.
Lies mal in der Hilfe, wie der Begriff Zahl für dieses Programm definiert ist.
Menu > Hilfe > Hilfe
Und in der Hilfe: Syntax von Ausdrücken > Zahl > Dezimalzahl
Zitat Anfang:
Eine Dezimalzahl kann sein:
Eine Folge von Ziffern. (Beispiel 12345)
Eine Folge von Ziffern, gefolgt von einem Dezimalpunkt gefolgt von Ziffern. (Beispiel 123.45)
Ein Dezimalpunkt, gefolgt von Ziffern. (Beispiel .45) (Nur im Normal-Modus)
Der Zahl kann ein Vorzeichen vorgestellt sein. (Beispiel -12345)
Der Zahl kann ein Skalierungsfaktor folgen. Dieser besteht aus einem 'E' oder 'e', gefolgt von einer ggfs. vorzeichenbehafteten, Ziffernfolge. Beispiele (1.45E2, 1.45E-2)
Zitat Ende.

Bei Deinen Eingaben passiert folgendes

"100.000.000,00"
Der Parser findet Ziffern Punkt Ziffern Punkt.
Nach dem zweiten Punkt ist für den Parser klar, dass das ein Datum sein muss, weil es keinen anderen gültigen Wert mit dieser Syntax gibt. Also wird versucht, den Text als Datum zu lesen und es wird bemerkt, dass die erste Ziffernfolge (100) nicht als Nummer eines Tages im Monat interpretiert werden kann. Also Fehlermeldung mit Fehlerstelle hinter der ersten 100.

"100,000,000.00"
Der Parser findet Ziffern Komma.
Schon hier ist klar, dass es keinen gültigen Ausdruck mit dieser Syntax gibt aber das Werfen der Fehlermeldung wird der Routine zur Auswertung von Ausdrücken überlassen.
Die liest dann eine Zahl (100) und erwartet danach entweder das Ende der Zeile oder einen Operator wie "+", "-", "*", "/" etc..
Gefunden wird ein Komma, dass hier nicht stehen sollte.
Also Fehlermeldung bei der das Komma hinter der ersten 100 als Fehlerstelle markiert ist.

Zitat:

wenn man bei Fehler auf's [i] klickt, hast du ja alles richtig gemacht, alles warum Fehler ausgelöst wurde wird angezeigt, vielleicht kann man da noch eine Zeile einfügen mit einem Vorschlag wie man es richtig machen könnte oder was für eine Eingabe Dein Programm an dieser Stelle erwartet, so als Beispiel-Text.
Wer ich mir bei Gelegenheit mal anschauen - wird sicher nicht in allen Fällen machbar sein, aber versuchen kann man das ja mal.

KodeZwerg 13. Apr 2018 16:49

AW: Rechenprogramm
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe alles soweit Verstanden, danke für's Erklären.

Das mit der Sprache tut mir leid, ich wollte keine Diskussion starten.

Übrigens, mit den Tausendermarken bin ich drauf gekommen weil dein Programm aus "100,000000" = "100 Mi-llionen" macht. Siehe Bild. Nun weiß ich ja das Kommata bei Dir nicht trennt sondern ein Punkt.

Das "Memory-Leak" Fenster bekomme ich relativ oft indem ich bei Lange Zahlen irgendwas mache und prompt übers Hauptfenster [X]'e.
Den Exception Fehler kann ich gerade selbst nicht reproduzieren, war vielleicht Zufall, ich weiß leider echt nicht mehr exakt was ich da tat, neues Programm = alles klicken machen tuen :-) (die Exception enstand aus dem Menu heraus als ich mit der Sprachausgabe rumspielte)

Ps: Wenn das Programm geschlossen wird und man die Hilfe offen hatte, bleibt diese offen, soll das so sein?
Pps: Mit der Sprache Deutsch/Englisch. Da meinte ich, es gibt in der Sapi auch verschiedene "Sprecher" aus verschiedenen Ländern. Also nicht nur Frau/Deutsch. Ich geh einfach mal davon aus das Du Sapi verwendest, verzeih falls ich falsch liege.
Ppps: Nach wie vor, dein Hilfesystem ist super!

Wie dem auch sei, Calculator funktioniert für meine schmalen Bedürfnisse ausgezeichnet aber da ich viel über die Zwischenablage kopiere und einfüge, ist mir das mit der Tausendertrennung halt sofort ins Auge gesprungen.

Amateurprofi 16. Apr 2018 12:21

AW: Rechenprogramm
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399144)
Habe alles soweit Verstanden, danke für's Erklären.

Das mit der Sprache tut mir leid, ich wollte keine Diskussion starten.

Übrigens, mit den Tausendermarken bin ich drauf gekommen weil dein Programm aus "100,000000" = "100 Mi-llionen" macht. Siehe Bild. Nun weiß ich ja das Kommata bei Dir nicht trennt sondern ein Punkt.

Das "Memory-Leak" Fenster bekomme ich relativ oft indem ich bei Lange Zahlen irgendwas mache und prompt übers Hauptfenster [X]'e.
Den Exception Fehler kann ich gerade selbst nicht reproduzieren, war vielleicht Zufall, ich weiß leider echt nicht mehr exakt was ich da tat, neues Programm = alles klicken machen tuen :-) (die Exception enstand aus dem Menu heraus als ich mit der Sprachausgabe rumspielte)

Ps: Wenn das Programm geschlossen wird und man die Hilfe offen hatte, bleibt diese offen, soll das so sein?
Pps: Mit der Sprache Deutsch/Englisch. Da meinte ich, es gibt in der Sapi auch verschiedene "Sprecher" aus verschiedenen Ländern. Also nicht nur Frau/Deutsch. Ich geh einfach mal davon aus das Du Sapi verwendest, verzeih falls ich falsch liege.
Ppps: Nach wie vor, dein Hilfesystem ist super!

Wie dem auch sei, Calculator funktioniert für meine schmalen Bedürfnisse ausgezeichnet aber da ich viel über die Zwischenablage kopiere und einfüge, ist mir das mit der Tausendertrennung halt sofort ins Auge gesprungen.

Hallo KodeZwerg,
ich habe einiges versucht, um Memoryleaks zu erzeugen, aber ohne Erfolg.
Wenn so etwas wieder auftritt und du dann auch weißt wie es dazu kam und das ganze auch reproduzierbar ist, gehe ich dem gerne nach.

Zitat:

Ps: Wenn das Programm geschlossen wird und man die Hilfe offen hatte, bleibt diese offen, soll das so sein?
Darüber hab ich vorher noch nie nachgedacht.
Ich habe jetzt die Möglichkeit implementiert, vorzugeben, ob und wann die Hilfe automatisch geschlossen wird.
Mit Menu > Optionen > Einstellungen öffnest du den Einstellungen Dialog. In der Gruppe "Bei Programmende" kannst du festlegen, ob eine ev. geöffnete Hilfe automatisch geschlossen werden soll und ob das beim Schließen eines Dialoges geschehen soll oder erst beim Beenden des Programms.

Zitat:

Pps: Mit der Sprache Deutsch/Englisch. Da meinte ich, es gibt in der Sapi auch verschiedene "Sprecher" aus verschiedenen Ländern. Also nicht nur Frau/Deutsch. Ich geh einfach mal davon aus das Du Sapi verwendest, verzeih falls ich falsch liege.
Nee, meines wissens gibt es in der SAPI überhaupt keine "Sprecher".
SAPI (Speech Application Programming Interface) ist nur eine Programmierschnittstelle zur Sprachsynthese und Spracherkennung,
um z.B. einen Text vorlesen zu können, muss auch eine "Stimme" auf dem Rechner installiert sein.
Und ja, es gibt da nicht nur z.B. Mann/Deutsch oder Frau/Deutsch sondern recht viele verschiedene Stimmen.
Für einen Überblick: http://ttssamples.syntheticspeech.de/
Zum ausprobieren: https://www.linguatec.de/voice-reader-home-15-demo/
Tja, und da wir gerade bei Sprachausgabe sind:
Hast du schon registriert, dass der kleine Smiley auf dem "Speak"-Button "vor sich hinsabbelt", wenn etwas vorgelesen wird?
Und Klicke mal den "Speak"-Button mit gedrückter Shift oder Ctrl Taste oder auch beide.

Zitat:

Ppps: Nach wie vor, dein Hilfesystem ist super!
Danke. Hat einiges an Arbeit gekostet.

Hab die geänderte Version in #1 gestellt.

Amateurprofi 26. Sep 2020 01:27

AW: Rechenprogramm
 
Ich habe in #1 eine neue Version des Programms (3.3.3.1) hochgeladen, weil ich einen Fehler im Programm behoben habe.
Im "BigDecimal"-Modus wurden gelegentlich Exceptions ausgelöst, auch wenn kein Fehler vorlag.

Michael II 26. Sep 2020 21:40

AW: Rechenprogramm
 
Hallo Profi

weisst du wie man deine hlp in Win10 öffnet? Wenn ich das tun will, dann wird eine m$ Seite angezeigt mit Downloads für Systeme bis und mit Win 8.1. Ich habe dann mal 8.1 geladen - aber das führt einfach nur zu einer weiteren Fehlermeldung.

Wichtigere Frage... Wieso kann ich mit deinem Rechner "nur" bis 1754! rechnen?

Eine "tief" Funktion ( n tief k = n!/(k!*(n-k)!) ) wäre auch gut. Evt. hast du's ja bereits eingebaut und ich seh's einfach nicht.

Gruss
M

Amateurprofi 26. Sep 2020 23:34

AW: Rechenprogramm
 
Zitat:

Zitat von Michael II (Beitrag 1474353)
Hallo Profi

weisst du wie man deine hlp in Win10 öffnet? Wenn ich das tun will, dann wird eine m$ Seite angezeigt mit Downloads für Systeme bis und mit Win 8.1. Ich habe dann mal 8.1 geladen - aber das führt einfach nur zu einer weiteren Fehlermeldung.

Wichtigere Frage... Wieso kann ich mit deinem Rechner "nur" bis 1754! rechnen?

Eine "tief" Funktion ( n tief k = n!/(k!*(n-k)!) ) wäre auch gut. Evt. hast du's ja bereits eingebaut und ich seh's einfach nicht.

Gruss
M

Zitat:

Eine "tief" Funktion ( n tief k = n!/(k!*(n-k)!) ) wäre auch gut.
Gib ein Varis(50,3) oder Varis(50,3,0)
Variationen ohne Wiederholung
Varis(50,3,1)
Variationen mit Wiederholung
Combis = Kombinationen mit oder ohne Wiederholung. Gleiche Syntax wie Varis.
Zitat:

weisst du wie man deine hlp in Win10 öffnet?
Nein, weiss ich leider nicht, ich arbeite mit Windows 7.

Amateurprofi 26. Sep 2020 23:44

AW: Rechenprogramm
 
Zitat:

Zitat von Michael II (Beitrag 1474353)
Hallo Profi
Wichtigere Frage... Wieso kann ich mit deinem Rechner "nur" bis 1754! rechnen?
Gruss
M

Hab ich mit PN beantwortet, hier noch mal für andere.

Das Maximum 1754 für N! (im Normal-Modus) resultiert aus dem größten in einem Extended darstellbaren Wert (1.1E+4932).
1755! ergäbe 3.473E+4933 und würde den Maximalwert überschreiten.

Übrigens:
Im Normal-Modus werden in meinem Programm alle Werte in Extended-Variablen gespeichert, was auch der Grund ist, warum es keine 64Bit Version gibt (Da ist Extended = Double).

Tatsächlich rechne ich N! mit der FPU. Hier der Code
Delphi-Quellcode:
PROCEDURE MonOpFacul(var V:TValue);
asm // EAX=@TValue
// CheckMinMax(v.v,0,1754,pact,116);
// n:=Trunc(v.v);
// v.v:=1;
// while n>1 do begin
// v.v:=v.v*n;
// dec(n);
// end;
          // ASM Version braucht 1/6 der Zeit und ist kürzer, auch wenns
          // nicht so aussieht.
                   mov byte [eax].TValue.Vt,vtNone
                   fld tbyte[eax].TValue.V
                   fldz
                   fcomip st,st(1)
                   ja @Err
                   fild dword [@1754]
                   fcomip st,st(1)
                   jae @Ok
 @Err: mov eax,117
                   mov edx,pact
                   jmp ASMError1
 @1754: dd 1754
 @Ok: sub esp,8
                   fnstcw word [esp+4]
                   fnstcw word [esp+6]
                   fwait
                   or word [ESP+4], $0F00 // trunc toward zero, full precision
                   fldcw word [ESP+4]
                   fistp dword [esp]
                   fwait
                   fldcw word [esp+6]
                   fld1
                   mov edx,[esp]
                   sub edx,1
                   jbe @Fin
 @Loop: fimul dword [esp]
                   mov [esp],edx
                   sub edx,1
                   ja @Loop
 @Fin: fstp tbyte[eax].TValue.V
                   add esp,8
end;
Delphi-Quellcode:
   // Vom Parser benutzter Werte-Record
    // CanDeformat : Info, ob der von NumStr erzeugte Ausgabe-String
    // wieder deformatiert werden kann
    // Vt : Wofür der Wert steht
    // V : Der numerische Wert
    // Numerator : Zähler, wenn Vt=vtFraction
    // Denominator : Nenner, wenn Vt=vtFraction
    // Latitude : Breitengrad, wenn Vt=vtGeoPos
    // Longitude : Längengrad, wenn Vt=vtGeoPos
    // ClrVal : Fabbdaten, wenn Vt=vtColor
    TValue=packed Record
       CanDeformat:Boolean;
       Vt:TValueType;
       V:Extended;
       case Integer of
          1 : (Numerator:Extended;
                 Denominator:Extended);
          2 : (Latitude:Extended;
                 Longitude:Extended);
          3 : (LatLon:Array[Boolean] of Extended);
          4 : (ClrVal:TColorValue);
    end;
  // Wofür ein Wert steht (vtNone=einfache Zahl)
    TValueType=(vtNone,vtBool,vtColor,vtFraction,
                vtSeconds,vtMinutes,vtHours,vtDays,vtWeeks,vtMonths,vtYears,
                vtTime,vtDate,vtDateTime,
                vtGeoPos);

Michael II 27. Sep 2020 06:25

AW: Rechenprogramm
 
Besten Dank!

Du könntest
x = e^ln(x) bzw. hier besser
x = 10^lg(x) und
log(ab)=log(a)+log(b)
ausnutzen.

Dann kannst du x! schreiben als x! = 10^lg(1*2*3...*x) = 10^(lg(1)+...lg(x)).

Fürs Coden: Du berechnest zuerst
s = lg(1)+...lg(x)

Sei s = e + m, wobei e = trunc(s) und m = frac(s)

x! = 10^s = 10^(e+m) = 10^m * 10^e.

Output:
10^m rechnest du aus, e lässt du als Exponent stehen.

Ich fühl mich gerade zurückversetzt in die Zeiten des hp41CV... ;-).

Amateurprofi 27. Sep 2020 10:01

AW: Rechenprogramm
 
Zitat:

Zitat von Michael II (Beitrag 1474374)
Besten Dank!

Du könntest
x = e^ln(x) bzw. hier besser
x = 10^lg(x) und
log(ab)=log(a)+log(b)
ausnutzen.

Dann kannst du x! schreiben als x! = 10^lg(1*2*3...*x) = 10^(lg(1)+...lg(x)).

Fürs Coden: Du berechnest zuerst
s = lg(1)+...lg(x)

Sei s = e + m, wobei e = trunc(s) und m = frac(s)

x! = 10^s = 10^(e+m) = 10^m * 10^e.

Output:
10^m rechnest du aus, e lässt du als Exponent stehen.

Ich fühl mich gerade zurückversetzt in die Zeiten des hp41CV... ;-).

Das wäre aber eine schöne Verschlimmbesserung.
Statt (für N=1000) hätte ich statt 1000 Multiplikationen 1000 mal Log10(), und Log10() braucht seine Zeit.

Michael II 27. Sep 2020 10:58

AW: Rechenprogramm
 
Du hast natürlich Recht. Das von mir vorgeschlagene "Verfahren" ist mathematischer Bocks-Mist. Es führt zwar aufs richtige Resultat. Aber der Weg.... [Ich war soeben beim Ponys Misten und obschon es auf 800müM bereits ziemlich kalt und windig ist, war die Jacke plötzlich völlig überflüssig als mir einfiel, dass das was ich geschrieben.... Du kannst natürlich direkt Mantisse und Exponent separieren und über die 1754! Grenze hinaus multiplizieren... ich lasse es zur Belustigung stehen... ]


Ich schlage dieses Verfahren ja nicht für "kleine" Werte von x (also nicht für x <= 1754) vor. Mir ist vollkommen klar, dass der Aufwand via log10 weit grösser ist. Wenn ich dich aber richtig verstehe, kann dein Programm Näherungswerte "nur" bis 1754! berechnen, dann ist aus.

Wenn du aber über den Exponenten zur Basis 10 rechnest, kommst du an Orte, wo nie jemand zuvor gewesen ist.

Du könntest deine Superschnellmethode bis 1754 nutzen und ab dann via log die Näherungswerte berechnen.

Für grosse Werte - kommen in der Statistik durchaus vor - könnte dein Programm zum Beispiel jeden 100sten ! Wert tabellieren; dann müsstest du nicht allzu viele log10 addieren.

War nur ein Vorschlag - mehr nicht.

Besten Dank für deine Tipps zu "tief" und Co (Kombinatorik Teil in deinem Calculator).


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz