Autor |
Beitrag |
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Sa 17.11.12 00:06
Hallo,
durch die vielen Checkboxen wurde es langsam unübersichtlich. Deshalb habe ich die Sonderfunktionen f(-x), -f(x), usw. in das Menü ausgelagert. Je Menüpunkt wird auch erklärt, welche Aktion mit dem Originalgraphen dann durchgeführt wird.
Zusätzlich sind vier Menüpunkte enthalten, die den Einfluss des Parameters P auf das Kurvenbild demonstrieren, auch wenn in der Funktionsgleichung kein P enthalten ist.
Ich denke, dass es so etwas besser ist.
In der Revision 21 wird zusätzlich eine Funktionsschar der ersten Funktion gezeichnet. Dazu wird der Parameter P so lange mit dem Wert d= erhöht, bis er die Größe des ebenfalls eingebbaren Parameters Q erreicht oder überschreitet.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 21.11.12 19:35
Hallo,
heute noch einmal eine Änderung am Funktionsprogramm.
Die Einstellmöglichkeiten für die Darstellung des Koordinatensystems habe ich ebenfalls in das Menü ausgelagert. Damit dürfte das rechte Teilfenster wieder etwas übersichtlicher werden.
Außerdem kann man jetzt außer der 1. auch die 2.Ableitung analytisch als Funktionsterme bestimmen.
Weitere Änderungen, u.a. eine Wertetabelle inkl. Anstiege für verschiedene x-Werte, werden in einigen Tagen folgen.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 29.11.12 21:34
Hallo,
bevor ab morgen Abend alle in der EE versuchen, Adventsrätsel zu lösen , komme ich noch einmal mit einer Erweiterung des Funktionsprogramms.
Wird eine Ergebnisliste angezeigt, so kann über den Auswahlpunkt "Wertetabelle" zusätzlich eine solche angezeigt werden. Start-, Endwert und Abszissenabstand wird aus von-bis-Delta entnommen. Neben den Funktionswerten zeigt die Tabelle auch die 1.Ableitungswerte.
Ein kleines programmtechnisches Problem habe ich. Wird die Wertetabelle sehr lang, müsste die Memobox eigentlich einen vertikalen Rollbalken bekommen. Immer möchte ich ihn nicht zuschalten, da er mir ganz einfach "optisch" nicht gefällt.
Wie kann man herausbekommen, ob so ein Rollbalken notwendig ist? Ab einer bestimmten Zeilenzahl ihn zuzuschalten ist nicht günstig, da ja das Fenster und somit die Memobox unterschiedlich hoch sein können.
Anders gefragt: Kann man irgendwie ausrechnen, wie viele Zeilen in einer Memo sichtbar sind?
Beste Grüße
Mathematiker
Nachtrag:
Delphi-Quelltext 1:
| Zeilenzahl := Memo.height div Memo.font.size |
funktioniert nicht, da zwischen den Zeilen ein Abstand ist.
Auch wenn ich eine Variable abstand = 1, 2, 3, ... addiere,
Delphi-Quelltext 1:
| Zeilenzahl := Memo.height div (Memo.font.size + abstand) |
ergibt es nicht die korrekte Zeilenzahl. Entweder das Ergebnis ist zu groß oder bei größerem Wert von abstand zu klein.
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 29.11.12 22:34
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 29.11.12 23:17
Hallo Frühlingsrolle,
danke für die Antwort.
Ich habe es ausprobiert, bringt aber leider nicht das Gewünschte.
Bei jedem Aufruf zeigt die Memo nun abwechselnd beide Rollbalken oder nur den vertikalen, gleichgültig, ob die Zeilenzahl nun einen Rollbalken braucht oder nicht, d.h., ich habe z.B. den vertikalen aber auch beide Rollbalken, wenn nur 5 Zeilen ohne Zeilenumbruch in der Memo stehen.
Ich muss vielleicht noch sagen, dass die Memo über
Delphi-Quelltext 1:
| Memo.lines.assign(ergebnisliste) |
mit einer Stringliste verknüpft wird, die aus einzelnen, relativ kurzen Strings besteht. Ein Umbruch tritt deshalb i.A. nicht auf.
Dennoch, nochmals Danke.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 30.11.12 10:39
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 30.11.12 11:01
Frühlingsrolle hat folgendes geschrieben : | Ich würde den Code von oben im FormCreate aufrufen, dann klappt das auch mit den Balken. |
Ich hab's probiert und, wie zu erwarten, funktioniert es nicht. Das Memo hat dann immer zwei Scrollbars, gleichgültig, wie viele Zeilen in ihr sind.
Da die Anzeige der vertikalen Scrollbar von der Zeilenzahl abhängig sein soll, kann in der FormCreate kaum die richtige Wirkung erzielt werden. Zum Zeitpunkt des Aufrufens der FormCreate ist die Memo ja noch leer.
Ich denke, der beste Weg müsste über die Berechnung der maximal sichtbaren Zeilenzahl in der Memo gehen.
Beste Grüße
Mathematiker
Nachtrag: Ich hab's gefunden. Bei meiner gewählten Schriftgröße von Verdana 8 ist der Zwischenraum gleich 5. Wenn ich berücksichtige, dass meine Memo "mergebnis" einen Rand hat (das hatte ich bis jetzt vergessen ), bekomme ich mit
Delphi-Quelltext 1:
| mergebnis.clientheight div (mergebnis.font.size+5) |
die Anzahl der sichtbaren Zeilen.
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: So 23.12.12 12:30
Hallo,
kurz vor Weihnachten habe ich noch einige Änderungen am Funktionsprogramm durchgeführt.
Die wesentlichste Erweiterung ist die Möglichkeit, die Funktionsgrafik wahlweise als BMP-, GIF- oder Vektorgrafikdatei zu speichern. Die Vektorgrafik ist jetzt auf "erweitert" umgestellt.
Weitere Veränderungen betreffen neue Zusatzfunktionen und interne Verbesserungen.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: So 23.12.12 18:38
Hallo Mathematiker, ich sehe gerade im Beitrage darüber, daß Du Schwierigkeiten ha(tte)st, etwas im FormCreate aufzurufen.
Vieles ist in jener Prozedur noch nicht (vollständig) initialisiert. Entweder versuchst Du es mit einer anderen Prozedur, die bei Programmstart (nur dann?) ausgelöst, siehe hier, oder das Zauberwort heißt: "one shot timer". Also, ein Timer wird in FormCreate gepackt, Schußfrequenz ("Kadenz") auf Minimum (1 ms) gestellt, das reicht nach meiner Erfahrung, und beim ersten Schuß wird er deaktiviert ("diabled") und tut dann das, was Dir FormCreate verweigerte.
Schöne Weihnachten!
Zuletzt bearbeitet von Delphi-Laie am Sa 29.10.16 09:17, insgesamt 3-mal bearbeitet
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 23.12.12 19:06
Ein Timer ist dafür nicht wirklich geeignet, besser ist es sich selbst einfach eine Windows Message zu schicken. Dann muss man nicht extra eine Komponente erstellen. Und im Grunde passiert ohnehin das gleiche, denn ein Timer funktioniert ja auch nur über eine WM_TIMER Botschaft.
Für diesen Beitrag haben gedankt: Delphi-Laie
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: So 23.12.12 19:21
Hallo Delphi-Laie,
Hallo jaenicke,
vielen Dank für die Hinweise.
Das Problem war nur entstanden, da Frühlingsrolle einen Vorschlag für die Rollbalken meiner Memo hatte.
Die Schwierigkeit mit den anzuzeigenden Rollbalken konnte ich ja anders lösen (siehe oben), zumal erst während der Ausführung der Berechnung entschieden werden muss, ob der vertikale Rollbalken notwendig ist.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Tranx
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: So 23.12.12 20:36
Also, allein schon die syntaktische Ableitung (ich hoffe, das ist der richtige Begriff, denn ich bin kein Mathematiker) ist eine Wucht. Selbst schwierige Funktionen kann das Programm richtig ableiten. Alle Achtung. Muss mir mal in Ruhe ansehen, wie das gemacht wurde.
Wünsche Dir ein gesegnetes Weihnachtsfest.
Gunther
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 23.12.12 20:54
Tranx hat folgendes geschrieben : | Also, allein schon die syntaktische Ableitung (ich hoffe, das ist der richtige Begriff, denn ich bin kein Mathematiker) |
Das nennt sich symbolische Ableitung als Abgrenzung zur numerischen Ableitung.
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Mo 24.12.12 09:49
jaenicke hat folgendes geschrieben : | Ein Timer ist dafür nicht wirklich geeignet, besser ist es sich selbst einfach eine Windows Message zu schicken. Dann muss man nicht extra eine Komponente erstellen. Und im Grunde passiert ohnehin das gleiche, denn ein Timer funktioniert ja auch nur über eine WM_TIMER Botschaft. |
Hallo jaenicke, wärst Du um ein paar Codezeilen, die das demonstrieren, nicht verlegen, bitte?
Ich kenne das nur mit dem Timer, z.B. auch von himitsu in der delphipraxis empfohlen, und der ist sicher eine Größe unter den Delphiprogrammierern.
Danke im voraus und schöne Weihnachten auch Dir!
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 24.12.12 14:42
So aus dem Kopf: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| const WM_AFTERSHOW = WM_USER + 1454;
type TMyForm = class(TForm) protected procedure WmAfterShow(var Msg: TMessage); message WM_AFTERSHOW; end;
procedure TMyForm.WmAfterShow(var Msg: TMessage); begin end;
PostMessage(Handle, WM_AFTERSHOW, 0, 0); |
Zuletzt bearbeitet von jaenicke am Di 25.12.12 20:43, insgesamt 1-mal bearbeitet
Für diesen Beitrag haben gedankt: Delphi-Laie
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Di 25.12.12 11:55
Hallo jaenicke,
für das Funktionsprogramm brauche ich es zwar nicht, aber es interessiert mich allgemein.
Dein Quelltext
jaenicke hat folgendes geschrieben : | Delphi-Quelltext 1: 2:
| PostMessage(Handle, WM_AFTERSTART, 0, 0); | |
sieht vor, in FormShow die Nachricht zu senden.
Wird diese dann jedesmal, wenn das Formular aktiv wird, gesendet oder nur genau einmal durch die Nachricht WM_AFTERSTART?
Wie erkennt das Programm, dass das Formular erstmals angezeigt bzw. nur neu gezeichnet wird?
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 25.12.12 20:44
Ich habe die Bezeichnung mal in after show geändert um die Funktion zu verdeutlichen. Wenn man das Formular mit z.B. Show und Hide oder Visible (dein eigener Code eben) mehrfach anzeigt, wird auch das Ereignis mehrfach ausgeführt. Minimieren und Wiederherstellen oder so (alles was der User ohne Quelltext von dir machen kann) löst OnShow hingegen nicht erneut aus.
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Anika
Beiträge: 30
Erhaltene Danke: 2
Windows 7
Delphi 7
|
Verfasst: So 13.01.13 22:30
Guten Abend,
ich denke einen Fehler gefunden zu haben.
wenn ich den Punkt A anzeige und automatisch verschieben lassen will, passiert nichts. Erst wenn ich das Verschieben beende sehe ich die Änderung.
Mit dem Punkt B geht es aber.
Anika
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mo 14.01.13 10:11
Hallo Anika,
Anika hat folgendes geschrieben : | ich denke einen Fehler gefunden zu haben. |
Entschuldigung und Danke für den Hinweis. Das war wieder ein typischer Fehler meinerseits.
Bei der Erweiterung des Programms um die Verschiebung von Punkt B ist mir ein Befehl "abhanden" gekommen. In der Revision 25 ist es wieder richtig.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Für diesen Beitrag haben gedankt: Anika
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mo 22.04.13 14:43
Hallo,
durch Delphi-Laie (Danke!) wurde ich auf einen interessanten Beitrag aufmerksam gemacht: www.luschny.de/math/...dsGammaFunction.html
Daraufhin habe ich den Funktionsinterpreter des Programms zur Funktionsdarstellung und -untersuchung erweitert.
Jetzt können folgende Funktionen, außer den Grundoperationen +,-,*,/,^ in der Funktionsgleichung verwendet werden:
Quelltext 1: 2: 3: 4: 5:
| SQR SQRT ABS INT SGN FRAC HEAVISIDE EXP LN LG LD SIN COS TAN COT SEC CSC ARCSIN ARCCOS ARCTAN ARCCOT ARCSEC SINH COSH TANH ARSINH ARCOSH ARTANH GAMMA GAUSS DIGAMMA |
Sollte noch etwas Interessantes fehlen, bitte ich um einen kurzen Hinweis.
Soll die Hardamardsche Gamma-Funktion aus dem genannten Artikel gezeichnet werden, ist einfach
(DIGAMMA(1-X/2)-DIGAMMA(1/2-X/2))/(2*GAMMA(1-X))
als Term einzutragen, für die Luschny-Funktion
GAMMA(X+1)*(1-SIN(PI*X)/(PI*X)*(-1/2+X/2*(DIGAMMA(X/2+1/2)-DIGAMMA(X/2))))
allerdings mit einer "hässlichen" Unstetigkeit bei 0.
Beide Funktionen haben mit Schulmathematik natürlich absolut nichts zu tun, aber was soll's ...
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
|