есть проц. RandomRange -генерирует случайное целое в указанном диапазоне от 0 до n-1. Ей передается в р-ре EAX число n. Сгенериное число возвр-ся также в EAX
ещё есть Random - генерирует в диапазоне от 0 до ffffffffh, которое возвр-ся в EAX ;
Мне надо за пихать в массив 50 случайных значений в диапазоне -20 ...+20 .
в диапазоне от 0 до +20 это можно с помощью RandomRange, не догоняю как -20? Думаю задать массив с эттим диапазоном и сравнивать со сгенерированным числом, , если то что надо то каойнибудь счетчик+1 пока не станет 50..и т. д
всвязи с этим вопрос, , а как задать такой массив и каким образом сравнивать EAX(в нём рандом) с тем элементом.
вообщем я запутался
спасибо
Другие языки программирования и технологии
MASM32 случайные числа, , массив
Не нужно ничего ни с чем сравнивать. Просто генерируйте числа от 0 до 40 и вычитайте из них 20.
Пример генерации массива из 50 случайных чисел от -20 до 20:
.586
.model flat, c
option casemap :none
includelib msvcrt.lib
printf proto :dword, :vararg
_getch proto
_exit proto :dword
.const
ArrayLen = 50
.data
Frmt db "%5d", 0
Prompt db 13, 10, 10, "Для завершения работы нажмите любую клавишу... ", 0
.data?
Seed dd ?
Array dd ArrayLen dup (?)
.code
N169171421:
rdtsc
mov Seed, eax
mov ecx, ArrayLen
mov edi, offset Array
@@:
push ecx
mov eax, 41
call RandomRange
sub eax, 20
stosd
invoke printf, addr Frmt, dword ptr [edi - 4]
pop ecx
loop @B
invoke printf, addr Prompt
invoke _getch
invoke _exit, 0
RandomRange proc uses edx
mov edx, eax
imul eax, Seed, 08088405h
inc eax
mov Seed, eax
mul edx
mov eax, edx
ret
RandomRange endp
end N169171421
Пример выполнения программы:

P.S. В русском языке нет слова "вообщем".
Пример генерации массива из 50 случайных чисел от -20 до 20:
.586
.model flat, c
option casemap :none
includelib msvcrt.lib
printf proto :dword, :vararg
_getch proto
_exit proto :dword
.const
ArrayLen = 50
.data
Frmt db "%5d", 0
Prompt db 13, 10, 10, "Для завершения работы нажмите любую клавишу... ", 0
.data?
Seed dd ?
Array dd ArrayLen dup (?)
.code
N169171421:
rdtsc
mov Seed, eax
mov ecx, ArrayLen
mov edi, offset Array
@@:
push ecx
mov eax, 41
call RandomRange
sub eax, 20
stosd
invoke printf, addr Frmt, dword ptr [edi - 4]
pop ecx
loop @B
invoke printf, addr Prompt
invoke _getch
invoke _exit, 0
RandomRange proc uses edx
mov edx, eax
imul eax, Seed, 08088405h
inc eax
mov Seed, eax
mul edx
mov eax, edx
ret
RandomRange endp
end N169171421
Пример выполнения программы:

P.S. В русском языке нет слова "вообщем".
Александр Закиров
спасибо
представь результат, как целое со знаком (в дополнительном коде, т. е. ffffffffh = -1), нужна дробная часть примени масштабирование (только точка будет двоичной, а не десятичной: 1/2, 1/4, 1/8 ...), т. е. затем представь как число с фиксированной запятой
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
random_seed dd ?
res dd 0
sFmt db '%u',0DH,0AH,0
sBuf db 10 dup(0)
.code
Random proc dwBase:dword
push ebx
mov eax,dwBase
xor ebx,ebx
imul edx,random_seed,08088405h
inc edx
mov random_seed,edx
mul edx
mov eax,edx
pop ebx
ret
Random endp
Randomize proc
invoke GetTickCount
mov random_seed,eax
ret
Randomize endp
start:
invoke Randomize
invoke Random,7fffffffh
mov res,EAX
invoke wsprintf,ADDR sBuf,ADDR sFmt,res
invoke MessageBox,0,ADDR sBuf,0,0
invoke ExitProcess,0
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
random_seed dd ?
res dd 0
sFmt db '%u',0DH,0AH,0
sBuf db 10 dup(0)
.code
Random proc dwBase:dword
push ebx
mov eax,dwBase
xor ebx,ebx
imul edx,random_seed,08088405h
inc edx
mov random_seed,edx
mul edx
mov eax,edx
pop ebx
ret
Random endp
Randomize proc
invoke GetTickCount
mov random_seed,eax
ret
Randomize endp
start:
invoke Randomize
invoke Random,7fffffffh
mov res,EAX
invoke wsprintf,ADDR sBuf,ADDR sFmt,res
invoke MessageBox,0,ADDR sBuf,0,0
invoke ExitProcess,0
Василий Гончаров
Примерно так генерируются случайные числа. А вот с массивом сам разберись)
Похожие вопросы
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- Делфи, вывод в мемо случайных чисел без повторов из массива. массив от 1 до 35.
- Упорядочить массив по убыванию из 10 случайных чисел на промежутке от -500 до 500. Информатика, 9 класс.
- как сделать массив из случайных чисел от 1 до 15 (размерность массива 4х4) что бы они не повторялись в VBA????
- Генератор Случайных Чисел
- Заполните массив случайными числами. Отсортируйте массив по возрастанию методом пузырька.
- Дан линейный массив чисел N. N вводит пользователь. Вывести все простые числа массива.
- линейный массив из 20 элементов заполнить случайными числами в диапазоне от 0 до 1000 и отсортировать по возрастанию
- КАК С ГЕНЕРИРОВАТЬ ДВА МАССИВА ИЗ СЛУЧАЙНЫХ ЧИСЕЛ С ПОМОЩЬЮ RANDOM НА ЯЗЫКЕ СИ? Я смог только заполнить от 0 до 255
- Нужен массив, размером в 100 элементом, заполненный случайными числами, отсортированными в порядке возрастания