AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Ein Graphenzeichner
Thema durchsuchen
Ansicht
Themen-Optionen

Ein Graphenzeichner

Ein Thema von Birzenbae · begonnen am 29. Dez 2004 · letzter Beitrag vom 13. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Birzenbae
Birzenbae
Registriert seit: 8. Okt 2004
Wie ihr aus dem Titel unschwer erkennen könnt handelt es sich hierbei um ein Programm mit dem man Graphen zeichnen lassen kann. Die größe der Einheiten lassen sich für beide Achsen begrenzt einstellen. Bisher kann man die Graphen von Geradenfunktionen(<- weiss nicht genau ob der Name dieser Funktion korrekt ist, bitte um Antwort), Potenzfunktionen und Wurzelfunktionen zeichnen.
Da es sich hierbei um mein Schulprojekt handelt bitte ich um ganz viel Feedback was man besser machen könnte und ob ihr euch gut in den Quelltext einlesen konntet, da ich noch keine Kommentare reingeschrieben hab.

EDIT: Neuste Version HIER
Angehängte Dateien
Dateityp: zip graph_961.zip (253,5 KB, 338x aufgerufen)
 
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#2
  Alt 29. Dez 2004, 03:36
Wie man so was auch wunderbar objektorientiert lösen kann, kannst du dir mal an meinem Schiefen Wurf angucken.

Desweiteren finde ich das mit den zwei Fenstern etwas unhandlich. Und warum kann man das Fenster mit dem Grafen nicht maximieren? Eie Zoomfunktion wäre auch nicht schlecht.

In den Code habe ich nur kurz reingeguckt aber das:
Delphi-Quellcode:
    if Combobox1.text = 'Geradenfunktionthen
    begin
      //...
    end
    else if Combobox1.Text = 'Potenzfunktionthen
    begin
      //...
    end
    else if Combobox1.Text = 'Wurzelfunktionthen
    begin
      //...
    end;
Läßt sich mit einer case-Anweisung eleganter lösen:
Delphi-Quellcode:
case ComboBox1.ItemIndex of
  0:;
  1:;
  2:;
end;
Und mir ist noch aufgefallen, dass der Code sehr stark an die GUI gebunden ist. Willst du jetzt eine andere Oberfläche aufsetzten, bedeutet das ziemlich viel Arbeit. Trenne Code von der GUI besser und du hast es einfacher bei Änderungen. Dann bietet sich auch gleich an das ganze OOP gerecht zu machen.
Ich habe bei meinem Programm eine extra Klasse nur für das Koordinatensystem. Da könnte ich einen beliebeigen Grafen drauf zeichen, ohne den Code für das Koordinatensystem zu ändern, anzupassen oder gar neu schreiben zu müssen.

Wenn ich das Fenster mit dem Grafen minimier und wieder maximiere, ist er weg. Wie man auch das Problem löst, kannst du dir auch an meinem Programm angucken.

Wäre auch schön, wenn man nicht noch mal den Grafen zeichnen müsste, wenn man den Maßstab ändert.

Und du solltest den Quellcode besser formatieren. Das:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var c,d,i,n,y:Integer;
    a,b,m:real;
    einheity,einheitx:integer;
begin
einheity:=strtoint(Combobox2.Text);
einheitx:=strtoint(Combobox3.Text);
with Form1.Canvas do begin

if Combobox1.text='Geradenfunktionthen begin
m:=strtofloat(Edit1.Text);
n:=strtoint(Edit3.Text);
moveto(400,300-n);
for i:=0 to 401 do begin
y:=geraden(m,i, einheitx,einheity,n);
lineto(400+i, 300-y);
moveto(400+i, 300-y);
end;
moveto(400,300-n);
for i:=0 to 401 do begin
y:=geraden(m,i, einheitx,einheity,n);
lineto(400-i, 300-(2*n*einheity)+y);
moveto(400-i, 300-(2*n*einheity)+y);
end;

end else if Combobox1.Text='Potenzfunktionthen begin
a:=strtofloat(Edit8.text);
b:=strtofloat(Edit10.text);
d:=strtoint(Edit11.Text);
c:=strtoint(Edit12.Text);
moveto(400,300-d);
for i:=0 to 401 do begin
y:=Potenz(a,b, einheitx,einheity,i,d,c);
lineto(400+i, 300-y);
moveto(400+i, 300-y);
end;
moveto(400,300);
for i:=0 to 401 do begin
y:=Potenz(a,b, einheitx,einheity,-1*i,d,c);
lineto(400-i, 300-y);
moveto(400-i, 300-y);
end;

end else if Combobox1.Text='Wurzelfunktionthen begin
a:=strtofloat(Edit4.text);
b:=strtofloat(Edit6.text);
c:=strtoint(Edit7.Text);
moveto(400+(round(b)*einheitx),300-(c*einheity));
for i:=1 to 401 do begin
if (i div einheitx)>=b then begin
y:=Wurzel(a,i,b,einheitx,einheity,c);
lineto(400+i, 300-y);
moveto(400+i, 300-y);
end;
end;
end;

end;

end;
ist so gut wie nicht wartbar. Wenn du da einen Fehler suchst oder wenn du da was erweitern willst, wünsche ich viel Spass. Das hingegen:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  c, d, i, n, y: Integer;
  a, b, m : real;
  einheity, einheitx: integer;
begin
  einheity := strtoint(Combobox2.Text);
  einheitx := strtoint(Combobox3.Text);
  with Form1.Canvas do
  begin

    if Combobox1.text = 'Geradenfunktionthen
    begin
      m := strtofloat(Edit1.Text);
      n := strtoint(Edit3.Text);
      moveto(400, 300 - n);
      for i := 0 to 401 do
      begin
        y := geraden(m, i, einheitx, einheity, n);
        lineto(400 + i, 300 - y);
        moveto(400 + i, 300 - y);
      end;
      moveto(400, 300 - n);
      for i := 0 to 401 do
      begin
        y := geraden(m, i, einheitx, einheity, n);
        lineto(400 - i, 300 - (2 * n * einheity) + y);
        moveto(400 - i, 300 - (2 * n * einheity) + y);
      end;

    end
    else if Combobox1.Text = 'Potenzfunktionthen
    begin
      a := strtofloat(Edit8.text);
      b := strtofloat(Edit10.text);
      d := strtoint(Edit11.Text);
      c := strtoint(Edit12.Text);
      moveto(400, 300 - d);
      for i := 0 to 401 do
      begin
        y := Potenz(a, b, einheitx, einheity, i, d, c);
        lineto(400 + i, 300 - y);
        moveto(400 + i, 300 - y);
      end;
      moveto(400, 300);
      for i := 0 to 401 do
      begin
        y := Potenz(a, b, einheitx, einheity, -1 * i, d, c);
        lineto(400 - i, 300 - y);
        moveto(400 - i, 300 - y);
      end;

    end
    else if Combobox1.Text = 'Wurzelfunktionthen
    begin
      a := strtofloat(Edit4.text);
      b := strtofloat(Edit6.text);
      c := strtoint(Edit7.Text);
      moveto(400 + (round(b) * einheitx), 300 - (c * einheity));
      for i := 1 to 401 do
      begin
        if (i div einheitx) >= b then
        begin
          y := Wurzel(a, i, b, einheitx, einheity, c);
          lineto(400 + i, 300 - y);
          moveto(400 + i, 300 - y);
        end;
      end;
    end;
  end;
end;
kann man lesen.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Birzenbae
Birzenbae

 
Delphi 2005 Personal
 
#3
  Alt 29. Dez 2004, 04:07
erstmal THX fürs Feedback:
1. Ja, ich werd das demnächst auch noch ändern.
2. Das Fenster soll man nicht vergrößern, da ich alle zeichnung an der Pixelzahl fest gemacht hab.
3. Zoomfunktion mal sehen, aber die ist ja auch schon teilweise dadurch entahlten, dass man die Einheiten vergrößern kann.
4. case-Anweisung hätte ich ja selbst darauf kommen müssen hatten wir als letztes durchgenommen
5. vll mach ichs ja noch oop, will aber die referendarin nich schocken, weil ich dank der DP schon mehr kann als die andern, abgesehen
davon, dass ich oop nicht kann, müsste ich mir dann mal ansehen.
6. das mit dem verschwinden der graphen werd ich auch noch bearbeiten
7. das die graphen beim verändern des Koordinatensystems gelöscht werden hab ich deswegen gemacht, dass man da nicht 2 Graphen aus
unterschiedlichen Systemen verwechselt, aber wenn es besser wäre, dass die bleiben mach ich das dann.
8. Quelltext... ja das is eben ne gewohnheit von mir, werd ich natürlich noch bearbeiten.
David
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#4
  Alt 29. Dez 2004, 10:58
7. Das ist ja OK. Aber zeichne ihn doch einfach neu, dass man nicht selber erst wieder auf "Zeichnen" klicken muss.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Birzenbae
Birzenbae

 
Delphi 2005 Personal
 
#5
  Alt 29. Dez 2004, 17:18
so habs jetzt ausgebessert:
-Ist alles in einem Fenster.
-Die Graphen verschwinden beim minimieren und maximieren nicht
-Beim Ändern des Koordinatensystems wird der aktuell angegebene Graph dem Koordinatensystem angepasst.
-Der Quelltext ist jetzt hoffentlich besser gestaltet

Den Donwload gibts oben.
David
  Mit Zitat antworten Zitat
Benutzerbild von Birzenbae
Birzenbae

 
Delphi 2005 Personal
 
#6
  Alt 30. Dez 2004, 01:58
So erstmal tut mir leid wegen dem doppelpost, aber sonst liest das hier keiner.
hab jetzt paar kleinigkeiten mehr ausgebessert:
-Hab das Image für das Koordinatensystem kleiner gemacht, da die Leute, die die Auflösung auf 1024*768 eingestellt haben, einige Probleme mit der größe des Forms hatten.
-Beim ändern des Systems wird jetzt wirklich der zuletzt gezeichnete Graph auf die neuen Einstellungen angepasst.
-Es gibt eine Speicherfunktion mit der man das System samt Graphen als Bitmap speichern kann und kann mir jmd. sagen ob es SavePictureDialog auch schon in D6 gab?
-Es ist jetzt auch oop geschrieben, wär schön wenn das einer überprüfen könnte ob die Konventionen eingehalten wurden.
-statt der XP-Manifest-kompo hab ich es per resource gemacht, da wir in der Schule nur D6 haben

Download gibts oben.
David
  Mit Zitat antworten Zitat
supermuckl

 
FreePascal / Lazarus
 
#7
  Alt 30. Dez 2004, 02:26
Zitat:
kann mir jmd. sagen ob es SavePictureDialog auch schon in D6 gab?
gibts
  Mit Zitat antworten Zitat
Benutzerbild von Birzenbae
Birzenbae

 
Delphi 2005 Personal
 
#8
  Alt 30. Dez 2004, 02:31
da bin ich aber froh, denn ich hab mal dem Oberchef in Info en Prog gegeben, wo die hälfte aller verwendeten Komponenten in D6 nicht gab.
Und sowat soll mir nich noch einmal passieren.
David
  Mit Zitat antworten Zitat
supermuckl

 
FreePascal / Lazarus
 
#9
  Alt 30. Dez 2004, 02:33
je nach delphi lizens-version ists unterschiedlich ausgebaut
aber D6 und D7 in der gleichen "stufe" sollten eigentlich fast gleich sein.. da fehlt nicht viel bzw garnix

ich hab D7 prof im geschäft und D6 ent zuhaus und hatte noch nie ein projekt, das ne fehlende VCL komponente beinhaltete
  Mit Zitat antworten Zitat
Benutzerbild von Birzenbae
Birzenbae

 
Delphi 2005 Personal
 
#10
  Alt 30. Dez 2004, 02:56
ja aber ich hab eben D7 Ent und inna schule haben wir D6 Per oder Pro (weiss ich im mom nicht mehr genau).

Desweiteren hab ich mehrere ganz bööse fehler im quellcode des oop teils behoben

Download gibts wie immer oben
David
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
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