Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 5
1

Генератор случайных чисел

29.12.2017, 15:47. Показов 2701. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разработать программу генератора случайных чисел в сопроцессоре. Случайные числа X изменяются в диапазоне 0..79, Y = 0..25. Используя генератор случайных чисел, заполнить экран дисплея при нажатии клавиши пробел, при Enter экран должен восстанавливаться. Программа должна передавать управление в фоновую программу или MS-DOS при нажатии ESC.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2017, 15:47
Ответы с готовыми решениями:

Генератор случайных чисел
В книге Зубкова наткнулась на программку, которая генерирует случайные числа при помощи системного...

Используя генератор случайных чисел, заполнить экран дисплея звездочками
Разработать программу генератор случайных чисел. Случайные числа х изменяются в диапазоне 0..79,...

Не могу полностью понять код программы. Генератор случайных чисел
Помогите написать толковые комментарии к этой части программы. Не очень ясно с каким числом мы...

Создать генератор случайных чисел с вычеркиванием сгенерированных чисел
Помогите пож. решить задачку: 1 Есть диапазон чисел от 1 до «i» 2 Необходимо выбрать случайное...

7
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
29.12.2017, 15:54 2
А что такое "генератора случайных чисел в сопроцессоре"? И при чём здесь "Случайные числа X изменяются в диапазоне 0..79, Y = 0..25" - эти числа целые, в то время как FPU предназначен для работы с действительными (хотя результаты может сохранять в разных форматах)?
0
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 5
30.12.2017, 11:13  [ТС] 3
Как я понял, надо сделать так, чтобы при нажатии на пробел на экране рисовалась звездочка (забыл уточнить в условии), координаты которой (X;Y), которые в свою очередь генерируются случайным образом. Буду очень признателен, если кто-то поможет.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
30.12.2017, 14:23 4
Про звёздочку понятно. Неясно, каким образом формируется псевдослучайное число.
О алгоритмах ГПСЧ в Wikipedia:
https://ru.wikipedia.org/wiki/... йных_чисел

В вашем тексте есть фраза смысл которой непонятен
Цитата Сообщение от 4lexx Посмотреть сообщение
Разработать программу генератора случайных чисел в сопроцессоре
Если нужен линейный конгруэнтный метод, то как его "засунуть" в FPU?
0
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 5
30.12.2017, 15:43  [ТС] 5
Возможно, "в сопроцессоре" в условии задачи лишнее. Или возможен еще вариант (если не получится разобраться с генерацией случайных чисел) чтобы пользователь сам задавал координаты. Надеюсь на вашу помощь.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
30.12.2017, 16:21 6
Т.е. мне нужно будет защищать лабу у преподавателя? Если он не против - по телефону, хорошо?

Добавлено через 10 минут
Что такое
Цитата Сообщение от 4lexx Посмотреть сообщение
при Enter экран должен восстанавливаться.
Это очистка экрана или восстановление предыдущего значения экрана (до начала вывода звёздочек)?
0
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 5
30.12.2017, 16:24  [ТС] 7
Это очистка экрана
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
30.12.2017, 21:50 8
Лучший ответ Сообщение было отмечено 4lexx как решение

Решение

Линейный конгруэнтный метод. Коэффициенты не знаю откуда взял - где-то в интернете.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
.MODEL  Small
 
.STACK  100h
 
.DATA
        ;константы кодов клавиш
        kbESC           equ     1Bh
        kbENTER         equ     0Dh
        kbSpace         equ     20h
        ;параметры ГПСЧ
        Seed            dw      0
        RandA           dw      10001
        RandC           dw      3
        RandM           dw      17417
        ;сообщение
        Msg             db      'Функции клавиш:', 0Dh, 0Ah
                        db      'ESC - выход из программы,', 0Dh, 0Ah
                        db      'Space (пробел) - вывести символ "*" в случайной позиции экрана,', 0Dh, 0Ah
                        db      'ENTER (ввод) - восстановить экран.', 0Dh, 0Ah
                        db      '$'
.DATA?
        ;переменные
        X               dw      ?
        Y               dw      ?
        ;буфер экрана
        ScreenBuffer    db      25*80*2 dup(?)
.CODE
 
Randomize       proc
        push    es
        push    ax
        mov     ax,     40h
        mov     es,     ax
        mov     ax,     es:[6Ch]
        mov     Seed,   ax
        pop     ax
        pop     es
        ret
Randomize       endp
 
Random  proc
        push    bx
        push    dx
        push    ax
 
        mov     ax,     Seed
        mov     bx,     RandA
        mul     bx
        add     ax,     RandC
        adc     dx,     0
        mov     bx,     RandM
        div     bx
        mov     ax,     dx
        mov     Seed,   ax
        mov     dx,     0
        pop     bx
        div     bx
        mov     ax,     dx
 
        pop     dx
        pop     bx
        ret
Random  endp
 
main    proc far
        ; пролог
        mov     ax,     @data
        mov     ds,     ax      ; DS = сегмент .DATA
        mov     es,     ax
;**********************************************
        ;вывод информационного сообщения
        mov     ah,     09h
        lea     dx,     [Msg]
        int     21h
        ;инициализация ГСПЧ
        call    Randomize
        ;копирование экрана в буффер
        push    ds
        mov     ax,     0B800h
        mov     ds,     ax
        mov     si,     0
        lea     di,     [ScreenBuffer]
        mov     cx,     25*80
        rep     movsw
        pop     ds
;**********************************************
        ;программный цикл
@@CmdLoop:
        ;ожидание нажатия клавиши
        mov     ah,     00h
        int     16h
        ;если нажата ESC - выйти
        cmp     al,     kbESC
        je      @@Break
        ;если нажат пробел - вывести звёздочку по случайным координатам
        cmp     al,     kbSpace
        je      @@YetStar
        ;если нажат ENTER - восстановить экран
        cmp     al,     kbENTER
        je      @@RestoreScreen
        jmp     @@CmdLoop
 
@@YetStar:
        mov     ax,     25
        push    ax
        call    Random
        mov     [X],    ax
        mov     ax,     80
        push    ax
        call    Random
        mov     [Y],    ax
 
        mov     ax,     [X]
        mov     bl,     80
        mul     bl
        add     ax,     [Y]
        shl     ax,     1
        mov     di,     ax
 
        push    es
        mov     ax,     0B800h
        mov     es,     ax
 
        mov     es:[di],word ptr ('*'+256*5)    ;звёздочка фиолетового цвета
        pop     es
        jmp     @@CmdLoop
 
@@RestoreScreen:
        push    es
        mov     ax,     0B800h
        mov     es,     ax
        mov     di,     0
        lea     si,     ScreenBuffer
        mov     cx,     25*80
        rep     movsw
        pop     es
        jmp     @@CmdLoop
 
@@Break:
;**********************************************
        ;эпилог
        mov ax,4C00h
        int 21h         ; Выходим из программы
main    endp
 
END     main
Добавлено через 36 секунд
Цитата Сообщение от 4lexx Посмотреть сообщение
Это очистка экрана
Поздно - теперь это восстановление экрана.

Добавлено через 4 часа 49 минут
Что-то я поторопился и в исходнике остался "мусор".

Изменил исходник.
1
30.12.2017, 21:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2017, 21:50
Помогаю со студенческими работами здесь

Генератор случайных чисел на основе ряда натуральных чисел
Подскажите плиз, можно ли из ряда натуральных чисел образовать псевдослучайные числа по следующему...

Генератор случайных чисел
В общем, нужно составить программу, которая реализует алгоритм генерации случайных чисел....

Генератор случайных чисел
Что значит rn339 в данном блоке? И что означают значения после rn? Verbl function rn339,d2 ...

Генератор случайных чисел
Уверен, что на форуме эта тема давно обсуждалась (найти не смог, поэтому спрашиваю снова). Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru