Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
Solved

# Random!!!

Posted on 2001-06-02
Medium Priority
233 Views
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;

begin

randomize;

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
0
Question by:dluedi
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 2

Accepted Solution

DidierD earned 120 total points
ID: 6149324
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
end;
for i := 1 to 10 do
begin
Rand(NumberList);
end;
NumberList.Free;
end;
0

LVL 1

Expert Comment

ID: 6150409
try this url,
http://www.delphi3000.com/articles/article_1898.asp

0

LVL 1

Expert Comment

ID: 6151128
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

LVL 1

Author Comment

ID: 6152267
Actually this was already the answer to my question, that went farst! Thx to everybody else who tried to help!
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…