Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 144
от 25.05.2003, 00:10

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 244
Отправлено ответов: 812
Активность: 332.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

BOLT
Статус: Опытный
Общий рейтинг: 163.88
URL: В помощь начинающему программитсу Assembler, C/C++
[Подробней >>]
Byter
Статус: Опытный
Общий рейтинг: 124.79
[Подробней >>]
_vt
Статус: Доверительный
Общий рейтинг: 119.35
[Подробней >>]
 
Bill
Статус: Доверительный
Общий рейтинг: 182.75
[Подробней >>]
Tigran K. Kalaidjian
Статус: Опытный
Общий рейтинг: 116.37
URL: Методы оптимизации работы ПК
[Подробней >>]
Tancho
Статус: Опытный
Общий рейтинг: 149.43
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 119.14
[Подробней >>]
baldr
Статус: Профессиональный
Общий рейтинг: 112.45
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
DoS@
Статус: Начальный
Общий рейтинг: 129.16
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 239. Здравствуйте, эксперты. Такое дело: надо сгенерить массив, но вот проблема, одно и тоже число встреч... (ответов: 7)
Вопрос № 240. Как сравнить время двух сортировок? ... (ответов: 6)
Вопрос № 241. Господа, подскажите пожалуйста как организовать буфер обмена на Turbo Vision.... (ответов: 2)

Вопросов: 3, ответов: 15


 Вопрос № 239

Здравствуйте, эксперты.
Такое дело: надо сгенерить массив, но вот проблема, одно и тоже число встречается слишком часто, как быть?
Вопрос как то странно звучит, но надеюсь вы меня поняли.
//На заполнение массива должно уйти как можно меньше времени.


Приложение:


Вопрос отправлен: 21.05.2003, 00:03
Отправитель: Iv

[Следующий вопрос >>] [Список вопросов]

Отвечает BOLT

Приветствую Вас, 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


 Вопрос № 240

Как сравнить время двух сортировок?



Вопрос отправлен: 21.05.2003, 03:12
Отправитель: shal (shal@nsk.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Tigran K. Kalaidjian

Добрый день, 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.



Вопрос отправлен: 21.05.2003, 13:42
Отправитель: Jens

[Следующий вопрос >>] [Список вопросов]

Отвечает DoS@

Приветствую Вас, 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.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (32)
Perl (7)
Builder / Delphi (17)
Pascal (29)
Basic / VBA (15)
Java / JavaScript (12)
PHP (7)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (41)
Windows NT/2000/XP (32)
"Железо" (29)
Поиск информации (14)
Администратору
Windows NT/2000/XP (20)
Linux / Unix (11)
Юристу
Гражданское право (5)
Семейное право (3)
Трудовое право (4)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2003 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное