Autor Beitrag
pagan1900
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 19.06.06 23:20 
Hi !
zu meinem Problem:
Ich möchte das der Anwender meines programms die veränderungen sehen kann während der algorithmus durchläuft!
Nur wie kann man es erreichen, wenn ich sleep und co innerhalb der procedure verwende wartet das programm seine zeit und gibt dann das endergebnis aus!
wie kann mann die ausgabe der werte (siehe code KW_dist,pre,R)so gestalten das erst
z.B. die initialisierung dagestellt wird
und dann die weiteren veränderungen!
immer wenn sich was ändert sollte es einem stringgrid übergeben werden
die Aktuellesituation soll auf stringgrid ausgegeben werden.


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure Dijkstra_Pfeil ( var pre,kw_dist:TKnoten; var b,c:TPfeil;{Endknotennummernvektor, Bewertungsvektor}
                           var PN:TKnoten_plus_1_feld; {Pfeilnummernvektor}
                               Knotenzahl:integer; Start:integer;var stringgrid1:Tstringgrid); {Anzahl Knoten}
var locali,localj,min:integer;
    R:array [1..8of boolean;
begin
   //Initialisierung
   for locali:=1 to Knotenzahl do
    begin
      pre[locali]:=0;
      stringgrid1.Cells[locali,1]:=inttostr(pre[locali]);
      kw_dist[locali]:=999;
      stringgrid1.Cells[locali,2]:=inttostr(kw_dist[locali]);
      R[locali]:=true;
    end
   kw_dist[Startknoten]:=0;
    stringgrid1.Cells[locali,2]:=inttostr(kw_dist[startknoten]);
   R[Startknoten]:=true;
   while true do   {Wiederholung Schritt 1 + 2}
    begin
    //Schritt 2
      min:=999;
      for localj:=1 to Knotenzahl do
       if R[localj] and (kw_dist[localj] < min)
        then
         begin
           min:=kw_dist[localj]; locali:=localj; end;
        if min = 999
         then exit;
    //Schritt 3
      for localj:=PN[locali] to PN[locali+1]-1 do
       if R[b[localj]] or ( kw_dist[b[localj]] = 999 )
        then
         if kw_dist[locali] + c[localj] < kw_dist[b[localj]]
          then
           begin
             kw_dist[b[localj]]:= kw_dist[locali] + c[localj];
             pre[b[localj]]:=locali;
             R[b[localj]]:= True;
           end;
    R[locali]:= False;
    stringgrid1.Cells[locali,1]:=inttostr(pre[locali]);
    stringgrid1.Cells[locali,2]:=inttostr(kw_dist[locali]);
    end;   {Ende Schritt 1 und 2}
end;


könnt ihr mir helfen?
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Di 20.06.06 06:48 
Application.ProcessMessages; einbauen.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)