Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wertetabellen und Funktionen (https://www.delphipraxis.net/146925-wertetabellen-und-funktionen.html)

Delphi-Freund 9. Feb 2010 20:49

Re: Wertetabellen und Funktionen
 
Also die wertetabelle ist teil meines programmes... man kann eben anfangswert (aw) endwert (ew) und schrittweite (s) eingeben...
Delphi-Quellcode:
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;
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...
Delphi-Quellcode:
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;
Wäre euch dankbar für hilfe ;)

mfg Delphi-Freund

[edit=mkinzler]Code-Tags durch Delphi-Tags ersetzt; Was spricht den eigentlich gegen den richtigen Tag :gruebel: Mfg, mkinzler[/edit]

sx2008 10. Feb 2010 04:45

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:
function TForm1.MeineFunkt(x:Extended):Extended;
begin
  result := a*sqr(x)+b*x+c;
end;
Statt nun überall trunc(a*sqr(aw)+b*aw+c) aufzurufen, verwendest du stattdessen Trunc(MeineFunkt(aw)).
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,...)

Delphi-Freund 10. Feb 2010 13:23

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:

Zitat von sx2008
4.) du verwendest die Paintbox auf eine falsche Weise
Auf eine Paintbox sollte man nur auf dem Event OnPaint heraus zeichen.

Sry aber ich arbeite zum ersten mal mit Grafiken in Delphi. Hab nur im inet gelesen, dass die Darstellung z.b. mit Images oder PaintBox möglich ist.
Wie verwende ich die PaintBox richtig?

mfg Delphi-Freund ;)

patti 10. Feb 2010 14:09

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

Delphi-Freund 10. Feb 2010 20:54

Re: Wertetabellen und Funktionen
 
Ok Vielen Dank euch allen!! :) Mein Problem hat sich gelöst ;)
DANKE :hello: :firejump:

mfg Delphi-Freund

Luckie 10. Feb 2010 21:12

Re: Wertetabellen und Funktionen
 
Zitat:

Zitat von Delphi-Freund
dass Delphi mit LineTo nur integerwerte verarbeitet.

Überleg mal, warum das wohl so ist. Oder wie willst du 1,56987 Pixel darstellen/ansprechen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Seite 2 von 2     12   

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