PDA

Показать полную графическую версию : [решено] Последовательность чисел в строке


subuday77
11-05-2013, 03:32
Добрый день. Возникло затруднение: необходимо сгенерировать некую случайную последовательность из цифр от 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

Foreigner
11-05-2013, 07:06
@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%"

subuday77
11-05-2013, 13:38
Прошу прощения, но это не то... Представленная программа выдаёт значения одно за другим, но каждый раз в НОВОЙ строке. А мне бы хотелось получить все значения в ОДНУ строку. Как-то так: 2 4 8 9 6 3, на пример.

Foreigner
11-05-2013, 14:17
выдаёт значения одно за другим, но каждый раз в НОВОЙ строке. »
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..

>

ЧЯДНТ?

kiripanda
11-05-2013, 15:39
м.б. нужны пробелы между цифрами?
0>nul set /p="%random:~1,1% "
Enter length of string: 3
1 5 4 bye..

subuday77
11-05-2013, 16:05
Огромное спасибо всем!
Решил сам, вот так:
@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 куда-нибудь". Но как точно, не могу придумать.

А с пробелами между цифрами, в предыдущем сообщени я не понял... Как их сделать? И возможно ли разделить пробелами цифры в моём коде?

Зарание благодарен всем!

Foreigner
11-05-2013, 16:52
@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% "

kiripanda
11-05-2013, 16:55
> возможно ли разделить пробелами цифры в моём коде?
конечно. вставь пробел, а не приклеивай вплотную.


%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

Foreigner
11-05-2013, 17:01
Лучше использовать %random:~-1% »
попробуй %random:~0,1% получишь последовательности вида:

22111
11333
12221

А в консоли FAR'a вообще прикол:

> echo %random%
6063

> echo %random%
6070

> echo %random%
6073

> echo %random%
6076

> echo %random%
6079

> echo %random%
6083

> echo %random%
6083

>

Iska
11-05-2013, 18:02
В консоли Far Manager'а вообще должно быть ;):
E:\Песочница\0248>echo %random%
%random%

E:\Песочница\0248>echo %random%
%random%

E:\Песочница\0248>echo %random%
%random%
если только Вы не отключили внутреннюю обработку команды echo самим Far Manager'ом (TechInfo #54).

Foreigner
11-05-2013, 18:38
если только Вы не отключили внутреннюю обработку команды echo самим Far Manager'ом (TechInfo #54). »
Да, нет ничего не отключал

> reg query hkcu\software\far2\system\executor
Ошибка: Не удается найти указанный раздел или параметр в реестре.

subuday77
11-05-2013, 19:03
Спасибо большое всем!
Я всё сумел написать. Не совсем, как здесь предлагалось, но всё работает. Вот готовый код:

@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Ещё раз спасибо!

Iska
11-05-2013, 20:25
Да, нет ничего не отключал »
Странно. Тогда не знаю ;).




© OSzone.net 2001-2012