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 Problem mit for-do (https://www.delphipraxis.net/110853-problem-mit-do.html)

fishbrain 25. Mär 2008 21:46


Problem mit for-do
 
Hi,

ich schreibe gerade eine Simulation des radioaktiven Zerfalls.
Ich baue dazu ein 2d Netz von Atomen auf und benuzte dazu for-do.

Delphi-Quellcode:
...
  for I := 0 to 29 do
   begin
    for k := 0 to 26  do
     begin
       atoms[i,k] := TAtom.create;
       atoms[i,k].x := I*35;
       atoms[i,k].y := K*35;
       atoms[i,k].changeatom(strtoint(edit1.text),strtoint(edit2.text));
       with canvas do
       begin
         brush.Color := atoms[i,k].color;
         ellipse(atoms[i,k].x,atoms[i,k].y,atoms[i,k].x+35,atoms[i,k].y + 35);
       end;
     end;
   end;
...
  for i := 0 to 29  do
    begin
      for k := 0 to 26  do
       begin
       if atoms[i,k].Knownnuklid = true then
       begin
        if atoms[i,k].stable = false then
        begin
          atoms[i,k].randomdecay(0.2);
          if atoms[i,k].stable = true then stable := stable +1;
        end;
       end;
      end;
...
 for I := 0 to 29 do
   begin
    for k := 0 to 26  do
     begin
       with canvas do
       begin
         brush.Color := atoms[i,k].color;
         font.Color := atoms[i,k].Fcolor;
         pen.Color := RGB(255,255,255);
         ellipse(atoms[i,k].x,atoms[i,k].y,atoms[i,k].x+35,atoms[i,k].y + 35);
         Font.Size := 8;
         Textout(atoms[i,k].x+15,atoms[i,k].y+10,atoms[i,k].Kuerzel);
         Font.Size := 6;
         Textout(atoms[i,k].x+4,atoms[i,k].y+5,inttostr(atoms[i,k].Protonen+atoms[i,k].Neutronen));
         Textout(atoms[i,k].x+4,atoms[i,k].y+16,inttostr(atoms[i,k].Protonen));
       end;
     end;
   end;
...
Soweit sogut. Hat auch bisher alles geklappt. Heute hab ich dann ein Diagramm auf einer weiteren Form mit eingebaut.

Delphi-Quellcode:
Procedure TForm1.paintchart;
var
 i:Integer;
begin
  with canvas do
  begin
    moveto(20,480);
    for I := 0 to np do
    begin
      lineto(ChartPoint[i].X+20,480-ChartPoint[i].y div 2);
    end;

  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  with canvas do
  begin
    Brush.Color := rgb(255,255,255);
    Rectangle(0, 0, 500, 500);
    MoveTo(20,480);
    LineTo(20,20);
    MoveTo(20,480);
    LineTo(480,480);
    textout(10,10,'Anzahl Teilchen');
    textout(450,480,'Zeit in s');
    paintchart;
  end;
end;

Procedure TForm1.addPoint;
begin
  Chartpoint[np].X := n;
  Chartpoint[np].Y := stable;
  np := np +1;
  n := n+1;
end;
Und seitdem hängt er sich manchmal(hab noch nicht herausgefunden wann) bei Zeile
Delphi-Quellcode:
if atoms[i,k].Knownnuklid = true then
auf. Wenn ich dann über i bzw k mit dem mauszeiger gehe Zeigt er für i 30 und für k 17 an.
Aber eigentlich sollte es doch nur bis 29 und 26 gehen.oder?

Ich hab keine Ahnnung wie das zustande kommt, da es ja vorher ohne Probleme gegangen ist und ich nichts an der besagten Fehlerzeile geändert habe.

Würde mich sehr freuen wenn jemand eine Lösung parat hat( :dp: ).

MFG

mkinzler 25. Mär 2008 21:50

Re: Problem mit for-do
 
Müsste die Grenze für die Schleife über i nicht np-1 heissen?

fishbrain 25. Mär 2008 21:52

Re: Problem mit for-do
 
Stimmt danke.
mal schaun obs jetzt geht.

Edit:
Jetzt schaut mein Diagramm zwar besser aus, das Problem ist aber noch da.

dominikkv 25. Mär 2008 22:33

Re: Problem mit for-do
 
mach daraus
Delphi-Quellcode:
if atoms[i,k].Knownnuklid = true then
bitte ein
Delphi-Quellcode:
if atoms[i,k].Knownnuklid then
und daraus
Delphi-Quellcode:
if atoms[i,k].stable = false then
das hier
Delphi-Quellcode:
if not atoms[i,k].stable then

fishbrain 25. Mär 2008 22:47

Re: Problem mit for-do
 
ist zwar schöner, löst aber leider das Problem nicht.
Trotzdem danke.

fishbrain 25. Mär 2008 22:50

Re: Problem mit for-do
 
Na toll. Ich hab das Array von TPoint auf 100 begrenzt.
Sorry leute das hätt ich auch selber rausfinden können.
close pls.

Die Muhkuh 25. Mär 2008 23:17

Re: Problem mit for-do
 
Zitat:

Zitat von fishbrain
Na toll. Ich hab das Array von TPoint auf 100 begrenzt.
Sorry leute das hätt ich auch selber rausfinden können.
close pls.

Das hast Du doch selbst herausgefunden. :gruebel:

fishbrain 25. Mär 2008 23:26

Re: Problem mit for-do
 
Stimmt. Ich meinte natürlich das ich euch nicht damit belästigen hätte müssen ;).

Andy386 27. Mär 2008 11:08

Re: Problem mit for-do
 
Wenn du viel mit Matreizen arbeitest, hier noch ein kleiner "verschönerungstipp":
aus
Delphi-Quellcode:
for I := 0 to 29 do
   begin
    for k := 0 to 26  do
     begin
         [befehle]
     end;
   end;
kann man auch
Delphi-Quellcode:
for I := 0 to 29 do
       for k := 0 to 26  do
        begin
         [befehle]
        end;
machen. Finde ich übersichtlicher

Medium 27. Mär 2008 15:20

Re: Problem mit for-do
 
Ich find es grausig. Solange man nicht nur Einzeiler hat, finde ich es immer wieder verwirrend, wenn ich einen Einrückungsblock habe, zu dem kein "end;" existiert. Stell dir mal vor, [befehle] ist länger als ein Bildschirm voll, und wohlmöglich selbst alles noch in 3. bis 4. Ebene verschachtelt. Such dann mal den Fehler, wenn irgend ein Block zu oft/selten/garnicht ausgeführt wird. Kann man, ist aber unnötig erschwert.

Was ich für i.O. halte wäre etwas wie:
Delphi-Quellcode:
for I := 0 to 29 do
  for k := 0 to 26 do
    Befehl(parameter1, parameter2);
Letztlich eine philosophische Frage, aber Einrückungen ohne zugehörige Schließung hab mich schon zu oft meine Haarfarbe gekostet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.
Seite 1 von 2  1 2      

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