Autor |
Beitrag |
rizor
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Mo 12.02.07 23:41
Hi,
ich habe zusammen mit einem Kumpel einen Funktionsplotter für ganz-rationale Funktinen geschrieben.
Der Plotter berechnet die Ableitungen, Nullstellen, Extremstellen und Wendestellen.
Außerdem zeichnet er die FUnktion mit der ersten und zweiten Ableitung.
Das Projekt ist für unser Abitur.
Also, falls ihr Fehler entdeckt, schreibt mir bitte genau, was ihr eingegeben habt und was der Fehler ist.
Außerdem wäre es gut, wenn ihr mir sagt, was euch am Design nicht so gut gefällt.
Danke.
cu rizor
[EDIT]
Habe eine Zip angefügt.
[EDIT] Version 1.1
Die neue Version hat folgende Änderungen:
- Die X-Achse verschiebt jetzt richtig (bei z.B. x^0)
- Eine Wertetabelle wurde eingebaut
- Fenster lässt sich nicht mehr maximieren und wurde zentriert
- Der parser erkennt jetzt ausgeschriebene x-Reihen (x*x*x)
- Es kann jetzt ein Bereich der FUnktion genauer dargestellt werden (inkl. einstellbarem
Intervall)
[EDIT] Version 1.2
Die neue Version hat folgende Änderungen:
- Die Zeichnung wurde optimiert
- Der Parser sortiert sich die Funkton nun selber
Hoffe, das jetzt alles funktioniert 
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von rizor am Do 22.02.07 20:39, insgesamt 4-mal bearbeitet
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: Di 13.02.07 00:46
Hallo,
ich find das sieht schon ganz gut aus. Ein paar Kritikpunkte:
(1) bei x^0 sieht das Koordiatenkreuz komisch aus. Es wäre sinnvoll wenn die X-Achse im Mittelpunkt ist und NICHT am unteren Rand.
(2) bei x^10 dauert die Berechnung extrem lange.
(3) Eine Wertetabelle mit einstellbaren Intervall wäre nett, oder vllt eine Möglichkeit die Funktion mit den CursorTasten abzufahren.
Ansonsten ziemlich gut 
|
|
rizor 
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Di 13.02.07 15:40
Vielen Dank.
Werden uns die Fehler anschauen und überarbeiten.
Ob wir das mit dem Cursor machen weiß ich noch nicht, aber die Wertetabelle mit Sicherheit.
[Edit]
Die berechnung von x^10 dauert gar net so lang.
Wie lang braucht dein Rechner denn?
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: Di 13.02.07 21:56
Also für die Berechnung von x^10 brauch ich knapp ~ 7 sek. Bei x^1 gehts auf Knopfdruck.
|
|
rizor 
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Di 13.02.07 21:59
Achso.
as Problem ist nur, dass wir das nicht doll kürzen können, da sich bei so einer großen Potenz der zu Untersuchende Bereich extrem vergrößert, wodurch die Berechnung schwieriger und langwieriger wird.
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 14.02.07 09:19
Ich bitte mal um eine gezippte Datei 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
basti_1984
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Mi 14.02.07 09:38
Warum nutz ihr nicht fertige MAtheprogramme die das alles schon können.
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 14.02.07 10:32
basti_1984 hat folgendes geschrieben: | Warum nutz ihr nicht fertige MAtheprogramme die das alles schon können. |
(a) aus Spaß am programmieren
(b) weil die wenigsten das machen, was ich will
(c) weil es übt
(d) und ich würde Dir weitere 1000 Gründe nennen, wenn ich welche wüßte ... 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
rizor 
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Mi 14.02.07 10:42
Und einer der wichtigsten Gründe für uns ist, die Abi-Prüfung.
Da sollten man schon was eigenes haben.
|
|
basti_1984
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Mi 14.02.07 10:57
Okay das Arbgument (a) ist natürlich richtig. Mein Abi liegt zwar schon einige Jahre hinter mir. ich habe mir mal euer Program angesehn. Hut ab aber : Das hier soll keine Kritik sein .
ich würde die eingabe etwas anders gestalten. euer programm hat probleme wenn ich
x^(2) eingebe. generell sind klammern nicht so gerne gesehen. Gebrochenrationale Funktionen können nicht bearbeitet werden.
Was können denn MAthe Programme nicht was du benötigst.
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 14.02.07 11:02
Danke, habe es mal ausprobiert
Test:
(a) wenn ich das Fenster maximiere, dann sollte sich die graphische Anzeige aus maximieren oder max. disablen
(b) warum versteht er x*x*x nicht ? Welche Funktionen sind erlaubt? zBsp: sin(x) geht nicht!
(c) das MainMenu würde ich entsorgen
(d) warum der Schalter mit "Funktion löschen", verwenden sollte doch reichen, ev. noch eine Anzeige über die aktuelle Funktion
(e) Intervall,Gitter, (Farben) im Graphen wählbar
(f) Legende in der graphischen Darstellung
//EDIT:
(g) Versionshinweise, Infobox
@basti_1984
Was ich will: Versuche mal in Derive jemanden zu erklären, wie er eine Parabelschar für f(x)=ax² zeichnen lassen soll für a=[-5;5;0.5], da ist eine Stunde um, nichts zu sehen und der Effekt einer graphischen Computerdarstellung geht in die Hose 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
rizor 
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Mi 14.02.07 11:43
Kroko hat folgendes geschrieben: | Danke, habe es mal ausprobiert
Test:
(a) wenn ich das Fenster maximiere, dann sollte sich die graphische Anzeige aus maximieren oder max. disablen
|
Wie kann ihc die Maximierung verhinder?
Kroko hat folgendes geschrieben: |
(b) warum versteht er x*x*x nicht ? Welche Funktionen sind erlaubt? zBsp: sin(x) geht nicht!
|
basti_1984 hat folgendes geschrieben: |
Gebrochenrationale Funktionen können nicht bearbeitet werden.
|
Stimmt, das haben wir vergessen einzubauen. Werden wir mit der nächsten Version machen.
Das Programm kann nur ganzrationale Funktionen berechnen.
und Sinus-Funktionen sind trigonometrische Funktionen.
Kroko hat folgendes geschrieben: |
(c) das MainMenu würde ich entsorgen
(d) warum der Schalter mit "Funktion löschen", verwenden sollte doch reichen, ev. noch eine Anzeige über die aktuelle Funktion
|
Mit dem MainMenu haben wir es so gemacht, damit die Zeichnung größer wird.
Der Schalter "Funktion löschen" ist dazu da, das Programm zurück zu setzen, da man sonst bei einer erneuten Eingabe eine Fehlermeldung erhält.
Haben wir am Anfang leider schon nicht so gut programmiert.
Kroko hat folgendes geschrieben: |
(e) Intervall,Gitter, (Farben) im Graphen wählbar
(f) Legende in der graphischen Darstellung
|
Das mit dem Intervall und so wäre zwar eine gute Idee, aber es könnte zu knapp werden it der Programmierung.
basti_1984 hat folgendes geschrieben: |
euer programm hat probleme wenn ich x^(2) eingebe. generell sind klammern nicht so gerne gesehen.
|
Ja, die Klammern haben wir extra weg gelassen, damit die Eingabe übersichtlich bleibt.
Wir werden sehen, was wir von den Vorschlägen noch realisieren können.
|
|
basti_1984
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Mi 14.02.07 12:01
Okay mit der Übersicht der eingabe wirst du dann aber probleme haben oder wie willst du x^2+5 / x-2 ohne klammern darstellen so das dein prgramm richtig rechnet.
Mal ein Vorschlag, da ich mich mit solchen Themen auch schon auseinander gesetzt habe-
Lass den nutzer nicht alle zeichen per tastatur eingeben, biete für spezielle Zeichen/ OPeratroen Buttons an. Z.B für Wurzel, Logarithmen, Potenzen usw...
Dann kanst du auch eine gebrochen Rationale Funktion darstellen.
Ist mir eben noch eingefallen;
Wie sieht es mit Buchstaben im Programm aus. wenn ich eine Funktion eingeben die nicht aus buschtaben bestehet. wei geht ihr damit um. (Muss natürlich einen Fehler auswerfen)
Auf jeden Fall wüschen ich euch viel Glück beim Abitur.
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
rizor 
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Mi 14.02.07 12:05
Da das Programm aber nur für ganz-rationale Funktionen ausgelegt ist, bekommen wir das Problem nicht, da es dort keine Brüche gibt abgesehen von 1/3 oder so.
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 14.02.07 12:12
(a) schau dir mal TForm.BorderIcons und TForm.BorderStyle an
(b) Warum wird mit MainMenu die Zeichnung größer??? Sie wird doch eher kleiner, oder?
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
rizor 
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Mi 14.02.07 15:23
Sie wird nicht kleiner, da wir das ganze System nach unten verschoben haben und außerdem ein Extra-Schließen Button fehlt, wodurch wir noch ein wenig platz haben.
|
|
rizor 
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Di 20.02.07 20:12
Eine neue Version ist jetzt im Netz.
|
|
Segelflieger
      
Beiträge: 124
WinXP Pro
D7 Prof
|
Verfasst: Do 22.02.07 02:12
Hallo!
Euer Thema finde ich sehr interessant, weil ich zu meiner Abi-Zeit einen recht brauchbaren Funktionsplotter geschrieben habe (hatte es als besondere Lernleistung werten lassen und war damit bei Jugend Forscht).
Ich habe das Programm eben runtergeladen und gestartet und f(x)=1+x^2-x^3+x^4-x^5 eingegeben. Beim Klick auf "Funktion verwenden" kam erstmal eine Fehlermeldung "TInt ist kein gültiger Gleitkommawert". Dann habe ich "Funktion löschen geklickt" und dann nochmal auf "verwenden". Dann ging es. Aber die Ableitungen der Funktion wurden völlig falsch berechnet.
Werde später noch ein wenig damit herumprobieren. Mich würde mal interessieren, wie ihr die Funktionen interpretiert (parst).
Bin schon auf ein Update gespannt!
Martin
EDIT: habe gerade mal einen Blick in euren Quelltext geworfen. Ich weiß ja nicht, wieviel Zeit ihr noch für euer Projekt habt... aber falls ihr noch Luft habt, empfehle ich euch, einen rekursiven Funktionsparser zu entwerfen. Damit meine ich: eine Parserfunktion, der ihr den Funktionsstring übergebt; diese Funktion zerlegt den String dann in kleinere Teilstrings (Punkt- vor Strichrechnung beachten etc.) und ruft sich selbst dann mit diesen kleinen Teilstrings als Parameter auf. Das ganze ist sehr flexibel, d.h. man kann beliebige Rechenoperationen ganz einfach hinzufügen oder den Benutzer z.B. Funktionen wie Sin(x) eingeben lassen...
*bla* klingt kompliziert wenn man es zum ersten Mal hört, aber wenn ihr Hilfe braucht, fragt einfach 
_________________ Früher hatten die Menschen Angst vor der Zukunft. Heute muss die Zukunft Angst vor den Menschen haben.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 22.02.07 08:58
Segelflieger hat folgendes geschrieben: | EDIT: habe gerade mal einen Blick in euren Quelltext geworfen. ... aber falls ihr noch Luft habt, empfehle ich euch, einen rekursiven Funktionsparser zu entwerfen. ... |
Für mathematische Terme reicht eine einfache Stackmaschine (Simple Precedence?). Aber einen 'rekursiven Parser' zu schreiben, entspricht der intuitiven Umsetzung einer Backus-Naur-Notation und man versteht einfach, was passiert. Und es macht Spass. Und man ist hinterher schlauer. 
_________________ Na denn, dann. Bis dann, denn.
|
|
rizor 
      
Beiträge: 209
WIN XP
Delphi 2005 PE, Visual C++
|
Verfasst: Do 22.02.07 16:48
Hi,
das Problem ist, dass du die Funktion falsch herum eingegeben hast.
So berechnet er die Ableitungen natürlich falsch.
Du musst die exponenten abfallend eingeben
z.B. x^3-12x^2+5x-12
sowas kann er wieder rechnen.
Werde mal probieren, dass das Programm das selber macht.
|
|