Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
  • Страница 1 из 1
  • 1
Модератор форума: Peter, DEMBEL, YURIY  
Генерация массива совершенно случайных чисел
LectorДата: Сб, 04 Июля 2009, 14:50 | Сообщение # 1
Ветеран форума
Нужна помощь! Голову "сломал" решая эту задачку...

Необходимо сгенерировать массив случайных чисел, чтобы ни одно число в этом массиве не повторялось.
Сгенерировать массив чисел не сложно, например:

Code
Loop "1" "[количество генерируемых чисел]" "[текущее число]"
:Randomaze
Random "[общее число генерируемых чисел]" "[сгенерированное число]"
If "[сгенерированное число]" ">" "0"
SetVar "[Num[текущее число]]" "[сгенерированное число]"
Else
GotoLine "Randomaze"
EndIf
EndLoop

Таким образом мы сгенерируем массив "Num". Однако, одно дело, если мы генерируем 5 случайных чисел из 100, а другое - 5 из 15. Одно или два числа точно будут повторяться. Хотя и в первом случае (5 из 100) повторение чисел не избежать.

Один из возможных выходов я вижу в создании сценария, позволяющего находить повторяющиеся числа и заменять их на вновь сгенерированные. Например:

Code
Loop "1" "[количество генерируемых чисел]" "[текущее число]"
SetVar "[число следующее после текущего]" "[текущее число]+1"
Loop "1" "[текущее число]" "[новое текущее число]"
If "[Num[число следующее после текущего]]" "=" "[Num[новое текущее число]]"
Random "[общее количество генерируемых чисел]" "[сгенерированное число]"
SetVar "[Num[число следующее после текущего]]" "[сгенерированное число]"
EndIf
EndLoop
EndLoop

Этот пример задачу не решает, но направление думаю верное... кто, что посоветует?
 
СообщениеНужна помощь! Голову "сломал" решая эту задачку...

Необходимо сгенерировать массив случайных чисел, чтобы ни одно число в этом массиве не повторялось.
Сгенерировать массив чисел не сложно, например:

Code
Loop "1" "[количество генерируемых чисел]" "[текущее число]"
:Randomaze
Random "[общее число генерируемых чисел]" "[сгенерированное число]"
If "[сгенерированное число]" ">" "0"
SetVar "[Num[текущее число]]" "[сгенерированное число]"
Else
GotoLine "Randomaze"
EndIf
EndLoop

Таким образом мы сгенерируем массив "Num". Однако, одно дело, если мы генерируем 5 случайных чисел из 100, а другое - 5 из 15. Одно или два числа точно будут повторяться. Хотя и в первом случае (5 из 100) повторение чисел не избежать.

Один из возможных выходов я вижу в создании сценария, позволяющего находить повторяющиеся числа и заменять их на вновь сгенерированные. Например:

Code
Loop "1" "[количество генерируемых чисел]" "[текущее число]"
SetVar "[число следующее после текущего]" "[текущее число]+1"
Loop "1" "[текущее число]" "[новое текущее число]"
If "[Num[число следующее после текущего]]" "=" "[Num[новое текущее число]]"
Random "[общее количество генерируемых чисел]" "[сгенерированное число]"
SetVar "[Num[число следующее после текущего]]" "[сгенерированное число]"
EndIf
EndLoop
EndLoop

Этот пример задачу не решает, но направление думаю верное... кто, что посоветует?

Автор - Lector
Дата добавления - 04 Июля 2009 в 14:50
Alex3AДата: Сб, 04 Июля 2009, 16:08 | Сообщение # 2
Друг клуба ММВ
Обычно, период повторяемости чисел, в генераторах случайных чисел,
довольно большой, он зависит от конкретного алгоритма, от 130000 до
2 в хрен знает какой степени. Для прикладных целей этого вполне
предостаточно. Может у тебя не верный подход к генерации чисел.
Random "[возмжно тут у тебя неправильное число]" "[сгенерированное число]"
 
СообщениеОбычно, период повторяемости чисел, в генераторах случайных чисел,
довольно большой, он зависит от конкретного алгоритма, от 130000 до
2 в хрен знает какой степени. Для прикладных целей этого вполне
предостаточно. Может у тебя не верный подход к генерации чисел.
Random "[возмжно тут у тебя неправильное число]" "[сгенерированное число]"

Автор - Alex3A
Дата добавления - 04 Июля 2009 в 16:08
PeterДата: Сб, 04 Июля 2009, 16:22 | Сообщение # 3
Админ NeoBook
Quote (Lector)
направление думаю верное...

Вегной догогой идете, товагищ! :)
На самом деле, достаточно просто - см.прикрепление (как вариант).
Прикрепления: Random.rar (2.0 Kb)


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Quote (Lector)
направление думаю верное...

Вегной догогой идете, товагищ! :)
На самом деле, достаточно просто - см.прикрепление (как вариант).

Автор - Peter
Дата добавления - 04 Июля 2009 в 16:22
LectorДата: Вс, 05 Июля 2009, 07:52 | Сообщение # 4
Ветеран форума
Спасибо! Наверное никогда бы не додумался использовать для этого ListBox... Гениальное решение! thumbs_up Теперь создать массив из случайных чисел не составит труда.
 
СообщениеСпасибо! Наверное никогда бы не додумался использовать для этого ListBox... Гениальное решение! thumbs_up Теперь создать массив из случайных чисел не составит труда.

Автор - Lector
Дата добавления - 05 Июля 2009 в 07:52
skanДата: Вс, 23 Августа 2009, 20:30 | Сообщение # 5
Любопытный
Интересно! Надо запомнить! СпасибА!

Школа NeoBook - второе дыхание! Мы открылись, спустя три года, с новыми силами, с новыми знаниями, с новым сайтом!
 
СообщениеИнтересно! Надо запомнить! СпасибА!

Автор - skan
Дата добавления - 23 Августа 2009 в 20:30
DEMBELДата: Сб, 02 Апреля 2011, 06:38 | Сообщение # 6
Наш дизайнер
Реализация на основе перемешивания индексов массива чисел заданного диапазона. Требование уникальности чисел при этом соблюдается само собой и не требует специальной обработки в алгоритме.

Call "RndRange" "[LB]" "[UB]" "[Cnt]"

[LB] - нижний предел диапазона чисел
[UB] - верхний предел диапазона чисел
[Cnt] - количество символов, которое нужно получить (обьем конечного массива).

На выходе получаем массив [RndRange[i]] содержащий перемешанные числа из диапазона.

Пример: Call "rndrange" "1" "20" "20"

Числа нижнего и верхнего предела включаются в диапазон, результирующее количество символов не может быть больше чем ширина диапазона (для соблюдения уникальности чисел).

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

Добавлено (02 Апрель 2011, 06:38)
---------------------------------------------
Кстати подобные алгоритмы генерации случайных чисел, перемешивания можно много где применить. Например часто используется в разных логических играх.

Прикрепления: RndRange.zip (3.2 Kb)


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
СообщениеРеализация на основе перемешивания индексов массива чисел заданного диапазона. Требование уникальности чисел при этом соблюдается само собой и не требует специальной обработки в алгоритме.

Call "RndRange" "[LB]" "[UB]" "[Cnt]"

[LB] - нижний предел диапазона чисел
[UB] - верхний предел диапазона чисел
[Cnt] - количество символов, которое нужно получить (обьем конечного массива).

На выходе получаем массив [RndRange[i]] содержащий перемешанные числа из диапазона.

Пример: Call "rndrange" "1" "20" "20"

Числа нижнего и верхнего предела включаются в диапазон, результирующее количество символов не может быть больше чем ширина диапазона (для соблюдения уникальности чисел).

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

Добавлено (02 Апрель 2011, 06:38)
---------------------------------------------
Кстати подобные алгоритмы генерации случайных чисел, перемешивания можно много где применить. Например часто используется в разных логических играх.


Автор - DEMBEL
Дата добавления - 02 Апреля 2011 в 06:38
PeterДата: Вс, 03 Апреля 2011, 02:24 | Сообщение # 7
Админ NeoBook
Quote (DEMBEL)
Вообще, наверное можно и на нб реализовать, но мне не удалось понять как реализовать в нб одну команду в трюке с массивом...

Может быть и можно, но зачем заморачиваться с массивом, когда есть ListBox, и есть готовое и простое решение?
:D
Что касаемо "скорости", то конечно необушный ListBox медленная штука, но на малых массивах это - мелочь.


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Quote (DEMBEL)
Вообще, наверное можно и на нб реализовать, но мне не удалось понять как реализовать в нб одну команду в трюке с массивом...

Может быть и можно, но зачем заморачиваться с массивом, когда есть ListBox, и есть готовое и простое решение?
:D
Что касаемо "скорости", то конечно необушный ListBox медленная штука, но на малых массивах это - мелочь.

Автор - Peter
Дата добавления - 03 Апреля 2011 в 02:24
KnyazRadimirДата: Пн, 01 Декабря 2014, 16:18 | Сообщение # 8
Новичок
Может быть как-то так?
Код

dim question_array(29)
dim i1, i2, x, kolvopr
kolvopr = 30
i1 = 1
Randomize
question_array(0) = Int(1 + (Rnd() * kolvopr))
do while i1<30
x = Int(1 + (Rnd() * kolvopr))
i2 = 0
do while i2<i1
if x = question_array(i2) then
x = Int(1 + (Rnd() * kolvopr))
i2=0
else i2 = i2+1
end if
Loop
question_array(i1) = x
i1 = i1+1
Loop

вывод массива

for each index in question_array
list = list & index & vbCrLf
next
MsgBox list


Сообщение отредактировано
DEMBEL - Пн, 01 Декабря 2014, 18:08
 
СообщениеМожет быть как-то так?
Код

dim question_array(29)
dim i1, i2, x, kolvopr
kolvopr = 30
i1 = 1
Randomize
question_array(0) = Int(1 + (Rnd() * kolvopr))
do while i1<30
x = Int(1 + (Rnd() * kolvopr))
i2 = 0
do while i2<i1
if x = question_array(i2) then
x = Int(1 + (Rnd() * kolvopr))
i2=0
else i2 = i2+1
end if
Loop
question_array(i1) = x
i1 = i1+1
Loop

вывод массива

for each index in question_array
list = list & index & vbCrLf
next
MsgBox list

Автор - KnyazRadimir
Дата добавления - 01 Декабря 2014 в 16:18
YURIYДата: Пн, 01 Декабря 2014, 17:14 | Сообщение # 9
WebMaster
KnyazRadimir, а причём тут basic-то?
 
СообщениеKnyazRadimir, а причём тут basic-то?

Автор - YURIY
Дата добавления - 01 Декабря 2014 в 17:14
DEMBELДата: Пн, 01 Декабря 2014, 18:04 | Сообщение # 10
Наш дизайнер
при функции наверное

Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
Сообщениепри функции наверное

Автор - DEMBEL
Дата добавления - 01 Декабря 2014 в 18:04
wikslДата: Пн, 01 Декабря 2014, 18:33 | Сообщение # 11
Участник
Цитата DEMBEL ()
На выходе получаем массив [RndRange[i]] содержащий перемешанные числа из диапазона.

Такой вопрос, на одном компе не работает данная функция, что исправлять пишет класс не определен.
Может необушную функцию кто сделает, очень надо.


Вик

Сообщение отредактировано
wiksl - Пн, 01 Декабря 2014, 18:34
 
Сообщение
Цитата DEMBEL ()
На выходе получаем массив [RndRange[i]] содержащий перемешанные числа из диапазона.

Такой вопрос, на одном компе не работает данная функция, что исправлять пишет класс не определен.
Может необушную функцию кто сделает, очень надо.

Автор - wiksl
Дата добавления - 01 Декабря 2014 в 18:33
mishemДата: Пн, 01 Декабря 2014, 18:39 | Сообщение # 12
Эксперт форума
Цитата wiksl ()
Такой вопрос, на одном компе не работает данная функция

По этому я категорически против всяких скриптов и никогда не использую их. :(

Я ждал, что когда нибудь кто то об этом скажет. :)


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата wiksl ()
Такой вопрос, на одном компе не работает данная функция

По этому я категорически против всяких скриптов и никогда не использую их. :(

Я ждал, что когда нибудь кто то об этом скажет. :)

Автор - mishem
Дата добавления - 01 Декабря 2014 в 18:39
wikslДата: Пн, 01 Декабря 2014, 18:52 | Сообщение # 13
Участник
Я вот тут делал функцию, может кто посоветует, что надо изменить, чтоб с её помощью можно было б получать тот же результат, что и у функции Дембеля? Очень надо!!

SetVar "[stroka_srawnenia]" ""
SetVar "[stroka_nakoplenia]" " "
SetVar "[count_chisel]" "1"

SetVar "[%3]" "[%2]-[%1]+1-[%4]"
SetVar "[kon_int1]" "[%2]-[%1]"
Loop "[%1]" "[%2]" "[i]"
SetVar "[stroka_srawnenia]" "[stroka_srawnenia] [i] "
endLoop

:powtor_poiska
Random "[kon_int1]" "[sly]"
SetVar "[sly]" "[sly]+[%1]"
SearchStr " [sly] " "[stroka_nakoplenia]" "[SpacePos]"
ifex "[SpacePos]=0"
ifex "[count_chisel]<=[%3]"
SetVar "[stroka_nakoplenia]" "[stroka_nakoplenia][sly] "
SetVar "[count_chisel]" "[count_chisel]+1"
StrReplace "[stroka_srawnenia]" " [sly] " "" "[stroka_srawnenia]"
endif
endif
ifex "[count_chisel]<=[%3]"
gotoline "powtor_poiska"
endif

StrReplace "[stroka_srawnenia]" " " " " "[stroka_srawnenia]"
StrDel "[stroka_srawnenia]" "1" "1" "[stroka_srawnenia]"
StrDel "[stroka_nakoplenia]" "1" "1" "[stroka_nakoplenia]"
SetVar "[stroka_nakoplenia]" "[stroka_nakoplenia][stroka_srawnenia]"
StrParse "[stroka_nakoplenia]" " " "[aa]" "[Count]"
Прикрепления: sly.rar (0.4 Kb)


Вик

Сообщение отредактировано
wiksl - Пн, 01 Декабря 2014, 19:30
 
СообщениеЯ вот тут делал функцию, может кто посоветует, что надо изменить, чтоб с её помощью можно было б получать тот же результат, что и у функции Дембеля? Очень надо!!

SetVar "[stroka_srawnenia]" ""
SetVar "[stroka_nakoplenia]" " "
SetVar "[count_chisel]" "1"

SetVar "[%3]" "[%2]-[%1]+1-[%4]"
SetVar "[kon_int1]" "[%2]-[%1]"
Loop "[%1]" "[%2]" "[i]"
SetVar "[stroka_srawnenia]" "[stroka_srawnenia] [i] "
endLoop

:powtor_poiska
Random "[kon_int1]" "[sly]"
SetVar "[sly]" "[sly]+[%1]"
SearchStr " [sly] " "[stroka_nakoplenia]" "[SpacePos]"
ifex "[SpacePos]=0"
ifex "[count_chisel]<=[%3]"
SetVar "[stroka_nakoplenia]" "[stroka_nakoplenia][sly] "
SetVar "[count_chisel]" "[count_chisel]+1"
StrReplace "[stroka_srawnenia]" " [sly] " "" "[stroka_srawnenia]"
endif
endif
ifex "[count_chisel]<=[%3]"
gotoline "powtor_poiska"
endif

StrReplace "[stroka_srawnenia]" " " " " "[stroka_srawnenia]"
StrDel "[stroka_srawnenia]" "1" "1" "[stroka_srawnenia]"
StrDel "[stroka_nakoplenia]" "1" "1" "[stroka_nakoplenia]"
SetVar "[stroka_nakoplenia]" "[stroka_nakoplenia][stroka_srawnenia]"
StrParse "[stroka_nakoplenia]" " " "[aa]" "[Count]"

Автор - wiksl
Дата добавления - 01 Декабря 2014 в 18:52
YURIYДата: Пн, 01 Декабря 2014, 19:39 | Сообщение # 14
WebMaster
Цитата DEMBEL ()
при функции наверное


Не ну я к тому, что обычно вы подготавливаете готовое решение для NB, здесь же не так?
 
Сообщение
Цитата DEMBEL ()
при функции наверное


Не ну я к тому, что обычно вы подготавливаете готовое решение для NB, здесь же не так?

Автор - YURIY
Дата добавления - 01 Декабря 2014 в 19:39
PeterДата: Пн, 01 Декабря 2014, 19:58 | Сообщение # 15
Админ NeoBook
Опять чего-то мудрят, ведь есть же решение через необушный ListBox, хоть и не в виде самостоятельной функции (и несколько громоздко из-за ListBox), но совершенно нормально работает.

Добавлено (01 Декабря 2014, 19:58)
---------------------------------------------
Цитата mishem ()
По этому я категорически против всяких скриптов и никогда не использую их. :(

Если же нужно просто получить случайное число в пределах диапазона (не беспокоясь о повторе), то и на NB это можно сделать элементарно.
Где-то я уж приводил пример подобной функции - просто сдвигаем результат необушной Random на нужную величину от 0.
Причем, диапазон может быть как среди положительных значений, так и отрицательных, и даже смешанных.


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
СообщениеОпять чего-то мудрят, ведь есть же решение через необушный ListBox, хоть и не в виде самостоятельной функции (и несколько громоздко из-за ListBox), но совершенно нормально работает.

Добавлено (01 Декабря 2014, 19:58)
---------------------------------------------
Цитата mishem ()
По этому я категорически против всяких скриптов и никогда не использую их. :(

Если же нужно просто получить случайное число в пределах диапазона (не беспокоясь о повторе), то и на NB это можно сделать элементарно.
Где-то я уж приводил пример подобной функции - просто сдвигаем результат необушной Random на нужную величину от 0.
Причем, диапазон может быть как среди положительных значений, так и отрицательных, и даже смешанных.

Автор - Peter
Дата добавления - 01 Декабря 2014 в 19:58
wikslДата: Пн, 01 Декабря 2014, 20:01 | Сообщение # 16
Участник
Цитата Peter ()
Опять чего-то мудрят, ведь есть же решение через необушный ListBox, хоть и не в виде самостоятельной функции (и несколько громоздко из-за ListBox), но совершенно нормально работает.

просто у меня уже на многих страницах через функцию дембеля сделано и везде переделывать много времени, а так функцию заменил и все
А с литбоксом я не делал потому что не понял как этот метод не копируя каждый раз лист бокс применять на разных страницах
Петер, если покажешь, как буду благодарен, потому что через лист бокс быстрее, чем через мою функцию получаются данные, но мне приходилось каждый раз копировать лист бок и менять формулу.
И мне надо получать числа именно не повторяясь, если б надо было просто случайные числа, то и стандартная функция подходит, главное прибавить или отнять от неё нужное число, чтоб интервал изменить


Вик

Сообщение отредактировано
wiksl - Пн, 01 Декабря 2014, 20:03
 
Сообщение
Цитата Peter ()
Опять чего-то мудрят, ведь есть же решение через необушный ListBox, хоть и не в виде самостоятельной функции (и несколько громоздко из-за ListBox), но совершенно нормально работает.

просто у меня уже на многих страницах через функцию дембеля сделано и везде переделывать много времени, а так функцию заменил и все
А с литбоксом я не делал потому что не понял как этот метод не копируя каждый раз лист бокс применять на разных страницах
Петер, если покажешь, как буду благодарен, потому что через лист бокс быстрее, чем через мою функцию получаются данные, но мне приходилось каждый раз копировать лист бок и менять формулу.
И мне надо получать числа именно не повторяясь, если б надо было просто случайные числа, то и стандартная функция подходит, главное прибавить или отнять от неё нужное число, чтоб интервал изменить

Автор - wiksl
Дата добавления - 01 Декабря 2014 в 20:01
PeterДата: Пн, 01 Декабря 2014, 20:14 | Сообщение # 17
Админ NeoBook
Цитата wiksl ()
как этот метод не копируя каждый раз лист бокс применять на разных страницах

Не надо копировать ListBox, можно все делать через один и тот же объект, т.к. к нему можно обратиться с любой страницы, а полученные результаты, если их несколько и все нужны, хранить в массивах.
ListBox нужен только для поиска повторов.

Добавлено (01 Декабря 2014, 20:14)
---------------------------------------------

Цитата wiksl ()
Петер, если покажешь,

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


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата wiksl ()
как этот метод не копируя каждый раз лист бокс применять на разных страницах

Не надо копировать ListBox, можно все делать через один и тот же объект, т.к. к нему можно обратиться с любой страницы, а полученные результаты, если их несколько и все нужны, хранить в массивах.
ListBox нужен только для поиска повторов.

Добавлено (01 Декабря 2014, 20:14)
---------------------------------------------

Цитата wiksl ()
Петер, если покажешь,

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

Автор - Peter
Дата добавления - 01 Декабря 2014 в 20:14
wikslДата: Пн, 01 Декабря 2014, 20:24 | Сообщение # 18
Участник
Цитата Peter ()
Попробую, но только часика через два, и мне нужно четко понимать что требуется.

надо задавать в переменной начальное, конечное число интервала чисел, и количество чисел и получать в массиве эти числа в случайном порядке, каждый раз в другом
т.е задаю
nac=1 //начало
kon=5 // конец
col=5 //кол-во чисел
получаю
аа1=2
аа2=1
аа3=4
аа4=5
аа5=3
или другой случайный набор чисел.
Так вроде получислось, если без функции, а ведь раньше, когда пробовал не работало,
теперь остался один вопрос: а метод через ЛистБох можно через функцию сделать? и если да, то как?


Вик

Сообщение отредактировано
wiksl - Пн, 01 Декабря 2014, 20:37
 
Сообщение
Цитата Peter ()
Попробую, но только часика через два, и мне нужно четко понимать что требуется.

надо задавать в переменной начальное, конечное число интервала чисел, и количество чисел и получать в массиве эти числа в случайном порядке, каждый раз в другом
т.е задаю
nac=1 //начало
kon=5 // конец
col=5 //кол-во чисел
получаю
аа1=2
аа2=1
аа3=4
аа4=5
аа5=3
или другой случайный набор чисел.
Так вроде получислось, если без функции, а ведь раньше, когда пробовал не работало,
теперь остался один вопрос: а метод через ЛистБох можно через функцию сделать? и если да, то как?

Автор - wiksl
Дата добавления - 01 Декабря 2014 в 20:24
DEMBELДата: Пн, 01 Декабря 2014, 23:12 | Сообщение # 19
Наш дизайнер
Переписать-то можно, но работать будет на порядок медленнее, из-за ручного ресайза массива с перебором элементов в лишнем цикле, и чем больше массив тем медленнее. Тогда уж вынимание из ListBox быстрее будет. Я то делал чтобы быстрее было.
Код
.Нижний предел (вкл)
SetVar "[intA]" "1"
.Верхний предел (вкл)
SetVar "[intB]" "11"
.Кол-во элементов
SetVar "[intC]" "10"

SetVar "[intSrc]" "[intB]-[intA]+1"
DeleteArray "[RndReturn]" "All"

If "[intC]" "<=" "[intSrc]"
.Generate
Loop "1" "[intSrc]" "[int]"
SetVar "[Source[int]]" "[intA]"
SetVar "[intA]" "[intA]+1"
EndLoop

.Randomize
Loop "[intSrc]" "1" "[int]"
Random "9999999" "[rnd]"
Math "Trunc(([rnd]/10000000)*[int])+1" "0" "[tmp]"
SetVar "[Target[int]]" "[Source[tmp]]"
SetVar "[Source[tmp]]" "[Source[int]]"

.Redim
ClearVariables "[Source[int]]"
Loop "1" "[intSrc]" "[tmp]"
SetVar "[c]" "[tmp]+1"
If "[Source[tmp]]" "=" ""
SetVar "[Source[tmp]]" "[Source[c]]"
ClearVariables "[Source[c]]"
EndIf
EndLoop
EndLoop

.Return
Loop "0" "[intC]" "[int]"
SetVar "[RndReturn[int]]" "[Target[int]]"
EndLoop

.Clear
DeleteArray "[Target]" "All"
DeleteArray "[Source]" "All"

EndIf


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62


Сообщение отредактировано
DEMBEL - Пн, 01 Декабря 2014, 23:23
 
СообщениеПереписать-то можно, но работать будет на порядок медленнее, из-за ручного ресайза массива с перебором элементов в лишнем цикле, и чем больше массив тем медленнее. Тогда уж вынимание из ListBox быстрее будет. Я то делал чтобы быстрее было.
Код
.Нижний предел (вкл)
SetVar "[intA]" "1"
.Верхний предел (вкл)
SetVar "[intB]" "11"
.Кол-во элементов
SetVar "[intC]" "10"

SetVar "[intSrc]" "[intB]-[intA]+1"
DeleteArray "[RndReturn]" "All"

If "[intC]" "<=" "[intSrc]"
.Generate
Loop "1" "[intSrc]" "[int]"
SetVar "[Source[int]]" "[intA]"
SetVar "[intA]" "[intA]+1"
EndLoop

.Randomize
Loop "[intSrc]" "1" "[int]"
Random "9999999" "[rnd]"
Math "Trunc(([rnd]/10000000)*[int])+1" "0" "[tmp]"
SetVar "[Target[int]]" "[Source[tmp]]"
SetVar "[Source[tmp]]" "[Source[int]]"

.Redim
ClearVariables "[Source[int]]"
Loop "1" "[intSrc]" "[tmp]"
SetVar "[c]" "[tmp]+1"
If "[Source[tmp]]" "=" ""
SetVar "[Source[tmp]]" "[Source[c]]"
ClearVariables "[Source[c]]"
EndIf
EndLoop
EndLoop

.Return
Loop "0" "[intC]" "[int]"
SetVar "[RndReturn[int]]" "[Target[int]]"
EndLoop

.Clear
DeleteArray "[Target]" "All"
DeleteArray "[Source]" "All"

EndIf

Автор - DEMBEL
Дата добавления - 01 Декабря 2014 в 23:12
PeterДата: Вт, 02 Декабря 2014, 01:18 | Сообщение # 20
Админ NeoBook
Вот как это может выглядеть в виде необушной функции (см.прикрепление)
Объект ListBox "в работе" остался, но перекочевал в функцию, результат можно брать как из ListBox, так и из массива (см.дэмку и отладчик)
В самом начале функции имеются всякие разные IF для проверки входных параметров (сделано прямолинейно и не полностью) - предлагается к самостоятельной доработке по необходимости.
Функция может работать как с положительными значениями, так и с отрицательными.

Впрочем, никто не мешает и функцию доработать, если потребуется (там не все экономично - можно сделать чуть иначе, если результат помещать только в массив).
Прикрепления: RandomEx.rar (2.5 Kb)


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
СообщениеВот как это может выглядеть в виде необушной функции (см.прикрепление)
Объект ListBox "в работе" остался, но перекочевал в функцию, результат можно брать как из ListBox, так и из массива (см.дэмку и отладчик)
В самом начале функции имеются всякие разные IF для проверки входных параметров (сделано прямолинейно и не полностью) - предлагается к самостоятельной доработке по необходимости.
Функция может работать как с положительными значениями, так и с отрицательными.

Впрочем, никто не мешает и функцию доработать, если потребуется (там не все экономично - можно сделать чуть иначе, если результат помещать только в массив).

Автор - Peter
Дата добавления - 02 Декабря 2014 в 01:18
wikslДата: Вт, 02 Декабря 2014, 14:57 | Сообщение # 21
Участник
Спасибо

Вик
 
СообщениеСпасибо

Автор - wiksl
Дата добавления - 02 Декабря 2014 в 14:57
  • Страница 1 из 1
  • 1
Поиск: