Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2010, 15:22   #1
V_F
 
Регистрация: 15.11.2010
Сообщений: 4
По умолчанию засеч время работы алгоритма

ребят, выручайте, не получается посчитать время, таймер показывает либо 31 либо ноль, а нужно чтобы количество тиков было не меньше 100
Код:
const
N = 50000;
var
 mass      : array [1..N+1] of integer ;
 i         : longint ;
 k         : longint ;
 buf , j   : longint ;
 time_neop : longint ;
 time_op   : longint ;
begin
 begin
   Randomize;
  For i:= 1 To N Do mass[i]:= Random(1000);
   k:= StrToInt(edit1.text);
 end;
 //неоптимальный поиск
 i:= 1;
 time_neop:= GetTickCount ;
for j := 1 to 10000000 do
 repeat
    if mass[i] = k then break ;
   i:= i + 1;
  until
    i = N ;
  begin
   if i = N  then
    Label8.caption:= ('Элемент не найден' +#13 +#10 + 'колличество тиков:' + ' ' +IntToStr(GetTickCount - time_neop))
    else
    Label8.Caption:= ( 'Элемент найден' +#13 +#10 + 'колличество тиков:' + ' ' +IntToStr(GetTickCount - time_neop) +#13 +#10 + 'индекс элемента:' + ' ' + IntToStr(i) );
  end;

Последний раз редактировалось Stilet; 15.11.2010 в 16:53.
V_F вне форума Ответить с цитированием
Старый 15.11.2010, 16:44   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
time_neop:= GetTickCount ;
А сами пишете таймер.
А чтобы проще считать время, киньте на форму таймер из вкладки System и в событии OnTimer напишите
Код:
Inc(T);
Где T - переменная Integer.
Свойство таймера Interval поставьте 1(это одна миллисекунда)
_-Re@l-_ вне форума Ответить с цитированием
Старый 15.11.2010, 17:19   #3
ybn
Заблокирован
 
Регистрация: 17.09.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от V_F Посмотреть сообщение
ребят, выручайте, не получается посчитать время,
На Delphi все гораздо проще.
1. Засекаешь текущее время:
2. запускаешь алгоритм;
3. Засекаешь текущее время (по окончанию работы алгоритма);
4. Ищешь разницу.
Вот как это делается:

Код:
Var
  t1,t2:TDateTime;
  H,M,Sec,MS:Word;
begin
  T1:=time;
..............
// Здесь твой алгоритм
.............
  t2:=time;
  Decodetime (t2-t1,H,M,Sec,Ms);
   Label1.Caption:=IntToStr(H)+':'+IntToStr(M)+':'+IntToStr(sec)+'.'+IntToStr(MS),clred;

end;
ybn вне форума Ответить с цитированием
Старый 15.11.2010, 18:44   #4
V_F
 
Регистрация: 15.11.2010
Сообщений: 4
По умолчанию

_-Re@l-_
я так понял таймер будет считать время работы всей программы, а у меня кроме этого алгоритма ещё 4 , и для каждого алгоритма нужно посчитать время

ybn
работает для другого алгоритма, для этого нули пишет(
может в самом алгоритме ошибки
Цитата:
//неоптимальный поиск
i:= 0;
//time_neop:= GetTickCount ;
t1:=time;
for j := 1 to 100000 do
begin
repeat
if mass[i] = k then break;
i:= i + 1;
until
i = N ;
end;
T2:=time;
Decodetime (t2-t1,H,M,Sec,Ms);
begin
if i = N then
Label8.caption:= ('Элемент не найден' +#13 +#10 + 'колличество тиков:' + ' ' +IntToStr(H)+':'+IntToStr(M)+':'+In tToStr(sec)+'.'+IntToStr(MS))
else
Label8.Caption:= ( 'Элемент найден' +#13 +#10 + 'колличество тиков:' + ' ' +IntToStr(H)+':'+IntToStr(M)+':'+In tToStr(sec)+'.'+IntToStr(MS) +#13 +#10 + 'индекс элемента:' + ' ' + IntToStr(i) );
end;

Последний раз редактировалось V_F; 15.11.2010 в 19:12.
V_F вне форума Ответить с цитированием
Старый 15.11.2010, 19:22   #5
V_F
 
Регистрация: 15.11.2010
Сообщений: 4
По умолчанию

всем спасибо, разобрался
я индекс перед зациклением обнулил, поэтому и неполучалось)
ещё раз спасибо)
V_F вне форума Ответить с цитированием
Старый 15.11.2010, 19:34   #6
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
я так понял таймер будет считать время работы всей программы,
У таймера есть свойство enabled, используй его. Видать, у тебя Делфи на том же уровне, что у меня brainfuck. Не в обиду сказано.
_-Re@l-_ вне форума Ответить с цитированием
Старый 15.11.2010, 20:00   #7
V_F
 
Регистрация: 15.11.2010
Сообщений: 4
По умолчанию

ну да, начинаю только)
спасибо за помощь)
V_F вне форума Ответить с цитированием
Старый 15.11.2010, 23:05   #8
casekey
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 95
По умолчанию

Код:
uses SysUtils;
var
  t: TDateTime;
  i: Integer;
begin
  t := Now(); // запомнить время
  for i := 1 to 10000 do
  begin
    // Выполняем операцию, у которой хотим засечь время выполнения
  end;
  t := Now() - t;
  Writeln(FormatDateTime('ss:z',t));
end;
это для консольки в делфи, для интерфейсной вывести результат в лейбл какой нибудь можно
casekey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время работы запроса doober Microsoft Office Access 2 21.10.2010 15:14
Время работы алгоритма, мс. WinForms/С++ Lazio Windows Forms 1 22.09.2010 13:54
Время работы программы Magist Компоненты Delphi 5 24.10.2009 20:52
необходимо засечь время выполнения части алгоритма Lord Lex Win Api 12 03.03.2009 21:36
Время работы сортировок Боня Помощь студентам 1 10.02.2007 17:53