AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit for-do

Ein Thema von fishbrain · begonnen am 25. Mär 2008 · letzter Beitrag vom 27. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#1

Problem mit for-do

  Alt 25. Mär 2008, 22:46
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
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( ).

MFG
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit for-do

  Alt 25. Mär 2008, 22:50
Müsste die Grenze für die Schleife über i nicht np-1 heissen?
Markus Kinzler
  Mit Zitat antworten Zitat
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#3

Re: Problem mit for-do

  Alt 25. Mär 2008, 22:52
Stimmt danke.
mal schaun obs jetzt geht.

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

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Problem mit for-do

  Alt 25. Mär 2008, 23:33
mach daraus
if atoms[i,k].Knownnuklid = true then bitte ein
if atoms[i,k].Knownnuklid then und daraus
if atoms[i,k].stable = false then das hier
if not atoms[i,k].stable then
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#5

Re: Problem mit for-do

  Alt 25. Mär 2008, 23:47
ist zwar schöner, löst aber leider das Problem nicht.
Trotzdem danke.
  Mit Zitat antworten Zitat
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#6

Re: Problem mit for-do

  Alt 25. Mär 2008, 23:50
Na toll. Ich hab das Array von TPoint auf 100 begrenzt.
Sorry leute das hätt ich auch selber rausfinden können.
close pls.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Problem mit for-do

  Alt 26. Mär 2008, 00:17
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.
  Mit Zitat antworten Zitat
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#8

Re: Problem mit for-do

  Alt 26. Mär 2008, 00:26
Stimmt. Ich meinte natürlich das ich euch nicht damit belästigen hätte müssen .
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#9

Re: Problem mit for-do

  Alt 27. Mär 2008, 12:08
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
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Problem mit for-do

  Alt 27. Mär 2008, 16:20
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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 02:52 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