Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
easyGamex
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 6
1

Генератор Псевдо Случайных Чисел на языке СИ

28.03.2018, 03:15. Просмотров 992. Ответов 4
Метки нет (Все метки)

Тема - Генерация псевдослучайных чисел в задаваемом диапазоне

Решил написать программу для ГПСЧ в задаваемом диапазоне на Си, но на начале программы всё закончилось.
Можете пожалуйста подсказать, предложить свои идеи как сделать легче программу, и т.п.
В AVR программировании совсем недавно, можно даже сказать что не опытный новичёк. Но очень хочется разобраться, до этого делал совсем простенькие задачи, но тут приспичило полезть ещё дальше.

Проблем со схемой не возникло, всё даже идеально получилось

Решил использовать
LCD 1602A, ATmega8

Заранее спасибо за помощь

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <io.h>
#include <lcd.h>
 
#asm
    .equ __lcd_port=0x18 ;PORTD
#endasm
 
int i=0, j=0;
char portState[4]={0xEF,0xDF,0xBF,0x7F};
char inputState[3]={0x01,0x02,0x04};
char mass2[3][4]={  {'1','2','3','N'},
                    {'4','5','6','0'},
                    {'7','8','9','R'}};
                    
                    
void main(void)
{
    
        }
p.s. кнопка N должна отвечать за следующее число, а точнее вводит 1 число, жмём N и переходит к 2 числу. Кнопка R уже предназначена для вывода числа, а точнее после того как мы введём 2 число, жмём кнопку R и уже происходит генерация рандомного числа и выдаёт его на дисплей.

Добавлено через 4 минуты
p.s. тему чуть чуть не дописал
Генерация псевдослучайных чисел в задаваемом диапазоне. (a и b)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2018, 03:15
Ответы с готовыми решениями:

Assembler Atmega16 Генератор случайных чисел
Мне нужно получить число с помощью таймера T0 CTC OCR0:=255, присвоить его переменной. На чертеже...

Генератор псевдо случайных чисел повторяет значения
Генерирую доступ случайным образом в массив chars; К примеру 1000 раз, проведя операцию 2...

Генератор псевдо случайных чисел с обратимым алгоритмом
Доброго времени суток! Возможно ли, что бы ГПСЧ не только принимал на входе зерно и генерировал...

Генератор псевдо-случайных чисел, как хэш-функция
Анализируя генератор псевдослучайных чисел Я пришел к выводу, что (Учитывая что RAND_MAX =...

Генератор псевдо случайных чисел Блюм Блюм Шуб
У меня возникла проблема с созданием конструктора при построении генератора. Не могу понять как его...

4
Ethereal
5496 / 1948 / 255
Регистрация: 17.02.2013
Сообщений: 2,895
28.03.2018, 04:58 2
Выбирай из трех типов алгоритмов : линейный конгруэнтный метод, на регистрах сдвига, вихрь Марсенна.
https://ru.wikipedia.org/wiki/%D0%9B...82%D0%BE%D0%B4
http://microsin.net/programming/avr/...generator.html
https://ru.wikipedia.org/wiki/%D0%92...BD%D0%BD%D0%B0
1
ValeryS
Модератор
7483 / 5666 / 725
Регистрация: 14.02.2011
Сообщений: 19,374
Завершенные тесты: 1
28.03.2018, 05:05 3
Цитата Сообщение от easyGamex Посмотреть сообщение
свои идеи как сделать легче программу
можно сделать генератор не псевдо а случайной последовательности
включаешь АЦП, к ножке ничего не подведено, или пустой длинный проводник, антенна, и считываешь младшие разряды
шумы это и будет случайная последовательность.
1
Ethereal
5496 / 1948 / 255
Регистрация: 17.02.2013
Сообщений: 2,895
28.03.2018, 05:31 4
Лучший ответ Сообщение было отмечено easyGamex как решение

Решение

Затупил. Вихрь Мерсенна, как новое веяние, был мне в практическом применении не знаком. Кажется он требует больших ресурсов памяти. Так-что исключается.

Добавлено через 14 минут
Если твоим устройством будет управлять человек, то истинно случайными будут моменты нажатия им кнопок. Пусть какой-нибудь из таймеров крутится максимально быстро. Пусть в момент нажатия кнопки значение таймера запоминается в переменной. Тогда этим получается случайное число. Главное, чтобы по сравнению с частотой нажатия кнопок человеком таймер крутился ну просто бешено быстро. Тогда какое число поймается в момент нажатия кнопки полностью непредсказуемо.
1
easyGamex
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 6
28.03.2018, 07:50  [ТС] 5
Цитата Сообщение от Ethereal Посмотреть сообщение
Если твоим устройством будет управлять человек, то истинно случайными будут моменты нажатия им кнопок. Пусть какой-нибудь из таймеров крутится максимально быстро. Пусть в момент нажатия кнопки значение таймера запоминается в переменной. Тогда этим получается случайное число. Главное, чтобы по сравнению с частотой нажатия кнопок человеком таймер крутился ну просто бешено быстро. Тогда какое число поймается в момент нажатия кнопки полностью непредсказуемо.
Я вот ещё не пойму, вот программу похожую делал в техне, так вот получается я ввожу число и данное число выводится на LCD дисплей в lcd_gotoxy(0,0); lcd_putchar(mass2[i][j]);а можно после этого сохранить данное число в тип данных к примеру "int a".? И как это вообще можно сделать?


C
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
#include <mega8.h>
#include <delay.h>
#include <io.h>
#include <lcd.h>
 
#asm
    .equ __lcd_port=0x18 ; PORTD
#endasm
 
int i=0, j=0;
char portState[4]={0xEF,0xDF,0xBF,0x7F};
char inputState[4]={0x01,0x02,0x04,0x08};
char mass2[4][4]={{'1', '4', '7', '*'},
                  {'2', '5', '8', '0'},
                  {'3', '6', '9', '#'},
                  {'D', 'E', 'F', 'D'},} ;
void main(void)
{
PORTD=0xFF;
DDRD=0xF0;
lcd_init(16);
 
while(1)
{
for (i=0;i<4;i++)
     {
       PORTD=portState[i];
       for (j=0;j<4;j++)
           {
              if (((PIND&inputState[j])==0))
                 {
                   while ((PIND&inputState[j])!=inputState[j]){};
                   lcd_clear();
           lcd_gotoxy(0,0);
                   lcd_putchar(mass2[i][j]);
                 }
           }
     }
 }
 
}
Добавлено через 3 минуты
получается
lcd_gotoxy(0,0);
lcd_putchar(mass2[i][j]);
сохраняем это всё в тип данных int a;
и переходим ко второму числу на следующей строке
lcd_gotoxy(0,1);
lcd_putchar(mass2[i][j]);
и теперь сохраняем в int b;

только вот как сохранять их в int a,b; вот это не понятно

Добавлено через 1 час 51 минуту
ой, чёт стормозил. всё, уже все понял. xD
0
28.03.2018, 07:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2018, 07:50

Псевдо генератор случаных чисел
Доброго времени суток! Вот есть такая прорамка #include &lt;math.h&gt; #include &lt;stdio.h&gt; #include...

Генерация (псевдо)случайных чисел
Задача такова: имеется произвольное количество (N) поддиапазонов чисел произвольного размера (S),...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru