Avatar billede anold Nybegynder
05. december 2002 - 06:04 Der 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??
Avatar billede pellelil Nybegynder
05. december 2002 - 06:44 #1
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>
Avatar billede morten_s Nybegynder
05. december 2002 - 08:34 #2
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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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;

end.
Avatar billede anold Nybegynder
05. december 2002 - 09:03 #3
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
Avatar billede anold Nybegynder
05. december 2002 - 09:04 #4
Hej Morten_s
Min Mail er anold@worldonline.dk
Avatar billede morten_s Nybegynder
05. december 2002 - 09:06 #5
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;
Avatar billede morten_s Nybegynder
05. december 2002 - 09:14 #6
er sendt
Avatar billede anold Nybegynder
06. december 2002 - 08:26 #7
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');
Avatar billede morten_s Nybegynder
06. december 2002 - 08:33 #8
Gem dem i en TImageListe og load dem derfra
Avatar billede anold Nybegynder
06. december 2002 - 08:54 #9
Det lyder vel nok fantastisk smart !!!
øhh.. hvordan gør jeg lige det ?
Avatar billede morten_s Nybegynder
06. december 2002 - 09:14 #10
Sådan her


procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Canvas.Brush.Color:= Form1.Color;
  Form1.Canvas.FillRect(Rect(50, 50, 100, 100));
  ImageList1.Draw(Form1.Canvas, 50, 50,SpinEdit1.Value, True);
end;
Avatar billede morten_s Nybegynder
06. december 2002 - 09:16 #11
Eksempel er sendt til din mail
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester