AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zahl sollte nich im Set1 und im Set2 sein ist aber in Set2
Thema durchsuchen
Ansicht
Themen-Optionen

Zahl sollte nich im Set1 und im Set2 sein ist aber in Set2

Offene Frage von "ryLIX"
Ein Thema von ryLIX · begonnen am 16. Nov 2008 · letzter Beitrag vom 16. Nov 2008
Antwort Antwort
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Zahl sollte nich im Set1 und im Set2 sein ist aber in Set2

  Alt 16. Nov 2008, 15:43
Erstmal Hi
Ich bin dabei mir ein kleines Programm zu schreiben welches aus einer ListBox mit Namen zufällig 2, 4 oder 6 Namen auswählt.
Wenn die Funktion das 2. mal aufgerufen wird sollten die letzten Namen nich wieder auftauchen.

Der Code sieht nun so aus:
Delphi-Quellcode:
procedure TForm1.cmdGetPlayersClick(Sender: TObject);
 type
  TPlayersResult = set of 1..255; //Set für den neuen Durchgang
  TPlayersLastResult = set of 1..255; //Set für den vorherigen Druchgang
  //Zufallszahlen generation Count= druchläufe der Schleife; MaxValue= MaxVal für Rnd; TPlayersResult= Set mit den Zahlen
function Players(ACount : Byte; AMaxValue : Byte) : TPlayersResult;
var
  i: Byte;
  number: Byte;
  LastResult : TPlayersLastResult; //Init der Variablen
begin
  if ACount > AMaxValue then //Ist die Anzahl der durchläufe größer als der Maximale Wert für Rnd?
    raise EInvalidOp.Create('Man kann nicht mehr Namen aus der Liste ziehen, als vorhanden!');

  Result := []; //Set leeren
  for i := 1 to ACount do // Starten der Schleife
  begin
    repeat
      number := Random(aMaxValue); //Generieren der Zahlen
    until not(number in Result) AND not(number in LastResult); //Vergleich der Zahlen ob schon im Set; 2. Vergleich geht nicht?O.o
    Include(Result, number); //Zahl einfügen in das Set
  end;
end;


var
max : Integer;
PlayersResult: TPlayersResult;
PlayersLastResult : TPlayersLastResult;
i: Byte; //Init der Variablen
begin
max := ListBox1.Items.Count; //max = MaxValue der Zufallfunktion

     if valAnzahl2.Checked = true then begin //Funktionsaufruf für die zufalls wahl von 2Spielern
        PlayersResult := Players(2, max); //Funktion Players(Spieler, MaxAnzahlSpieler)
        Memo1.Lines.Clear; //Memo für die Ergebnisanzeige leeren
        for i := 0 to max do //Schleife zum Übertragen der Namen
            begin
             if i in PlayersResult then //Auslesen des Strings
             Memo1.Lines.Add(ListBox1.Items.Strings[i]); //Namen von der ListBox ins Memo
             PlayersLastResult := []; //Set mit dem letzten ergebnis leeren
             PlayersLastResult := PlayersResult; //Aktuelles Ergebnis wird zu letztem Ergebnis
        end;
     end
     else if valAnzahl4.Checked = true then begin //Das ganze für 4 Spieler
         PlayersResult := Players(4, max);
         Memo1.Lines.Clear;
        for i := 0 to max do
            begin
             if i in PlayersResult then
             Memo1.Lines.Add(ListBox1.Items.Strings[i]);
             PlayersLastResult := [];
             PlayersLastResult := PlayersResult;
            end;
     end
     else if valAnzahl6.Checked = true then begin //Das ganze für 6 Spieler
         PlayersResult := Players(6, max);
         Memo1.Lines.Clear;
        for i := 0 to max do
            begin
             if i in PlayersResult then
             Memo1.Lines.Add(ListBox1.Items.Strings[i]);
             PlayersLastResult := [];
             PlayersLastResult := PlayersResult;
            end;
      end
end;
Aber leider tauchen die Namen vom letzten mal nach dem neuen Klick wieder auf.
Irgendwie erkenn ich den Fehler nicht

Weiß wer von euch Hilfe?
Markus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zahl sollte nich im Set1 und im Set2 sein ist aber in Se

  Alt 16. Nov 2008, 16:36
Ich habe mir das nicht in allen Einzelheiten angesehen, aber lokale Variablen gelten nur innerhalb der Funktion, in der sie deklariert sind. Du könntest sie nun global definieren oder besser als private Felder von Form1. So bleiben sie für die Dauer des Programmablaufs gültig.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#3

Re: Zahl sollte nich im Set1 und im Set2 sein ist aber in Se

  Alt 16. Nov 2008, 17:10
Hmm die Sets ändern sich aber nicht oder?
Weil ein Ergebnis bekomme ich ja. Also die Namen aus der ListBox werden im Memo angezeigt.
Aber ich werde die Variablen und die Sets dazu mal Global definieren.

//edit
Hab die Sets nun Glogal definiert geändert hat sich nichts.
Kann es sein dass das Set mit den letzten Zahlen immer leer ist?
Irgendwie beiß ich mir die Zähne daran aus
Markus
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:35 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