Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Graphzeichner (https://www.delphipraxis.net/90422-graphzeichner.html)

delphilover 24. Apr 2007 19:26

Re: Graphzeichner
 
bei mir aber nicht:S
Bitte um Hilfe:S:S:S

Diff05 7. Mai 2007 17:15

Re: Graphzeichner
 
Also, bis jetzt haben wir die beiden Achsen & die Einteilungen gezeichnet. Jetzt stehen wir vor dem nächsten Problem: wie machen wir jetzt die Beschriftung?
Mit dem Text.Out hat irgendwie nicht ganz geklappt v.v

Kann uns das vll noch mal wer erklären?

BrightAngel 7. Mai 2007 17:26

Re: Graphzeichner
 
Zum Thema Parser:
Vorschlag

Diff05 7. Mai 2007 17:31

Re: Graphzeichner
 
sorry, aber keine ahnung was nen parser ist..

BrightAngel 7. Mai 2007 17:39

Re: Graphzeichner
 
Ein Funktionsparser ist in dem Fall die Zerlegung einer Funktion, die z.B. in ein TEdit-Feld eingetragen wird, die anschließend berechnet wird. Also aus Y=2*x+10 wird beim Zeichen erst der Wert der x-Koordinate eingegeben z.B. 3. Der wird in die gleichung eingesetzt; also Y=2*3+10; dann nur noch rechnen(jetzt kommt die eigentliche Aufgabe des Parsers); Also Zwischenrechnung
2*3=6
=> Y=6+10
=> 6+10=16
=> Y=16
=> dem Plotter wird als Koordinaten P(3|6) übergeben.

BrightAngel 7. Mai 2007 17:44

Re: Graphzeichner
 
Und wie in dem 23sten Eintrag meines Links beschrieben, braucht man für die Zwischenrechnungen immer nur zwei Faktoren(Summanden,etc). So lässt sich jede Funktion berechnen.
Weiterer Vorteil: wenn man die eingegebene Gleichung auf unbekannte Zeichen wie z.B. 'a' untersucht, so könnte man z.B. dem Programm beibringen, es als Constante zu gebrauchen und den Benutzer per Eingabefeld(z.B. weitere TEdit...) aufforden für die Constanten einen Wert einzugeben.

Diff05 7. Mai 2007 17:46

Re: Graphzeichner
 
und wie schreib ich sowas?

Mackhack 7. Mai 2007 18:14

Re: Graphzeichner
 
@Diff:

Hier mal 2 Proceduren wie man auf einfachste Art Lineare und Quadratische Funktionen 3. Grades auf einem Image ausgeben kann...

ImgGraph ist ein TImage

Delphi-Quellcode:
procedure TFrmMain.BtnLinearDrawingClick(Sender: TObject);
var
  M, T: Real;
begin
  ImgGraph.Canvas.Pen.Color := clRed;
  M := StrToFloat(EdtSlope.Text);
  T := StrToFloat(EdtYIntercept.Text);
  Strecke(-5, M * (-5) + T, 5, M * 5 + T);
end;
 
procedure TFrmMain.BtnSquareDrawingClick(Sender: TObject);
var
  A, B, C, X1, X2, Y1, Y2: Real;
begin
  ImgGraph.Canvas.Pen.Color := clgreen;
  A := StrToFloat(EdtA.Text);
  B := StrToFloat(EdtB.Text);
  C := StrToFloat(EdtC.Text);
  X1 := -5;
  while X1 < 5 do
  begin
    X2:= x1 + 0.05;
    Y1:= A * X1 * X1 + B * X1 + C;
    Y2:= A * X2 * X2 + B * X2 + C;
    Strecke(X1, Y1, X2, Y2);
    X1:= X1 + 0.05;
  end;
end;
Der Rest sollte Selbsterklaerend sein... Ich hoffe doch sehr ich mach hier keine Hausaufgaben :???:

BrightAngel 7. Mai 2007 18:35

Re: Graphzeichner
 
Ich will dir (wegen Schularbeit) den Code nicht schicken, aber ich kann es dir in Worten beschreiben. Nimm einen String. Trage die Gleichung aus deinem Editfeld ein. Zerlege den String und achte dabei auf die Matematischen Operanden, also 5+64*9 würde in einer for schleife Wörlich so aussehen.
von Zeichen 1 bis Länge der Zeichenkette: prüfe ob es eine Zahl oder ein Operant ist. Ist es eine Zahl so prüfe zuerst ob die Boolsche Variable 'IS_a' false isr; wenn ja trage sie intern in die interne string Variable 'a' (in unserem Beispiel '5')deiner function ein, andernfalls in die interne string Variable 'b', ist es aber ein Operant, so trage ihn in die string variable 'operant' ein und überprüfe ob der Boolsche Variable 'IS_a' auf True. Trifft dies nicht zu, so setze 'IS_a' auf True, um folgende Zahlenkette in 'b' einzutragen(in unserem Beispiel erst '6' und dann '4' wobei die sechs beim eintrag von '4' nicht überschreben werden darf, also muss man ein Plus dazwischen setzen). Ist die Bedingung wahr, so rufe die OperandenFunctionen mit Parametern 'a', 'b' und 'Operant' auf, um 'a' und 'b' nach dem Operanden zu verechnen. der Rückgabewert der function ist das Ergebnis der Rechnung. Um hier nicht den Fehler zu machen die Punkt vor Strichrechnung zu machen empfiehlt es sich vorher eine Variable zu setzen, bei welcher prüfung ich mich befinde (also erst Klammern, dann Potenz, dann Mal, dann geteilt, dann plus, dann minus). trifft Operand in Variable nicht mit dem Wert von 'operant' zusammen, so wird 'a' und 'b' in eine weitere string Variable mit + angehängt und der Operand dazwischen gesetzt. Ebenso verhält es sich mit dem Ergebnis der OperandenFunction.
So jetzt nur noch den gegenwärtigen Operanden in 'Operant' setzen und for schleife solange aufrufen, bis alle zu bearbitenden Operanten abgearbeitet sind. Bevor die schleife erneut Aufgerunfen wird, so muss man die Variable mit der Neuen Gleichung in dei Varible der Alte Gleichung einsetzten. Kommt man innerhalb der for schleife ans ende des Strings, so muss man bevor man den Operanden bearbeitet, eine Prüfung zu diesem Zweck machen.

Ich habe vlt. etwas umstädlich geschrieben, du kannst ja mal das machen, was du verstanden hast. Ich kann ja dann nochmal kleinigkeiten erklären.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 Uhr.
Seite 5 von 5   « Erste     345   

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