Как на Pascal сделать процедуру выполняющую подсчет времени выполнения программы? Нужна для сравнения скорости выполнеия сортировок. У меня есть на Delphi. Можно ли ее переделать? var OperBegin, OperEnd: TTimeStamp; Total: LongWord;
begin OperBegin := DateTimeToTimeStamp(Now); {запоминается момент начала операции}
{Здесь размещается код операции}
OperEnd := DateTimeToTimeStamp(Now); {запоминается момент окончания операции} Total := OperEnd.Time - OperBegin.Time; end;
Bokul
7.01.2007 5:07
Вот, посмотри Как засекать время . Для Делфи тоже самое. Если надо точнее, то QueryPerformanceCounter и QueryPerformanceFrequency, о них можно почитать здесь
Coconut
7.01.2007 5:31
Спасибо. Но у меня возникла небольшая проблема, при использовании uses windows; вылетает ошибка file windows.tpu не найден, если можете, скиньте, и путь где он должен лежать
Спасибо. Воспользовался Meml, вроде как заработало, потому что в массив ввел всего 50 элементов (на больше меня не хватило) , а с функцией random знаком плохо, завтра разбеоусь, и проверю еще раз. Еще раз спасибо всем.
с winprocs - аналогично
Bokul
7.01.2007 6:36
Можно также работать с досовской процедурой GetTime(Var Hour,Minute,Second,Sec100:word), но будет медленнее + мороки больше.
А насчет "медленнее" - можно узнать, что ты имел в виду?
Coconut
7.01.2007 19:46
Спасибо, volvo. Запустил, один раз заработало - выывела результат на 20 элементах, потом и на 30 показывает 0, думаю мало элементов, как массиву типа pchar присвоить значения с помощью random?
Coconut
7.01.2007 20:50
Запустил отладку вручную, gettime работает. Следовательно, мало элементов.
Bokul
7.01.2007 23:23
Цитата
как массиву типа pchar присвоить значения с помощью random?
Так генерируем случайную букву латинского алфавита:
randomize; writeln(random(chr(random(25)+97));
Цитата
Ну, прямо таки больше?
Она не покажет правильный результат, если прогу тестировать в полночь..
Цитата
А насчет "медленнее" - можно узнать, что ты имел в виду?
Обратится один аз к памяти медленнее чем делать столько вычислений + опять таки обращаться к памяти?
Bokul
7.01.2007 23:54
Еще добавлю - способ с досовским таймером будет влиять на увеличения засекаемого времени, ведь после самого взятия время мы тратим некоторые доли секунд на преобразование в LongInt, что дает погрешность.
volvo
8.01.2007 0:18
Цитата
Еще добавлю - способ с досовским таймером будет влиять на увеличения засекаемого времени, ведь после самого взятия время мы тратим некоторые доли секунд на преобразование в LongInt, что дает погрешность.
Правда? А ничего, что время на конвертацию в LongInt при первом вызове практически идентично времени на ту же конвертацию при втором вызове? Дальше продолжить, или догадаешься? Это первое...
Второе - НЕТ совершенно безошибочного способа, даже QueryPerformanceCounter будет давать тебе результаты, которые можно будет признать некорректными, ибо Windows - вообще-то не RT OS... Выбирать надо способ, дающий достаточную точность...
Bokul
8.01.2007 0:25
Цитата
Выбирать надо способ, дающий достаточную точность...
Так какой точнее?
Malice
8.01.2007 1:44
Цитата(Bokul @ 7.01.2007 19:23)
writeln(random(chr(random(25)+97));
Вот так все таки:
writeln(chr(random(25)+97));
Coconut
15.01.2007 17:51
Всем огромное спасибо и признательность за помощь. Использовал Gettime, при сортировке 10000 элементов получил время в 5 мс, задачу сдал.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.