Здравствуйте, эксперты. Такое дело: надо сгенерить массив, но вот проблема, одно и тоже число встречается слишком часто, как быть? Вопрос как то странно звучит, но надеюсь вы меня поняли. //На заполнение массива должно уйти как можно меньше времени.
Приветствую Вас, Iv! Random(max:integer)- генератор случайных чисел, параметры - макс. число.Генератор генерирует случайные числа в диапозоне от 0 до (max-1). У тебя макс. число равно 9, и что ты хочешь из этого получить много разных чисел?!?!?Ну ты даешь... Увелич макс. число!!! Счастливо! Ответ отправлен: 21.05.2003, 13:22 Отправитель: BOLT Отвечает Byter
Доброе время суток, Iv! в приложении
Приложение: Ответ отправлен: 24.05.2003, 15:43 Отправитель: Byter Отвечает _vt
Приветствую Вас, Iv! Функция Randomize должна вызываться в программе только один раз. Ответ отправлен: 21.05.2003, 03:02 Отправитель: _vt Отвечает Bill
Доброе время суток, Iv! Random(9) - генерирует "случайное" число от 0 до 9, но 650 раз - как обойтись без частых повторений?! Random(900)- по крайней мере. А для скорости Randomize нужно вызвать только один раз, до цикла. Ответ отправлен: 21.05.2003, 10:06 Отправитель: Bill Отвечает Tigran K. Kalaidjian
Добрый день, Iv! Уберите строчку randomize; из цикла в самое начало процедуры заполнения. Ответ отправлен: 21.05.2003, 10:15 Отправитель: Tigran K. Kalaidjian Отвечает Tancho
Приветствую Вас, Iv! 1) Randomize - ето процедура для инициализации встроеный генератор случайных чисель с случайное значение, которое получаеться из системного слока! Поетому оно должна вызваться только один раз переди стартования Random! Перенеси ее вне циклов!; 2) Зачем пишешь X := Random(9); MyMass[I,J] := X;? Замень их на MyMass[I,J] := Random(9); Так заполнение перейдеть на вдвое быстрее, так как присваивания уменшатся наполом, а и секономиш два байта памяти так как Х будеть окозатся лишнее!
Ответ отправлен: 21.05.2003, 10:19 Отправитель: Tancho Отвечает Ayl
Приветствую Вас, Iv! Ты неправильно используешь конструкцию Randomize. Дело в том, что данная процедура перенастраивает генератор случайных чисел. Но если ее использовать постоянно, то ты не получишь последовательность псевдослучайных чисел, подчиняющююся определенным законам. Ты получишь набор случайных чисел, не связанных никакой зависимостью. Причем появление какого-либо числа с большей вероятностью, чем остальные достаточно ожидаемо. Чтобы исправить это, тебе нужно вынести Randomize за пределы цикла. Соответственно, и скорость выполнения повысится. А если отказаться от лишнего присваивания, то вообще будет хорошо (см. Приложение)
Приложение: Ответ отправлен: 21.05.2003, 11:06 Отправитель: Ayl
Добрый день, shal! Что получается под TP см. в приложении. Метод нехорош для замеров времени более минуты, ибо начинает запаздывать системное время...
Приложение: Ответ отправлен: 23.05.2003, 12:33 Отправитель: Tigran K. Kalaidjian Отвечает BOLT
Добрый день, shal! Самый простой вариант: В начале сортировок получаешь системное время.В конце каждой сортировки тоже сканируешь системное время.Отнимаешь от конечного времени начальное каждой и получаешь время каждой сортировки.Ну и, конечно, сравниваешь.В общем я описал алгоритм, надеюсь реализовать это тебе не составит труда. Счастливо! Ответ отправлен: 22.05.2003, 13:43 Отправитель: BOLT Отвечает Ayl
Здравствуйте, shal! Ну, например, вот так (см.Приложение).
Приложение: Ответ отправлен: 21.05.2003, 11:22 Отправитель: Ayl Отвечает baldr
Доброе время суток, shal! Собсна, я не вижу проблемы! Перед началом сортировки засекаешь время и смотришь время после сортировки. Лучше брать большой массив, чтобы секунд 4-7 сортировался. И несколько раз, а потом усреднить... Можно перехватить прерывание таймера - тогда еще точнее получится. Ответ отправлен: 21.05.2003, 09:27 Отправитель: baldr Отвечает Bill
Приветствую Вас, shal! GetTime -> Hour*360 + Minute*60 + Sec + Sec100/100 и вызываешь до и после процедуры. Если разница малая, то вызываешь процедуру сортировки 100, 1000 ... раз. Учти еще вот что, Windows выделяет ДОС-программе процессорное время квантами, так что во время счета посмотри, что ничего больше не выполнялось. Или повтори несколько раз.
Ответ отправлен: 21.05.2003, 10:01 Отправитель: Bill Отвечает Tancho
Добрый день, shal! Засекай время одну сортировку и другой. Сравняй и увидишь что больше и что меньше! Время получаеться через : GetTime(hour,Minute,Second,Sec100); Vreme_Nach := 360000*hour+6000*minute+100*second+sec100; Так получишь время в стотни секунд.После сортировки тоже через GetTime получай: Vreme_Konec := 360000*hour+6000*minute+100*second+sec100; Vreme_Sort1 := Vreme_Konec - Vreme_Nach; Аналогично Vreme_Sort2 и... сравняй! Ответ отправлен: 21.05.2003, 10:44 Отправитель: Tancho
Вопрос № 241
Господа, подскажите пожалуйста как организовать буфер обмена на Turbo Vision.
Приветствую Вас, Jens! Зайди на pascal.sources.ru там на главной есть "Буфер обмена для Turbo Pascal"
Ответ отправлен: 21.05.2003, 14:40 Отправитель: DoS@ Отвечает Bill
Приветствую Вас, Jens! Обмен чем? И между кем? Буфер обмена типа Clipboard? Или просто обмена между окнами? Если между окнами в одной прораммами, то можно послать сообщение E:TEvent. TVision так и делает. Специально для этого есть событие evBroadcast. Если надо могу выслать пример выбора строки в TListBox (surin_bp@mail.ru). Если типа Clipboard, то это тоже не сложно (есть стандартный пример в BP (Tutor8).
Ответ отправлен: 22.05.2003, 09:25 Отправитель: Bill
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.