Последовательность чисел в строке
Добрый день. Возникло затруднение: необходимо сгенерировать некую случайную последовательность из цифр от 0 до 9, причём так, чтобы кол-во цифр задавалось пользователем. В столбик я сумел это сделать. А как в строчку? Вот мой код:
@echo off
set t=0
echo:Set key length
set /p l=
cls
:1
set /A t=t+1
Set /A q=(%RANDOM%%%9)
echo:%q%
if %t% neq %l% goto 1
pause
Вот доведённая до ума программа, но, всё равно, хотелось бы результаты в строчку. Зарание спасибо.
@echo off
mode con: cols=38 lines=20 & color 1F
:2
cls
set t=0
echo:Set key length
set /p l=
cls
echo:
echo: KEYMASTER
echo:
echo: ====================================
:1
set /A t=t+1
Set /A q=(%RANDOM%%%9)
echo: %q%
if %t% neq %l% goto 1
echo: ====================================
pause
:3
echo:One more key? (Y/N)
set /p a=
if %a%==Y goto 2
if %a%==y goto 2
if %a%==N goto 4
if %a%==n goto 4
cls & echo:Yes or No, please & goto 3
:4
cls
echo:Good bye!
pause
|
Код:
@echo off
setlocal
set /p n="Enter length of string: "
for /l %%i in (1,1,%n%) do call:1
echo. bye..
goto:eof
:1
0>nul set /p="%random:~1,1%"
|
Прошу прощения, но это не то... Представленная программа выдаёт значения одно за другим, но каждый раз в НОВОЙ строке. А мне бы хотелось получить все значения в ОДНУ строку. Как-то так: 2 4 8 9 6 3, на пример.
|
Цитата:
Цитата subuday77
выдаёт значения одно за другим, но каждый раз в НОВОЙ строке. »
|
1.cmd:
Код:
> 1
Enter length of string: 2
62 bye..
> 1
Enter length of string: 3
668 bye..
> 1
Enter length of string: 4
8525 bye..
> 1
Enter length of string: 5
58646 bye..
>
ЧЯДНТ?
|
м.б. нужны пробелы между цифрами?
Код:
0>nul set /p="%random:~1,1% "
Код:
Enter length of string: 3
1 5 4 bye..
|
Огромное спасибо всем!
Решил сам, вот так:
Код:
@echo off
mode con: cols=38 lines=20 & color 2F
:1
cls
echo:Enter key length
set /p I=
set N=10
set CHAR=0 1 2 3 4 5 6 7 8 9
:LOOP
set /a R=1+%N%*%random%/32768
for /f "tokens=%R%" %%q in ("%CHAR%") do (set T=%%q%T%)
Set /a I-=1
If %I% GTR 0 goto LOOP
cls
echo:
echo:
echo: KEYMASTER-2
ECHO: ************************************
echo:
echo: %T%
echo:
echo: ************************************
set T=
pause
:3
echo:One more key? (Y/N)
set /p a=
if %a%==Y goto 1
if %a%==y goto 1
if %a%==N goto 4
if %a%==n goto 4
cls & echo:Yes or No, please & goto 3
:4
cls
echo:Good bye!
pause
Работает. Теперь другой вопрос. С помощью какой команды можно установить ограничение на переменную %I% таким образом, чтобы ввести можно было только цифры? Я мыслю, что-то типа "IF %I% NOT ERRORLEVL ??????? GOTO куда-нибудь". Но как точно, не могу придумать.
А с пробелами между цифрами, в предыдущем сообщени я не понял... Как их сделать? И возможно ли разделить пробелами цифры в моём коде?
Зарание благодарен всем!
|
Код:
@echo off
setlocal
:0
set "n=0"
set /p n="Enter length of string: "
if %n% equ 0 set "n=null"
echo.%n%| 1>nul findstr "[^0-9]" && echo %n%: WRONG input value && goto:0
for /l %%i in (1,1,%n%) do call:1
echo bye..
goto:eof
:1
0>nul set /p="%random:~1,1% "
|
> возможно ли разделить пробелами цифры в моём коде?
конечно. вставь пробел, а не приклеивай вплотную.
[offtop]
%random:~1,1% сеет не очень равномерно:
0, 1 и 2 довольно стабильно получается заметно больше 3-:-9
Кроме того есть вероятность сгенерировать пустоту
Лучше использовать %random:~-1%
Код:
@echo off &setlocal
set /a n=100000
call:0
echo call:1
for /l %%i in (%n%,-1,1) do (title %%i &call:1)
set from.%n%.
call:0
echo call:2
for /l %%i in (%n%,-1,1) do (title %%i &call:2)
set from.%n%.
goto:eof
:0
for %%d in (0 1 2 3 4 5 6 7 8 9) do set /a from.%n%.%%d=0
goto:eof
:1
set /a x=%random:~1,1%
call set /a from.%n%.%x% = %%from.%n%.%x%%% +1
goto:eof
:2
set /a x=%random:~-1%
call set /a from.%n%.%x% = %%from.%n%.%x%%% +1
goto:eof
выдача
Код:
call:1
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
from.100000.0=12237
from.100000.1=12361
from.100000.2=11489
from.100000.3=9112
from.100000.4=9223
from.100000.5=9086
from.100000.6=9221
from.100000.7=9205
from.100000.8=9054
from.100000.9=9012
call:2
from.100000.0=9960
from.100000.1=10072
from.100000.2=9959
from.100000.3=9946
from.100000.4=9804
from.100000.5=10221
from.100000.6=10078
from.100000.7=9990
from.100000.8=10106
from.100000.9=9864
[/offtop]
|
Цитата:
Цитата kiripanda
Лучше использовать %random:~-1% »
|
попробуй %random:~0,1% получишь последовательности вида:
А в консоли FAR'a вообще прикол:
Цитата:
> echo %random%
6063
> echo %random%
6070
> echo %random%
6073
> echo %random%
6076
> echo %random%
6079
> echo %random%
6083
> echo %random%
6083
>
|
|
В консоли Far Manager'а
читать дальше »
вообще должно быть ;):
Код:
E:\Песочница\0248>echo %random%
%random%
E:\Песочница\0248>echo %random%
%random%
E:\Песочница\0248>echo %random%
%random%
если только Вы не отключили внутреннюю обработку команды echo самим Far Manager'ом (TechInfo #54).
|
Цитата:
Цитата Iska
если только Вы не отключили внутреннюю обработку команды echo самим Far Manager'ом (TechInfo #54). »
|
Да, нет ничего не отключал
Код:
> reg query hkcu\software\far2\system\executor
Ошибка: Не удается найти указанный раздел или параметр в реестре.
|
Спасибо большое всем!
Я всё сумел написать. Не совсем, как здесь предлагалось, но всё работает. Вот готовый код:
Код:
@echo off
title KEYMASTER-2
mode con: cols=38 lines=20 & color 2F
:1
cls
echo:Enter key length
set /p I=
set /a x=%I%
if %I%==0 echo:Free pass & goto 3
if %x%==0 goto 1
if %I% lss 0 goto 1
set N=10
set CHAR=0 1 2 3 4 5 6 7 8 9
:LOOP
set /a R=1+%N%*%random%/32768
for /f "tokens=%R%" %%q in ("%CHAR%") do (set T=%%q%T%)
Set /a I-=1
If %I% GTR 0 goto LOOP
If %I% lss 0 goto 1
cls
echo:
echo:
echo: KEYMASTER-2
ECHO: ************************************
echo:
echo: %T%
echo:
echo: ************************************
set T=
pause
:3
echo:One more key? (Y/N)
set /p a=
if %a%==Y goto 1
if %a%==y goto 1
if %a%==N goto 4
if %a%==n goto 4
cls & echo:Yes or No, please & goto 3
:4
cls
echo:Good bye!
pause
Ещё раз спасибо!
|
Цитата:
Цитата Foreigner
Да, нет ничего не отключал »
|
Странно. Тогда не знаю ;).
|
Время: 19:52.
© OSzone.net 2001-