roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 02:43

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Простой автомат
СообщениеДобавлено: 09 фев 2005, 03:54 
Не в сети

Зарегистрирован: 26 окт 2004, 14:16
Сообщения: 171
Откуда: Севастополь сити...
Как сделать блуждание?
Натолкните на мысль. Чтобы был выбор вправо или влево на ассемблере.
А то в си просто используя random а вот в асме не могу придумать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 08:30 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
На робоклубе был проект, на основе случайных чисел, вот ссылка:
http://projects.roboclub.ru/index.shtml?attempt
Смотреть раздел "таблица вероятностей переходов".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 08:31 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
А случайные числа всегда, если особо не париться, подменяли формулой:

Rand = (Counter*K + N) mod P


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 11:55 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
как раз на робоклубе рандом в си реализован,
а вот как это сделать в асм я так и не придумал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 15:39 
Не в сети

Зарегистрирован: 13 ноя 2004, 01:10
Сообщения: 267
Откуда: Ривне, Украина
setar писал(а):
как раз на робоклубе рандом в си реализован,
а вот как это сделать в асм я так и не придумал.
Один из таймеров-счётчиков задействовать, настроить на какую-нить частоту, асинхронно считывать значение, это значение использовать как адрес для выборки байта из памяти програм, и пообъеденять полученые 3 байта напр. через XOR или просумировав без учёта переноса меж собой, и предыдущим значением - получим псевдослучайное число размером в байт. Такое делал довольно давно ещё на Спектруме - довольно неплохо работало, и последовательность повторялась довольно нескоро. Можно наварганить и посложнее алгоритм - повторяться будет ещё реже.
Можно и без таймера-счётчика обойтись, но тогда начало последовательности будет заранее извесно: задаёться какой-то регистр как указатель на последовательность, из ячейки, на которую он указывает в памяти програм считываеться число, указатель инкрементируем и прибавляем это число - это новый указатель, побайтная сумма указателя с этим числом и будет значением (можно ещё и с XOR побаловаться).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 15:57 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Блин, чуть ошибся. Короче так:

Униформным генератором случайных чисел называется формула:

RND[n+1]=(RND[n]*A+B) mod C.

Если вы не пишете систему криптографической защиты - вам врядли нужно что-то большее. А если все-таки пишете - покупайте аппаратный генератор случайных чисел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 20:27 
Не в сети

Зарегистрирован: 26 окт 2004, 14:16
Сообщения: 171
Откуда: Севастополь сити...
2 Outcaster

Вот завернул. Я же просил простой(т.к. выборки из памяти не сделаю-не умею)

2 Dead

RND[n]-это переменная или константа?
числа А и В надо изменять?
Результат надо писать в RND[n+1]

Извините за тупые вопросы :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 20:43 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
aliens писал(а):
RND[n]-это переменная или константа?
числа А и В надо изменять?
Результат надо писать в RND[n+1]

Извините за тупые вопросы :)


A, B и P - предопределенные константы

RND[n] - предыдущее значение,
RND[n-1] - следующее значение псевдослучайной последовательности.

Т.е. пусть у вас есть глобальная переменная "lastRND", тогда функция получения следующего псевдослучайного числа, при A=56, B=683 и P=32459, будет такая:

void nextRND(){
 lastRND=(lastRND*56+683) % 32459;
 return lastRND;
};


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 20:53 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
=DeaD=
вопрос то про ASM был, а та по привычке на си пример приводишь ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 21:08 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
setar писал(а):
=DeaD=
вопрос то про ASM был, а та по привычке на си пример приводишь ...

Ну не знаю я АСМ на АВР :) чем богаты тем и делимся :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 23:12 
Не в сети

Зарегистрирован: 09 дек 2004, 23:49
Сообщения: 101
Откуда: Санкт-Петербург
=DeaD= писал(а):
покупайте аппаратный генератор случайных чисел.
Самое простое решение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 фев 2005, 12:55 
Не в сети

Зарегистрирован: 26 окт 2004, 14:16
Сообщения: 171
Откуда: Севастополь сити...
Спасибо Dead
Седня попробую на асме

А что, кроме rand и таблице вероятностей идей нет?

Кстати а как сделать именно таблицу? как в проекте робоклуба?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 фев 2005, 13:13 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
на асме таблица задаётся стандартным образом так :
Код:
table1:
  .db 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0xFF

А обращение к элементам идёт по смещению отросительно адреса начала таблицы.

В робоклубе в таблицу забит граф переходов автомата, это самый рациональный путь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 фев 2005, 14:25 
Не в сети

Зарегистрирован: 26 окт 2004, 14:16
Сообщения: 171
Откуда: Севастополь сити...
Вот попробовал реализовать формулу и сразу же
попал в тупик, в ассемблере нету деления :(
Что делать дальше не представляю.

По смещению это типа 1<<4 или как?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 фев 2005, 14:35 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
А вы примите за P степень двойки равную пределу переменной, и тогда у вас переполнение будет вместо "% P" само работать - никаких лишних действий :)

Просто надо тогда будет чтобы A и B не делились на 2 :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO