05. december 2002 - 06:04Der er
10 kommentarer og 1 løsning
Tilfældige tal til bingo
når jeg trykker på en knap skal jeg finde et tilfældigt tal mellem 1 og 90 (incl),næste gang jeg trykker på knappen skal programmet finde et nyt tal, men det må naturligvis ikke være et af de tal der er "udtrukket" hvordan gør jeg det??
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
Du kan lave et array med tallene 1 til 90 (Tal: Array[1..90] of Byte). Til at starte med indeholder de blot talrækken i den naturlige rækkefølge: (for I := 1 to 90 do Tal[I] := I;). Herefter er det bare at bytte rund på tallene. Lav en routine du udføre mindst 45 gange, hvor du bytter 2 (tilfældige) elementer. Du burde således "statistisk" have byttet alle elementer og du kan efterfølgende bare løbe dit array igennem fra element 1 og fremefter (hvert tal findes kun en gang i array'et).
Routinen der "bytter rundt" på elementerne kunne se ud som flg: <SNIP> var I: Integer; Elm1, Elm2: Integer; Tmp: Integer; begin Randomize; // Vi kunne "statistisk" nøjes med 45 gennemløb, men: "better safe than sorry" for I := 1 to 500 // Nu har vi byttet "rigeligt" begin Elm1 := Random(90)+1; Elm2 := Random(90)+1; Tmp := Tal[Elm1]; Tal[Elm1] := Tal[Elm2]; Tal[Elm2] := Tmp; end; end; </SNIP>
Det kan gøres smartere, put en listbox på din form + en button og indsæt nedenstående kode, hnis du ligger din mail adr. sender jeg dig program med kode
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; NytTal: Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Randomize; NytTal:= Random(90)+1; end;
procedure TForm1.Button1Click(Sender: TObject); begin if ListBox1.Count < 90 then begin while (ListBox1.Items.IndexOf(Inttostr(NytTal)) <> -1) and (ListBox1.Count < 90) do NytTal:= Random(90)+1; ListBox1.Items.Insert(0, IntToStr(NytTal)); end else ShowMessage('Alle tal er udtrukket'); end;
Hej Pellelil Det lyder meget fint det du skriver men jeg tror ikke helt jeg forstår det kan du ikke lave et eks. hvor du opretter den Array og får et tilfældig tal frem i en Label hver gang der bliver trykket på en knap
så tror jeg at jeg beder kan forstå hvad der sker, TAK
anold>Hvorfor rode med arrays, når det kan klares med denne lille procedure
procedure TForm1.Button1Click(Sender: TObject); begin if ListBox1.Count < 90 then begin while (ListBox1.Items.IndexOf(Inttostr(NytTal)) <> -1)do NytTal:= Random(90)+1; ListBox1.Items.Insert(0, IntToStr(NytTal)); end else ShowMessage('Alle tal er udtrukket'); end;
Hej Morten_s Tak for din Mail det ser ud til at virke som jeg gerne vil have det, så jeg acceptere dit svar !!
jeg har lige et lille tillægs spørgsmål
Hvordan kan dette her laves nemmer
ListBox1.Items.Insert(0, IntToStr(NytTal)); If NytTal = 1 Then Image1.Picture.LoadFromFile('C:\Bingo\rod.bmp'); If NytTal = 2 Then Image2.Picture.LoadFromFile('C:\Bingo\rod.bmp'); If NytTal = 3 Then Image3.Picture.LoadFromFile('C:\Bingo\rod.bmp'); If NytTal = 4 Then Image4.Picture.LoadFromFile('C:\Bingo\rod.bmp'); If NytTal = 5 Then Image5.Picture.LoadFromFile('C:\Bingo\rod.bmp'); .... ..... If NytTal = 90 Then Image90.Picture.LoadFromFile('C:\Bingo\rod.bmp');
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.