![]() |
problem baue endlosschleife
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:
hier bestimme ich die pfeildaten:
(*-----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; 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:
und hier soll er rein:
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;
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; |
Re: problem baue endlosschleife
Bitte benutze die [delphi]-Tags für Delphi-Code.
Wenn ich das richtig sehe heissen sowohl die Variable als auch die RadioGroup beide "n"? |
Re: problem baue endlosschleife
ups falsch geschrieben, nein die radiogroup hat natürlich einen anderen namen!
ich wollte damit nur verdeutlichen woher ich n,max_m, m_min habe! das wichtigste ist, wie löse ich die endloschleife auf! ich will das das programm mir werte generiert, und mit denen einen graphen zeichnet ich muss also, da ein pfeil bei mir aus 2werten besteht, die in arrays abgespeichert werden Anf Ende (und der gewichtung wird seperat generiert) diese werden zum einen zum rechnen und zum anderen stellen diese beiden werte 2 punkte da die dann mit vektorpfeilen verbunden werden. das problem welches da besteht, da random irgendwelche werte produziert und das hier für beide werte, kann es sein,das folgendes passieren kann Anf: 1|2|3|4|1 ende 2|1|2|1|2 dises währe zwar noch nicht problematisch, aber nun generiere ich für jeden "pfeil" die gewichtung welche zum berechnen benötigt werden! Anf: 1|2|3|4|1 ende 2|1|2|1|2 kosten 1|2|9|8|5 und da ist nun das problem welches ich versucht habe aufzulösen! 2x ein pfeil 1->2,aber mit unterschiedlichen kosten! dieses muss aufgelöst werden, sprich jder pfeil der generiert wird darf im array nur 1x vorkommen! |
Re: problem baue endlosschleife
Warum machst du die Bestimmung nicht so?
Delphi-Quellcode:
Zu der Endlosschleife:
(*-----Bestimmen--von--m-----------------------------*)
function m_bestimmen(min_m:integer; m_max:integer):integer; begin // Liefert Zufallszahl m mit min_m >= m <= m_max result := random(m_max - min_m + 1) + min_m; end;
Delphi-Quellcode:
Sollte das dann nicht so heissen?
NotOK := ((a1 = a[locali]) and (b1 = b[locali])) or // V1 = V[I] oder
((b1 = a[locali]) and (a1 = b[locali])); // V1 = -V[I]
Delphi-Quellcode:
Ansonsten testest du ja im zweiten Fall auf den Vektor, der an f(x)=x gespiegelt ist, oder sehe ich das falsch?
NotOK := ((a1 = a[locali]) and (b1 = b[locali])) or // V1 = V[I] oder
((a1 = -a[locali]) and (b1 = - b[locali])); // V1 = -V[I] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 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