Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Генерация случайных чисел
helgaДата: Воскресенье, 02 Марта 2008, 01:09 | Сообщение # 1
Новый участник
Группа: Пользователи
Сообщений: 3
Репутация: 0
Награды: 0
Статус: Offline
До сего времени пользовалась MMB довольно успешно, создавая небольшие некоммерческие проекты. Или большие даже - энциклопедии о творческих детях, например. Скрипты и там были, но как-то хорошо писались и даже работали) А тут срочно понадобилось сделать небольшую программу для розыгрыша призов народу и никак. Дело в том, что диапазон чисел, из которых будет выбрано одно-единственное значение с разрывами. Например из диапазона от 1 до 100 надо будет исключить номера с 3 по 5, с 15 по 20 и т.д. Несколько таких дырок получается... Такая проблема. Буду благодарна мастерам за помощь. Сижу, конечно, разбираюсь, но чувствую, что не успею уже.
 
toizyДата: Воскресенье, 02 Марта 2008, 14:18 | Сообщение # 2
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
If...Then?

Жизнь оказалась не такой уж и забавной, как поначалу...
 
basmeДата: Воскресенье, 02 Марта 2008, 18:15 | Сообщение # 3
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Quote (toizy)
If...Then?

???? Лаконичность, конечно, хорошая вещь, но...

В общем, helga, если не поняли объяснение toizy, то объясняю подробнее: генерируете случайное число, далее проверяете, не находится ли в диапазоне, который запрещён, с помощью всё того же If...Then, и если это так, то генерация производится повторно, опять проверка, и т. д.
Первое конкретное решение, приходящее мне в голову - бесконечный скрипт, прекращающийся, если число не лежит в запрещённом диапазоне. Пример:

Code

no=0
For i=0 To Infinity
   a=RND(100)
   If (a>3 & a<5) Then
     no=1
   End
   If (a>50 & a<60) Then
     no=1
   End
   If (no=0) Then
     Break()
   End
Next i

По окончании выполнения скрипта переменная a будет содержать случайное число, причём оно не будет лежать в диапазоне от 3 до 5 и от 50 до 60.
 
helgaДата: Воскресенье, 02 Марта 2008, 18:43 | Сообщение # 4
Новый участник
Группа: Пользователи
Сообщений: 3
Репутация: 0
Награды: 0
Статус: Offline
toizy, basme, спасибо за то, что откликнулись! Пойду пробовать дальше, благо вся ночь впереди еще) Просто я не программист и со скриптами могу разобраться только по аналогии. До сего времени получалось) Но у нас ведь как всегда необходимость в чем-то возникает в последний момент и это не есть хорошо. Благодарю еще раз! biggrin
 
toizyДата: Вторник, 04 Марта 2008, 14:40 | Сообщение # 5
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Вот именно это решение с бесконечным скриптом уже где-то тут предлагали... В той ветке я давал другое решение. Найти не могу, но где-то есть, поищите.

Смысл моего предложения в том, чтобы заполнить массив числами в нужном диапазоне подряд, а затем перемешать массив случайным образом. В данном случае нужно только на этапе заполнения массива делать проверку - если число лежит в определённом диапазоне, то исключаем его (не добавляем в массив). Такой способ быстрее в разы.

В общем, наводку я дал. Дело за реализацией


Жизнь оказалась не такой уж и забавной, как поначалу...
 
  • Страница 1 из 1
  • 1
Поиск: