Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

A strange Random Number generator needed ASAP!!!

143 views
Skip to first unread message

nj...@my-deja.com

unread,
Sep 10, 1999, 3:00:00 AM9/10/99
to
It needs to make a nmber, and I can NEVER generate that number again, by
putting the number in a file or something The numbers need to be 4
digits, can you help me, I have dos 6.22


Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.

Walter Zackery

unread,
Sep 10, 1999, 3:00:00 AM9/10/99
to
Any random number generator will eventually repeat a number, given enough
time. A random number generator generating 4-digit numbers will begin
repeating numbers sooner rather than later. You can do a fairly decent
approximation of a 1 or 2 digit random number in Dos 6.22 using mainly the
TIME and CHOICE commands, but there's no way that I'm aware of to generate
an acceptably random 3-digit or higher number in 6.22 without shelling to
QBASIC. Here is such a random number generator for Dos 6.22 (or Windows NT).
The output is returned as the environmental variable %RANDOM%. You can
redirect this variable to a file if you so desire.


@ECHO OFF
echo > random.bas randomize timer
echo >>random.bas open "random.bat" for output as #1
echo >>random.bas print #1, "set random=",int (rnd * 9999) + 1
echo >>random.bas :system
qbasic/run random.bas
for %%? in (random.bat del) do call %%? random.ba?
echo %random%


<nj...@my-deja.com> wrote in message news:7r9hm1$96q$1...@nnrp1.deja.com...

Bill James

unread,
Sep 10, 1999, 3:00:00 AM9/10/99
to
This works in Win9x. Give it a try and see if it works for you in 6.22.

::Rand4dig.bat - Generate unique random 4 digit number
::using seconds and 1/10 seconds from system time.
::billja...@yahoo.com - 10 Sep 1999
@echo off
if %src%[==[ set src=%0
if not %1[==[ goto %1
:chk1
echo.|time | find "." > %temp%\}${
%src% loop1 0 1 2 3 4 5 6 7 8 9
:loop1
find "%2." %temp%\}${ > nul
if not errorlevel 1 goto set
if not %3[==[ for %%? in (shift goto:loop1) do %%?
:chk2
%src% loop2 0 1 2 3 4 5 6 7 8 9
:loop2
find ".%2" %temp%\}${ > nul
if not errorlevel 1 goto set
if not %3[==[ for %%? in (shift goto:loop2) do %%?
:set
for %%? in (set goto:chk2) do if %p1%[==[ %%? p1=%2
for %%? in (set goto:chk1) do if %p2%[==[ %%? p2=%2
for %%? in (set goto:chk2) do if %p3%[==[ %%? p3=%2
set p4=%2
set random=%p1%%p2%%p3%%p4%
::Start demo - using temp for logfile - don't for actual use.
::Be sure to create the logfile before 1st use.
::If Random number already used, rerun batch.
find "%random%" %temp%\Random.log > nul
if errorlevel 1 goto OK
echo %random% already exists. Getting another number...
for %%? in (p1 p2 p3 p4) do set %%?=
call %src%
:OK - number has not been used yet.
echo %random% >> %temp%\Random.log
echo New random number is: %random%
::Remove :: on next 2 lines for endless test. Use Ctrl+C to stop.
::for %%? in (p1 p2 p3 p4) do set %%?=
::call %src%
pause
cls
::End demo
:cleanup
for %%? in (p1 p2 p3 p4 random src) do set %%?=
del %temp%\}${

Bill James

nj...@my-deja.com wrote in message <7r9hm1$96q$1...@nnrp1.deja.com>...

Walter Zackery

unread,
Sep 10, 1999, 3:00:00 AM9/10/99
to
My previous posted batch file below has a flaw in it. It generates
random numbers from 0 to 9999 instead of generating only four-digit
random numbers. The questioner did not specify as to whether he (or
she) wanted 4-digit numbers from 1000 to 9999 or 4-digit numbers
from 0 to 9999, with numbers less than 1000 being left-padded with
zeros. So here are both approaches.


@ECHO OFF
:: Generates a 4-digit random number
:: ranging from 1000 to 9999.
echo > random.bas randomize timer
echo >>random.bas do
echo >>random.bas RanNum = int (rnd * 9999) + 1
echo >>random.bas loop while sgn (RanNum - 1000) = -1


echo >>random.bas open "random.bat" for output as #1

echo >>random.bas print #1,"set random=";ltrim$(str$(RanNum))


echo >>random.bas system
qbasic/run random.bas
for %%? in (random.bat del) do call %%? random.ba?

cls & echo %random%


@ECHO OFF
:: Generates a 4-digit random number
:: ranging from 0000 to 9999.
echo > random.bas randomize timer
echo >>random.bas RanNum = int (rnd * 9999) + 1
echo >>random.bas set$ = "set random="


echo >>random.bas open "random.bat" for output as #1

echo >>random.bas select case RanNum
echo >>random.bas case 1 to 9
echo >>random.bas print #1, set$;"000";ltrim$(str$(RanNum))
echo >>random.bas case 10 to 99
echo >>random.bas print #1, set$;"00";ltrim$(str$(RanNum))
echo >>random.bas case 100 to 999
echo >>random.bas print #1, set$;"0";ltrim$(str$(RanNum))
echo >>random.bas case else
echo >>random.bas print #1, set$;ltrim$(str$(RanNum))
echo >>random.bas end select


echo >>random.bas system
qbasic/run random.bas
for %%? in (random.bat del) do call %%? random.ba?

cls & echo %random%


Walter Zackery <zac...@bigfoot.com> wrote in message
news:7ra9a6$748m$1...@newssvr04-int.news.prodigy.com...
: Any random number generator will eventually repeat a number, given

: > It needs to make a nmber, and I can NEVER generate that number

:
:

Bill James

unread,
Sep 10, 1999, 3:00:00 AM9/10/99
to
Another way to do this using choice to parse the milliseconds:

::RdmC4dig.bat - Generate unique random 4 digit number
::using milliseconds from system time.


::billja...@yahoo.com - 10 Sep 1999
@echo off
if %src%[==[ set src=%0
if not %1[==[ goto %1

::get time and parse milliseconds for first 2 digits of random number.
echo.|time|find /i "current">cur^ent.bat
echo set timeis=%%3>current.bat
call cur^ent.bat
echo ;|choice/c;%timeis%; %src% loop;>cur^ent.bat
set dig12=
cur^ent.bat
:loop
for %%? in (.) do if %2[==%%?[ set dig12=
for %%? in (.) do if %2[==%%?[ shift
if %2[==A[ goto next
if %2[==P[ goto next
set dig12=%dig12%%2
shift
goto loop
::get time again and parse milliseconds for last 2 digits of random
number.
:next
echo.|time|find /i "current">cur^ent.bat
echo set timeis=%%3>current.bat
call cur^ent.bat
echo ;|choice/c;%timeis%; %src% loop2;>cur^ent.bat
set dig34=
cur^ent.bat
:loop2
for %%? in (.) do if %2[==%%?[ set dig34=
for %%? in (.) do if %2[==%%?[ shift
if %2[==A[ goto work
if %2[==P[ goto work
set dig34=%dig34%%2
shift
goto loop2
:work
::combine digit 12 and 34 for new 4 digit random number.
set random=%dig12%%dig34%


::Start demo - using temp for logfile - don't for actual use.
::Be sure to create the logfile before 1st use.
::If Random number already used, rerun batch.
find "%random%" %temp%\Random.log > nul
if errorlevel 1 goto OK
echo %random% already exists. Getting another number...
for %%? in (p1 p2 p3 p4) do set %%?=
call %src%
:OK - number has not been used yet.
echo %random% >> %temp%\Random.log
echo New random number is: %random%
::Remove :: on next 2 lines for endless test. Use Ctrl+C to stop.
::for %%? in (p1 p2 p3 p4) do set %%?=
::call %src%
pause
cls
::End demo
:cleanup
for %%? in (p1 p2 p3 p4 random src) do set %%?=

del cur?ent.bat

Bill James


>nj...@my-deja.com wrote in message <7r9hm1$96q$1...@nnrp1.deja.com>...

0 new messages