Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Random
dimmer Дата: Пн, 23.12.2013, 12:26  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 29
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

Добрый день!
Подскажите пожалуйста, необходимо выполнять определенное действие, после рандомного временного промежутка. Причем использовать pause не могу.
Это не сам код, это пример.
......
......
oper var word
....
.....
random oper
...
operas:
oper = oper - 5000
if oper <= 0 then
gosub deystv
endif
If oper <= 0 then
random oper
endif
....
...
goto operas
...
End

При этом постоянно выдается значение 3.
Подскажите что не так?
Или как можно по другому реализовать?
Спасибо

Сообщение отредактировал dimmer - Пн, 23.12.2013, 13:00
ЯНДЕКС Дата: 23.12.2013
xvovanx Дата: Вт, 24.12.2013, 01:30  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

думаю что ваша проблема в том, что вы от случайного числа отнимаете 5000 и переменная (при <5000) уходит в минус, а также в обоих условиях проверки фигурирует oper <= 0 как то у вас напутанно . Сделайте так

random oper
if oper <=5000 then действие1
else '  (oper >5000)
действие2
endif

Сообщение отредактировал xvovanx - Вт, 24.12.2013, 01:39
dimmer Дата: Вт, 24.12.2013, 15:04  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 29
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

Спасибо за уделенное время - это сразу!)))

Подсчет - это уже дело второе, само random выдает одно и тоже число.
К тому же, при вашем варианте. Вероятность наступления действия 1 при 5000 мала, при допустим 33000 примерно 50/50 - то есть каждый проход программы у меня будет с вероятностью 50% выполнено действие. Промежуток между циклами около 3000 мс. Если предположить, что в среднем из 20 проходов около 10 будут выполнены - это мне по условию не подходит. Мне же нужен рандомный интервал от 3-45 сек. Как мне кажется, вычитанием и получу примерно желаемое. (Подчеркиваю , как мне кажется - возможно не прав)

Хотя при правильном подборе числа сравнения - наверно Ваш метод сработает. Попробую. Но вот random мне 3 выдает всегда((((

Добавлено (24.12.2013, 15:04)
---------------------------------------------
С выдачей одного и того же числа вопрос решен. Выдается как и полагается. 
Воспользовался вашим вариантом. Работает, но частенько бывает что в 2 проходах выполняется действие в обоих. Как можно реализовать избавиться от этого?
заранее спасибо!

dimmer Дата: Вт, 24.12.2013, 15:22  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 29
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

Вот что получается

Добавлено (24.12.2013, 15:22)
---------------------------------------------
Промежутки между кругами даже не 3 сек а 1. Обычно 3-5 раз в подряд действие выполняется. На фото промежутки между действием

Прикрепления: 1746546.jpg (43.3 Kb) · 4563797.jpg (30.0 Kb)
xvovanx Дата: Вт, 24.12.2013, 15:41  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Не понятно, что ваша программа делает (круги, секунды  cool ), но условия if then (вилки значений) можно понатыкать хоть 100 штук. Вот мой пример из программы с анализом температуры и включением вентилятора

If T<34 Then  
  Low FAN_MIN
  Low FAN_MAX
EndIf

If T>35 And T<39 Then
  High FAN_MIN  
  Low FAN_MAX
EndIf

If T>40 And T<=55 Then
  High FAN_MIN
  High FAN_MAX
EndIf

If T>55 And T<=57 Then
  High FAN_MIN  
  High FAN_MAX
  U_PWM=U_PWM-10
  If U_PWM<10 Then
U_PWM=10
EndIf
      
If T>57 Then
  High FAN_MAX
  U_PWM=0  
  Low U_REG  
EndIf
Return
dimmer Дата: Вт, 24.12.2013, 16:04  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 29
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

Программа передает данные через ИК (действие 1)
По этом основное тело работает на прием ик данных.

И вот это действие 1 мне нужно чтобы повторилось не чаше чем через 5 сек мин и 45 сек макс
В этом промежутке рандомно, без повторений
xvovanx Дата: Вт, 24.12.2013, 18:08  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

А зачем случайный( рандомный) промежуток времени использовать? Может лучше задавать определенные ( нужные) промежутки времени через таймер
dimmer Дата: Ср, 25.12.2013, 00:07  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 29
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

По условию мне нужен именно рандом.
К тому же все таймеры уже задействованы
  • Страница 1 из 1
  • 1
Поиск: