![]() |
Wertetabellen und Funktionen
Hallo @ all! :hi:
Ich wollte mich mal an ein Programm setzten mit dem es möglich ist aus einer Funktion eine Wertetabelle zu erstellen und vllt. die Funktion zu zeichnen. Daher möchte ich wissen, ob es überhaupt möglich ist eine eingegebene Funktion (also jede beliebige) zu verarbeiten? :?: Wenn dies nicht möglich ist, könnte man ja am Anfang auswählen von welchem Typ die Funktion ist (z.B.: a*sin(bx+c)+d) und dann die Parameter eingeben und den Definitions und wertebereich und die schrittfolge in der Wertetabelle. Dies müsste doch dann möglich sein oder? Und dann wollte ich wissen ob man mit Delphi so einfach Funktionen darstellen kann? Vielen Dank schon mal im Vorraus! :thumb: |
Re: Wertetabellen und Funktionen
|
Re: Wertetabellen und Funktionen
Danke für die Antwort, aber was ist ein Mathe Praser? In Sachen Programmieren bin ich leider noch ein Anfänger ^^
Danke schonmal für die Antwort (: :mrgreen: |
Re: Wertetabellen und Funktionen
Wie sieht denn der parser für dieses Programm dann aus ? Könnte mir den jemand dann vllt. schicken ? :D
mfg Delphi-Freund |
Re: Wertetabellen und Funktionen
Ein Parser analysiert einen eingegebenen String und wandelt diesen in ein für den Computer verständliches "Format" um. Dies ist jedoch aufwendiger, als man vielleicht denken mag, denn man muss einiges beachten und sollte daher schon einbisschen Erfahrung mit dem Programmieren haben. Wenn du schreibst, dass du noch ein Anfänger bist, dann muss man realistischerweise sagen, dass du das wahrscheinlich nicht selber hinbekommts. Fertige Parser lassen sich vielleicht in der DP finden, da musst du mal in den entsprechenden Sparten (wahrscheinlich OpenSource) suchen. Ein weiteres Stichwort wäre "Funktionsplotter".
mfg |
Re: Wertetabellen und Funktionen
Hab mir schon gedacht, dass ein Parser zu schwer ist. Vllt. sollte ich ein Programm programmieren, dass eine auswahlmöglichkeit zwischen funktionstypen bietet und man die parameter eingeben muss. somit würde ich den parser vermeiden. jo en funktionsplotter versuche ich auf jeden fall mal. wenn ich probleme hab sag ich bescheid :D
mfg |
Re: Wertetabellen und Funktionen
Die Unterscheidung in verschiedene Funktionstypen ist für den Anfang bestimmt einfacher. Die Ausgabe der Funktion ist dann gar nicht mehr so schwierig, aber auch da muss man einiges beachten. Hab im Rahmen meiner Facharbeit ein Programm geschrieben, dass eine spezielle Logarithmusfunktion mathematisch diskutieren und in einem Koordinatensystem graphisch darstellen kann. Obwohl die Ausgabe an sich nicht so kompliziert ist, steckt dennoch einiges an Arbeit dahinter. Zum Üben ist so ein Projekt aber sicher eine gute Idee. Muss ja am Anfang auch nicht perfekt sein.
|
Re: Wertetabellen und Funktionen
Also ich hab jetzt trotzdem noch probleme mit der Ausgabe der Funktion. Und zwar lass ich ja eine Wertetabelle für die Funktion erstellen. Und nun wollte ich nach der wertetabelle zeichnen lassen. (wertetabelle mit eingegebenen anfangswert, endwert und schrittweite) aber mein problem ist, dass Delphi mit LineTo nur integerwerte verarbeitet. ich habe zwar mit round versucht das problem zu umgehen aber meine repeatschleife die bis zur bedingung geht anfangswert=endwert funktioniert nicht. Könnt ihr mir einen logischen Lösungsweg verklickern, der aus der wertetabelle eine Funktion zeichnet???
Vielen Dank schonmal ;) mfg Delphi-Freund ;) |
Re: Wertetabellen und Funktionen
Nimm ein TImage oder eine TPaintbox mit z.B. 500x500 Pixeln. Die Mamimalwerte für
x und y sind dann die Maximalwerte Deiner Funktion. Der Rest ist Dreisatz. Helfen könnte noch Trunc und Round. Grüß Wolfgang |
Re: Wertetabellen und Funktionen
Das hängt auch davon ab, wie du deine Daten (Wertetabelle) speicherst (ich vermute mal in einem array?). Vielleicht solltest du mal zeigen, was du bisher hast und wo es Probleme gibt. Ich habe gerade mal was getippt, was zu funktionieren scheint, aber ich will dir jetzt erstmal nicht eine komplette Lösung zeigen, ohne zu wissen, was du schon hast und wie du es gemacht hast, ansonsten lernst du nämlich nicht viel dabei ;-)
mfg |
Re: Wertetabellen und Funktionen
Also die wertetabelle ist teil meines programmes... man kann eben anfangswert (aw) endwert (ew) und schrittweite (s) eingeben...
Delphi-Quellcode:
Und nun bin ich soweit, dass die Funktion "falsch herum" dargestellt wird... nun würde ich aber die Funktion gerne noch skarlieren sprich das man mit ner scrollbar die einheit des koordinatensystems bestimmen kann...
procedure TForm1.BitBtn1Click(Sender: TObject);
var a,b,caw,ew,s,x,y:Real; n:Integer; begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); c:=StrToFloat(Edit3.Text); aw:=StrToFloat(Edit4.Text); ew:=StrToFloat(Edit5.Text); s:=StrToFloat(Edit6.Text); x:=aw; n:=0; while x<=ew do begin n:=n+1; y:=a*(sqr(x))+b*x+c; StringGrid1.cells[0,n]:=FloatToStrF(x,ffFixed,10,3); StringGrid1.cells[1,n]:=FloatToStrF(y,ffFixed,10,3); x:=x+s; end; StringGrid1.RowCount:=n+1; end;
Delphi-Quellcode:
Wäre euch dankbar für hilfe ;)
procedure TForm1.BitBtn6Click(Sender: TObject);
var a,b,c,aw,ew,s:Real; begin with form1.PaintBox1.Canvas do begin Brush.Color := clWhite; rectangle(-1,-1,form1.PaintBox1.Width+1, form1.PaintBox1.Height+1); Pen.Color := clBlack; TextOut(form1.PaintBox1.Width-8, form1.PaintBox1.Height Div 2+8, 'x'); TextOut(form1.PaintBox1.Width DIV 2-8, 8, 'y'); TextOut(form1.PaintBox1.Width-5, form1.PaintBox1.Height Div 2-7, '>'); TextOut(form1.PaintBox1.Width DIV 2-3, 0, '^'); MoveTo(0, form1.PaintBox1.Height div 2); LineTo(form1.PaintBox1.Width-1, form1.PaintBox1.Height div 2); MoveTo(form1.PaintBox1.Width div 2, 0); LineTo(form1.PaintBox1.Width div 2, form1.PaintBox1.Height-1); end; aw:=StrToFloat(Edit4.Text); ew:=StrToFloat(Edit5.Text); s:=StrToFloat(Edit6.Text); form1.PaintBox1.Canvas.MoveTo(trunc(aw)+form1.PaintBox1.Height div 2,trunc(a*sqr(aw)+b*aw+c)+form1.PaintBox1.Height div 2); repeat begin aw:=aw+s; form1.PaintBox1.Canvas.LineTo(trunc(aw)+form1.PaintBox1.Height div 2,trunc(a*sqr(aw)+b*aw+c)+form1.PaintBox1.Height div 2); end; until aw=ew; end; mfg Delphi-Freund [edit=mkinzler]Code-Tags durch Delphi-Tags ersetzt; Was spricht den eigentlich gegen den richtigen Tag :gruebel: Mfg, mkinzler[/edit] |
Re: Wertetabellen und Funktionen
Da sind noch einige Fehler in deinem Code.
1.) du schreibst überall form1. - lass das mal weg, es schadet mehr als es nützt 2.) du wiederholst deine Mathe-Funktion mehrfach in deinem Code; das verhindert, dass die Funktion leicht geändert werden kann Mach daraus eine Methode:
Delphi-Quellcode:
Statt nun überall trunc(a*sqr(aw)+b*aw+c) aufzurufen, verwendest du stattdessen Trunc(MeineFunkt(aw)).
function TForm1.MeineFunkt(x:Extended):Extended;
begin result := a*sqr(x)+b*x+c; end; 3.) veralteter Datentyp real. stattdessen Double oder Extended verwenden; die haben höhere Genauigkeit und sind schneller, da sie direkt von der FPU unterstützt werden 4.) du verwendest die Paintbox auf eine falsche Weise Auf eine Paintbox sollte man nur auf dem Event OnPaint heraus zeichen. 5.) du verwendest keine eigenen Methoden Überlege dir welche kleineren Aufgaben du in Methoden auslagern könntest (z.B. Beschriftung zeichen, Koordinatenkreuz zeichen,...) |
Re: Wertetabellen und Funktionen
Vielen dank für die Tipps. Habe bereits die Funktion eingearbeitet. Danke für den Hinweis. Den Datentyp Real haben wir in der Schule kennengelernt, aber wenn dieser veraltet ist, verwende ich lieber Double. (:
Aber einwas habe ich nicht verstanden: Zitat:
Wie verwende ich die PaintBox richtig? mfg Delphi-Freund ;) |
Re: Wertetabellen und Funktionen
Wie sx2008 schon angedeutet hat: Ziehe dir eine PaintBox auf dein Formular, wechsle im Objekt-Inspektor auf den Reiter "Ereignisse" und füge mit Hilfe eines Doppelklicks bei "OnPaint" die entsprechende Behandlungs-Routine für das Paint-Ereignis der Paintbox hinzu. Innerhalb dieser Routine kannst du dann auf die Zeichenfläche ("Canvas") der Paintbox zeichnen. Du musst also alles, was mit dem Zeichnen zu tun hat und bei dir bisher in der Button-Click-Routine drin ist, in diese Routine reinpacken.
mfg |
Re: Wertetabellen und Funktionen
Ok Vielen Dank euch allen!! :) Mein Problem hat sich gelöst ;)
DANKE :hello: :firejump: mfg Delphi-Freund |
Re: Wertetabellen und Funktionen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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