Random!!!

Hello everybody
Actually I just need a procedure that runs randomly  one of the
case...of numbers (look below), but thats not all, the difficult part is that it has to run all numbers, and not a number twice. I hope you understood.

Here an example, the first number is randomly selected between 1 and
10 e.x: 9 now it runs in the case...of:
9: begin {do something} end;  
ok the whole procedure runs totally 10 times, so the next time maybe 2 is selected but not 9! I tried to show the procedure how it should look like:


procedure rand;
var

what:integer;
{your vars}

begin

randomize;
{your code}

case what of

1:     begin
     {do my code}
     end;
2:     begin
     {do my code}
     end;
3:     begin
     {do my code}
     end;
{...}
{the numbers go until 10, each number only once!}
end;

end;

{By the way I tried to make it simple, because in my application it has
to choose from about 70 (!) numbers. I wrote my own code, but it didn't work; because it's quite long I didn't post it.}

:)dluedi
LVL 1
dluediAsked:
Who is Participating?
 
DidierDConnect With a Mentor Commented:
dluedi,

You can do it like this


Procedure Rand(List: TStringList);
var
  what, Index: integer;
begin
  Randomize;
  Index := Random(List.Count);
  What := StrToInt(List[Index]);
  List.Delete(Index);
  case what of
    1: ShowMessage('1');
    2: ShowMessage('2');
    3: ShowMessage('3');
    4: ShowMessage('4');
    5: ShowMessage('5');
    6: ShowMessage('6');
    7: ShowMessage('7');
    8: ShowMessage('8');
    9: ShowMessage('9');
    10: ShowMessage('10');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  NumberList: TStringList;
  i: integer;
begin
  NumberList := TStringList.Create;
  for i := 1 to 10 do
  begin
    NumberList.Add(IntToStr(i));
  end;
  for i := 1 to 10 do
  begin
    Rand(NumberList);
  end;
  NumberList.Free;
end;
0
 
dyancerCommented:
try this url,
I hope it help you.
http://www.delphi3000.com/articles/article_1898.asp

0
 
mpootsCommented:
Hi,

I am not sure but I think you are looking for something like this:


procedure TfrmMain.Button1Click(Sender: TObject);
var i, j : integer; numbers : string;
begin

  randomize;
  numbers := '';
  for j := 0 to 8 do
    while true do begin
      //this gives random numbers between 1 and 10
      i := Random(10 - (1 + 1)) + 1 + 1 ;
      if pos(IntToStr(i),numbers) = 0 then begin
        numbers := numbers + IntToStr(i);
        showmessage(IntToStr(i));
        break;
      end;
    end
end;

Good luck

Marcel    
0
 
dluediAuthor Commented:
Actually this was already the answer to my question, that went farst! Thx to everybody else who tried to help!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.