Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Graph zeichnen (https://www.delphipraxis.net/128885-graph-zeichnen.html)

-Julchen- 8. Feb 2009 15:20


Graph zeichnen
 
Hallo,

wir haben die Aufgabe, ein Programm zu erstellen (delphi 5), in dem man ein Koordinatenstystem hat, daneben 4 verschiedene Funktionen anklicken kann und im unten stehenden Feld Zahlen für die Variablen eingeben kann.

Die ersten zwei Funktionen funktionieren, aber irgendwie wird die dritte Funktion nicht gezeichnet.
Weiß jemand Rat? :roll:
Wir sind leider nicht so gut in Informatik.^^ :(

Vielen Dank im Voraus!

Hier der Quelltext:

Delphi-Quellcode:
implementation

{$R *.dfm}

var a,b,c: real;

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin

  with image1.Canvas do
  begin
  moveto(20,220); lineto(420,220);               //x-Achse
  moveto(220,20); lineto(220,420);               //y-Achse
  moveto(410,215); lineto (422,220);
  lineto (410,225);                              //x-Pfeil
  moveto(215,30); lineto (220,18);
  lineto (225,30);                               //y-Pfeil
  textout(425,225,'x');                          //Beschriftung
    for i:=-3 to 3 do
    begin
    moveto(220+50*i,215);
    lineto (220+50*i,225);                       //x-Einteilung
    moveto(215,220+50*i);
    lineto (225,220+50*i);                       //y-Einteilung
    textout(222+50*i,225,inttostr(i));           //Zahlen x-Achse
    if i <> 0 then
    textout (205,213+50*i,inttostr(-i));         //Zahlen y-Achse
    end;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j: integer;
x,y: real;
  begin

  a:=strtofloat(Edit1.Text);                      //Eingabe
  b:=strtofloat(Edit2.Text);

  i:=20;
  while i < 420 do
  begin
  i:=i+1;
  x:=(i-220)/50;
  y:=a*x+b;
  j:=round((220-y*50));
  image1.Canvas.Pixels[i,j]:=clred;
  image1.Canvas.Pen.Color:=clred;
  image1.Canvas.TextOut(400,42,'y=ax+b');          //Beschriftung
  end;
 
end;



procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
x,y:real;
  begin

  a:=strtofloat(Edit1.Text);                        //Eingabe
  b:=strtofloat(Edit2.Text);
  c:=strtofloat(Edit3.Text);

  i:=70;
  while i<420 do
    begin
    i:=i+1;
    x:=(i-220)/50;                                  //x skalieren
    y:=a*sqr(x)+b*x+c;                              //Funktion y=ax²+bx+c
    j:=round((220-y*50));                           //j berechnen
    image1.Canvas.Pixels[i,j]:=clgreen;             //zeichnen

    image1.Canvas.TextOut(400,100,'y=ax²+bx+c');    //Beschriftung
    end;
  end;


procedure TForm1.Button3Click(Sender: TObject);
var i,j:integer;
x,y:real;
begin

  a:=strtofloat(Edit1.Text);                         //Eingabe
  b:=strtofloat(Edit2.Text);
  c:=strtofloat(Edit3.Text);

 
  i:=70;
  while i<420 do
    begin
    i:=i+1;
    x:=(i-220)/50;                                      //x skalieren
    y:=a*sqr(x+b)+c;                                    //Funktion y=a*(x+b)²+c
    j:=round((220-y*50));                               //j berechnen
    image1.Canvas.Pixels[i,j]:=clblue;                  //zeichnen

    image1.Canvas.TextOut(400,100,'y=a*sqr(x+b)+c');    //Beschriftung
    end;
  end;

end;

end.
:hi: :oops:

mr_emre_d 8. Feb 2009 15:24

Re: Graph zeichnen
 
Was für Werte haben a,b,c bei der dritten Funktion ?

-Julchen- 8. Feb 2009 15:39

Re: Graph zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Werte kann der Benutzer selbst eingeben.

So siehts aus:

Schnipp


[edit=Matze]Bild angehängt. MfG, Matze[/edit]

Noedel 8. Feb 2009 17:28

Re: Graph zeichnen
 
ich hab das ganze mal selber kompiliert (mit deinem QC) und das ganze geht wunderbar, soweit ich das sehe.
Wüsste also nicht, was da nicht stimmen sollte...
Was passiert überhaupt? Gar nichts?

-Julchen- 8. Feb 2009 18:05

Re: Graph zeichnen
 
Nein, es passiert gar nix.

Mir ist aber schon von Anfang an was komisches aufgefallen:
Wir haben das ja in der Schule programmiert und sollten das zu Hause weiter machen.
Also hab ich den ganzen Ordner auf meinen PC gezogen und als ich das bearbeiten wollte, ist mir aufgefallen, dass ich nicht mehr auf den grünen Pfeil klicken kann (um es abzuspielen), da dann gleich eine Fehlermeldung kommt, obwohl ich da noch NICHTS geändert hatte.

Die Fehlermeldung lautet:
[Fatal Error] Unit1.pas(6): File not found: 'Variants.dcu'

Also hab ich dann einfach immer was dazugeschrieben, es abgespeichert und "project1.exe" aufgerufen, um es mir anzugucken. Jedoch ist wie gesagt bei der dritten Funktion, bei der ich neuen Code hinzugefügt hatte, nix passiert.

Oder kann man das so nicht machen? :gruebel:

Noedel 8. Feb 2009 18:43

Re: Graph zeichnen
 
Am besten wäre es wohl in dem Fall, ein neues Projekt anzufangen, und den Code zu übernehmen.
So viel ist auf deinem Projekt ja nicht drauf. Aber ne Erklärung habe ich dafür auch nicht... ;)

taaktaak 8. Feb 2009 19:13

Re: Graph zeichnen
 
Moin, Moin.
Ich denke, das ist kein großes Problem. Immer wenn du ein neues Formular erzeugst, werden in uses automatisch eine Reihe von Units aufgenommen, auch "Variants" - obwohl man die meist gar nicht benötigt. Und diese Units findet der Compiler auf deinem System nicht. Komisch, aber nicht weiter tragisch.
Für deinen Source benötigst du sie ebenfalls nicht. Also ist die Lösung ganz einfach: Einfach "Variants" aus der uses-Liste löschen.

Noedel 8. Feb 2009 19:21

Re: Graph zeichnen
 
erklärt das das eigentliche Problem / Fehler / Bug ... vom TE?
Wie gesagt, ich habe mir alles aus dem QC von Julchen übernommen und einfach einen Button3, 3 Editfelder und ein Image1 auf eine sonst leere Form geklatscht und den Code eingesetzt. Alles lief problemlos. (Das KOS habe ich nicht gezeichnet :P )
Da kann doch nur ein Bug oÄ vorliegen?!
Oder gibts dafür eine Erklärung?

taaktaak 8. Feb 2009 19:24

Re: Graph zeichnen
 
Meine Antwort bezieht sich (natürlich) nur auf die in #5 beklagte Fehlermeldung

Forlan 8. Feb 2009 19:26

Re: Graph zeichnen
 
Zitat:

Zitat von taaktaak
Meine Antwort bezieht sich (natürlich) nur auf die in #5 beklagte Fehlermeldung

Ist doch klar... Die Unit "Variants" gab es in Delphi 5 doch noch garnicht^^
Von daher einfach aus der Uses Klausel entfernen, und schon sollte es kein Problem beim Kompilieren geben :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.
Seite 1 von 2  1 2      

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