Einzelnen Beitrag anzeigen

pagan1900

Registriert seit: 27. Mär 2006
25 Beiträge
 
#1

problem baue endlosschleife

  Alt 5. Jun 2006, 15:23
folgendes:
----------
n bekomme ich vom benutzer übergeben
sprich ich habe eine radiogroup, in der festgelegt ist, das
wenn der benutzer den radiobutton an indexstelle 0 anklickt

case n.ItemIndex of
(n beduetet anzahl der knoten!)
0: n:=2; m_max:=2; min_m:=1;
1: n:=3; min_m:=2; m_max:=5;
2: n:=4; min_m:=4; m_max:=7;
3: n:=5; min_m:=5; m_max:=8;
4: n:=6; min_m:=6; m_max:=11;
5: n:=7; min_m:=7; m_max:=12;
6: n:=8; min_m:=8; m_max:=14;

daher bekomme ich das n her! (später soll es wenn der benutzer
den erstenlevel (2knotiger graph) erfolgreich bestanden hat automatisch sich erhöhen (level um level).)


Delphi-Quellcode:
(*-----Bestimmen--von--m-----------------------------*)
 function m_bestimmen(min_m:integer; m_max:integer):integer;
 var local:integer;
  begin
    repeat
    local:=random(m_max+1);
    until local>=min_m;
    result:=local;
  end;
hier bestimme ich die pfeildaten:
NUR das problem ich produziere ständig eine endlosschleife an dieser stelle
siehe folgenden quelltextausschnitt!

Kann mir jemand bei diesem problem helfen ?
freue mich auf eure antwort!

Delphi-Quellcode:
 procedure a_b_Pfeilnur1mal(a,b:TPfeil;var a1,b1:integer);
 var locali:integer;
     notOK:boolean;
 begin
   notok:=false;
   repeat
     repeat
       a1:=random(n)+1;
       b1:=random(n)+1;
     until a1<>b1; // Neuen Vektor finden

     for locali:= 1 to m do
      begin
        NotOK:=((a1 = a[locali]) and (b1 = b[locali])) or // V1 = V[I] oder
               ((b1 = a[locali]) and (a1 = b[locali])); // V1 = -V[I]
        if NotOK then break;
            // Wenn NotOK, also der Vektor schon vorhanden ist,
            // dann Abbruch der FOR-Schleife.
      end;

   until not(NotOK);
         // Wenn die FOR-Schleife ganz durchlaufen wird und immer gilt:
         // NotOK = false ( Razz ), dann ist der neue Vektor noch nicht vorhanden.
         // Also: Ende bei not(NotOK);
 end;
und hier soll er rein:

Delphi-Quellcode:
procedure TfrmUebung.Button1Click(Sender: TObject);
  var
  x1,y1,x2,y2:integer;
  locali,localj:integer;
  a1,b1:integer;
  px1,px2:integer;
  Gewichtung:string;
  begin
    m:=m_bestimmen(min_m,m_max); //anzahl der Pfeile wird festgestellt

    //wertelegen(Anf,Ende,Kosten);

    for locali:= 1 to m do
     begin
      a_b_Pfeilnur1mal(Anf,Ende,a1,b1);
      Anf[locali]:=(a1);
      Ende[locali]:=(b1);
      Kosten[locali]:=Kosten_bestimmen;
     end;
   
  {Eingaben}
    for locali:=1 to m do
     begin
       px1:=Anf[locali];
       px2:=Ende[locali];
       Gewichtung:=inttostr(Kosten[locali]);
       with imgGraph,imgGraph.Canvas do
        begin
          Font.Name := 'Arial';
          Font.Height := 30;
// ** Einzelner Pfeil
          X1 := (Kx[px1]);
          Y1 := (Ky[px1]);
          X2 := (Kx[px2]);
          Y2 := (Ky[px2]);
          setzeKnoten(Canvas,Kx,Ky,KRadius,Startknoten);
          Brush.Color := clBlack;
          ZeichneVerbindungspfeil(Canvas,x1,y1,x2,y2,KRadius,Offset);
          pfeilbewertung (x1,y1,x2,y2,KRadius,Offset,Gewichtung,Canvas);
        end;
     end;
 end;
  Mit Zitat antworten Zitat