![]() |
Statistikprogramm
Hallo,
ich möchte für den Infounterricht ein delphi-programm schreiben (brauch es zu montag), wo man die platzierungen einer mannschaft in den letzten zehn jahren in edit fenster eingibt und dann soll er mir diese eingaben grafisch darstellen. Dazu hatten wir bisher nur beim zeichnen von linien die befehle moveto und lineto. Die Koodinatenachsen habe ich schon hinbekommen und richtig eingeteilt, jetzt ist nur mein problem wie ich aus den Eingaben den Graphen bekomme. Könnt ihr mir bitte helfen??? Danke Lg ichbinesnur |
Re: Statistikprogramm
Kannst du uns schonmal den Code zeigen, was du bis jetzt hast? Das macht es einfacher einen Ansatz für dein Problem zu posten :)
Btw: Herzlich Willkommen :dp: :) |
Re: Statistikprogramm
Das ist der Quellcod für das Koordinatensystem, die Beschriftung der Achsen und deren Einteilung. Es funktioniert einwandfrei.
Delphi-Quellcode:
[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; begin with pb_diagramm.Canvas do begin Moveto (20,10); //Ordinatenachse mit Pfeilspitzen Lineto (20,400); Moveto (20,10); Lineto (25,20); Moveto (20,10); Lineto (15,20); For i:=1 to 18 do begin //Einteilung der Achse Moveto (20,400-i*21); Lineto (15,400-i*21); end; Textout (30,10,'Platzierungen'); //Beschriftung Textout (5,17,'1'); Textout (5,38,'2'); Textout (5,59,'3'); Textout (5,80,'4'); Textout (5,101,'5'); Textout (5,121,'6'); Textout (5,142,'7'); Textout (5,163,'8'); Textout (5,184,'9'); Textout (1,205,'10'); Textout (1,226,'11'); Textout (1,247,'12'); Textout (1,268,'13'); Textout (1,289,'14'); Textout (1,310,'15'); Textout (1,331,'16'); Textout (1,352,'17'); Textout (1,373,'18'); Moveto (20,400); //Abzissenachse mit Pfeilspitzen Lineto (410,400); Moveto (410,400); Lineto (400,395); Moveto (410,400); Lineto (400,405); For i:=1 to 10 do begin Moveto (410-i*35,400); Lineto (410-i*35,405); Textout (45,405,'95/96'); Textout (80,405,'96/97'); Textout (115,405,'97/98'); Textout (150,405,'98/99'); Textout (185,405,'99/00'); Textout (220,405,'00/01'); Textout (255,405,'01/02'); Textout (290,405,'02/03'); Textout (325,405,'03/04'); Textout (360,405,'04/05'); Textout (400,405,'Saisons'); end; end; end; end. |
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist ja eine Delphi Frage. |
Re: Statistikprogramm
Zuerst ist zu sagen, dass der Code vom Stil her recht schlecht ist. Was passiert z.B. wenn du das Fenster größenmäßig etwas veränderst? Dann musst du jede Zeile umschreiben.
Den Abstand der Striche kannst du auch per
Delphi-Quellcode:
ausrechnen. Wobei die 30 dafür sorgen sollten, dass links und rechts noch ein bischen Platz ist.
d := round( (image.width-30)/ (AnzahlDerSpiele+1) )
Zum eigentlichen Problem: Du brauchst eigentlich nur den Umrechnungsfaktor TabellenPlatz -> Pixel und aktuelle Saison -> Pixel. Zweiteres habe ich oben schon angedeutet. Für die dritte Saison z.B. muss du den Punkt bei x = 15+3*d setzen. Für den Tabellenplatz wirds auch ähnlich: Sei s die Differenz zwischen bestem und schlechtestem Platz, dann sei
Delphi-Quellcode:
Dann gilt für die y-Koordinate
d' := round( (image.height-30) / (s+1) );
Delphi-Quellcode:
Die geschätzen 30 Pixel sind eigentlich auch nicht optimal gelöst, sollten aber für die meisten Größen funktionieren.
y:= round ( image.height-( 15+d'* [(PlatzInDieserSaison)-(PlatzInDerSchlechtestenSaison)] ) );
Mit den Gleichungen kannst du auch die Beschriftung anbringen, so dass dadurch auch sehr viel Tipparbeit entfällt. Auch die Pfeilspitzen kannst du relativ zur Bildgröße zeichnen lassen, dann solltest du für einen so gestalteten Code auch mehr Punkte bekommen, als für deinen sehr starren, den du jetzt hast. Schau dir vielleicht auch mal einen Styleguide zum Thema Einrücken an. Du hast unten einfach nur 3 end; geschrieben und ich wette, du kannst nicht sofort sagen, welches eigentlich was bedeutet.
Delphi-Quellcode:
Meine persönliche Meinung zu einem lesbaren Code.
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; begin with pb_diagramm.Canvas do begin Moveto (20,10); //Ordinatenachse mit Pfeilspitzen // Lineto (15,20); For i:=1 to 18 do //Einteilung der Achse begin Moveto (20,400-i*21); Lineto (15,400-i*21); end; Textout (30,10,'Platzierungen'); //Beschriftung Textout (5,17,'1'); // Textout (1,373,'18'); Moveto (20,400); //Abzissenachse mit Pfeilspitzen // Lineto (400,405); For i:=1 to 10 do begin Moveto (410-i*35,400); Lineto (410-i*35,405); Textout (45,405,'95/96'); // Textout (400,405,'Saisons'); end; end; // of with pb_diagramm.Canvas do end; // of Button1.click |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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