![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте!
вот такой вопрос. на форме мемо и кнопка, при нажатие на кнопку, мемо заполнятеся пятью числами, по строчкам, которые не должны быть равны нули и между собой. вот, что я смог : Код:
у меня не получается пройтись по заполненому масиву, сравнив числа в нём между собой и повторную пересчитать. укажите пожайлуста мне на мои ошибки и что я не так понимаю !) п.с. извените, если оформел не по форме. Последний раз редактировалось эмф, 06.03.2009 в 20:26. |
#2
|
|||
|
|||
![]() Я правильно понимаю, что тебе надо заполнить N числами ПОДРЯД, но в СЛУЧАЙНОМ ПОРЯДКЕ?
Тут такая фигня, что обычный метод генерации случайных чисел тут плохой помошник. Он может работать неопределенно долгое время, особенно при генерации последних чисел. Я бы предложил немного другой алгоритм. Есть массив 1..N, который надо заполнить числами 1..N в случайном порядке. в цикле от 1 до N мы генерим не сами числа, а их индексы в массиве. При этом, если ячейка уже занята, то не перегенерируем индекс, а сдвигаем его веред до первой свбодной ячейки с циклическим сдвигом (т.е. если после сгенерированного индекса нет ни одной свободной ячейки, то дальше начинаем искать место с начала массива). Итак: Код:
На самом деле проверка на пустую ячейку не нужна, она добавлена для понятности алгоритма. Еще несколько замечаний: 1. Динамический массив всегда начинается с 0. 2. Random(N) возвращает случайное число от 0 до N-1. 3. При работе с массивами всегда лучше пользоваться функциями Low() и High(), возвращающими нижнюю и верхнюю границы массива. |
#3
|
|||
|
|||
![]() задачу для себя ставил такую, чтобы мемо заполнялась по строчкам n числом чисел, тоесть - пять строчек, 5 чисел,но чтобы небыло 0 и совпадающих чисел, например:
опять же берём пять строчек, но в каждой строчке рандом из 30, и если число в првой строчке будет равно, дапустим, числу из четвёртой строчки, то пересчёт рандома, чтобы числа не были равны между собой. я попробывал ваш алгоритм, но выходит, что числа в строчках повторяются, и нули проскакивают) |
#4
|
|||
|
|||
![]() пробовал алгоритм или код?
по моему коду ни нулей, ни повторяющихся чисел быть не должно. |
#5
|
||||
|
||||
![]() Код:
|
#6
|
|||
|
|||
![]() 2 s0Creator
Спасибо, работает! сейчас попробую осознать проиходящее) 2 lmikle извеняюсь, код! код попробывал) |
#7
|
|||
|
|||
![]() Врете вы все. Только что проверил свой код. Там не хватает одной скобки и ссылки при адресации мемо на форму, а в остальном все работает как часы. Дает список из N чисел в произвольном порядке.
|
#8
|
||||
|
||||
![]() Цитата:
(немного переделал твою и свою): Код:
и High(AList) = N - 1 |
#9
|
||||
|
||||
![]() Причем процедура lmikle "GenerateList(N : Integer; St: TStrings);" хоть и является частным случаем моей "FillList(K, N : Integer; St: TStrings);"
(При K=N) работает в этом случае более эфективно, поэтому в мою можно добавить Код:
|