![]() |
Frage nicht erneut wählen!
Hi, bei meinem Programm ist im Moment eingestellt, das es automatisch eine züfällige Frage aussucht, ist es denn möglich einen vermerk zu machen, sodas nicht 2x die gleiche ausgewählt wird!?
Delphi-Quellcode:
if tquizfragen.FieldByName('L1').AsInteger = 1 then begin
tquizfragen.first; tquizfragen.moveby(random(tquizfragen.RecordCount)); end else Form4.Show; |
Re: Frage nicht erneut wählen!
Ich kenn mich zwar nicht mit Datenbanken aus, aber du könntest die geladenen Fragen in eine StringList schreiben und dann überprüfen, ob der Eintrag schon existiert oder nicht... 8)
|
Re: Frage nicht erneut wählen!
Zitat:
|
Re: Frage nicht erneut wählen!
du könntest das ganze in ein array schreiben und dann abprüfen ;)
|
Re: Frage nicht erneut wählen!
Angenommen, du hast die Frage in einer Variablen s:
Delphi-Quellcode:
So müsste es gehen! :wink:
procedure TForm1.Button1Click(Sender: TObject);
var SL: TStringList; begin SL:=TStringList.Create; if SL.IndexOf(s)=-1 then begin SL.Add(s); //Code für die Ausgabe der Frage end else begin //Frage wurde schon mal verwendet end; end; |
Re: Frage nicht erneut wählen!
und bei dem array müsstest dus mit einer schleife durchgehen sollte ja kein problem sein ;)
|
Re: Frage nicht erneut wählen!
Angenommen, du hast 100 Fragen (0-99).
Dann füllst du zuerst ein dynamisches Array mit diesen Zahlen und tauscht zufällig immer 2 Einträge aus.
Delphi-Quellcode:
var
QIndex:array of Integer; // globales Array AktuelleFrage:integer; procedure SetupQIndex; var i, randomIndex,tmp : integer; begin SetLength(QIndex, 100); // 100 Elemente for i:=0 to 99 do QIndex[i] := i; // Vorbelegung // durcheinander bringen // zufällig zwei Einträge vertauschen for i:=0 to 99 do begin tmp := QIndex[i]; randomIndex := Random(100); QIndex[i] := QIndex[randomIndex]; QIndex[randomindex] := tmp; end; AktuelleFrage := 99; end; // hole die Nummer der Frage function GetNextQIndex:integer; begin if AktuelleFrage < 0 then raise Exception.Create('keine Fragen mehr'); result := QIndex[AktuelleFrage]; Dec(AktuelleFrage); end; |
Re: Frage nicht erneut wählen!
shmia: aber das zufällige kann theoretisch auch werte verlieren oder?
|
Re: Frage nicht erneut wählen!
hallo aerotech!
wieso so kompliziert? hänge in deiner tabelle ein zusätzliches feld mit der bezeichnung 'abgefragt' an. beim programmstart stellt du bei allen eingträgen 'abgefragt' auf false und sobald die frage gestellt wurde auf 'true' du kannst das ganze verfahren noch weiter verfeinern und ein feld 'richtig_beantwortet' anlegen. so lange dort nicht 'true' steht, darf die frage ausgewählt werden. mfg, stefan |
Re: Frage nicht erneut wählen!
Zitat:
[0, 1, 2, 3, ..., 99] Dann wird jedes Element mit einem zufälligen Element vertauscht: [78, 1, 2, 3, ..., 99] // 1. Durchgang [78, 63, 3, ..., 99] // 2. Durchgang [78, 63, 99, ..., 3] // 3. Durchgang (3<->99) Ein Element könnte auch mit sich selber vertauscht werden, aber das macht nix. Nach 100 Vertauschungen ist garantiert Unordnung, obwohl wahrscheinlich schon nach 50 Vertauschungen genügend Unordnung vorhanden ist. Würde man nun das Array wieder sortieren hätte man wieder die Elemente 0..99. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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