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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 20:05   #1
Silverstone
Пользователь
 
Регистрация: 13.12.2011
Сообщений: 75
По умолчанию Измерение времени выполнения процедуры

Всем привет. Помогите исправить: надо измерить время выполнения процедуры. Сделал через gettime, сравнивая начало и конец времени работы...
P.S - кто может сказать что не правильно в закоменченых строках процедуры?

Код:
Program ex16;
uses dos, crt;

type
 mas=array[1..400] of integer;
 var
  i,n,v:integer; a:mas; c:char;
  hour,min,sec,hund:word;
  t,t1,t2:real;

procedure puz(var a:mas; n:integer);
 var
is:boolean; i,t:integer;
begin
 repeat
  is:=false;
   for i:=1 to n-1 do
    if a[i]>a[i+1] then
    begin
     is:=true;
     t:=a[i];
     a[i]:=a[i+1];
     a[i+1]:=t;
   end;
 until is=false;
end;

procedure prvkl(var a:mas; n:integer);
 var x,i,j:integer;
begin
  for i:=2 to n do
  begin
   x:=a[i];
   j:=i-1;
   while (j>0) and (x<a[j]) do
   begin
   a[j+1]:=a[j];
   j:=j-1;
   end;
   a[j+1]:=x;
   end;
end;

procedure fsort(a:mas; l,r:integer);
 var
i,j,x,y:integer;
begin
 i:=l; j:=r;
 x:=a[(l+r)div 2];
 repeat
  while a[i]<x do inc(i);
  while a[i]>x do dec(j);

  if i<=j then begin
   y:=a[i];
   a[i]:=a[j];
   a[j]:=y;
   inc(i);
   dec(j);
  end;

 until i>j;
{  if l<j then fsort(l,j);
  if i<r then fsort(i,r);}
end;

procedure linsort(var a:mas; n:integer);
 var x,i,j,t:integer;
begin
for i:=1 to n-1 do
 for j:=i+1 to n do
  if a[i]>=a[j] then begin
  t:=a[i];
  a[i]:=a[j];
  a[j]:=t;
 end;
end;

begin
 clrscr;
 write('Введите n: ');
   read(n);
 write('Полученный массив => ');
 randomize;
  for i:=1 to n do
   begin
    a[i]:=random(50);
    write(a[i]:3,' ');
   end;

 repeat
  writeln('Выберите метод сортировки:');
  writeln('---------------------')
  writeln('1-пузырьком');
  writeln('2-простыми включениями');
  writeln('3-линейный');
  writeln('4-быстрый(Хуара))');
    readln(v);

   case v of
    '1':
      begin
        gettime(hour,min,sec,hund);
         writeln(hour,':',min,':',sec,':',hund);
        t1:=sec+hour*0,01+min*60+hour*3600;
        writeln('‚Время начала сортировки: ',t1:0:10);

      puz(a,n);

        gettime(hour,min,sec,hund);
         writeln(hour,':',min,':',sec,':',hund);
        t2:=sec+hour*0,01+min*60+hour*3600;
         writeln('‚Время конца сортировки: ',t2:0:10);

        t:=t2-t1;
        writeln('‚Время выполнения процедуры: ',t:0:10);
      end;
    '2':prvkl(a,n);
    '3':linsort(a,n);
    '4':begin
         for i:=1 to n do
          fsort(1,n);
        end;
   end;

 writeln('Отсортированный массив => ');
  for i:=1 to n do
     write(a[i],' ');

 writeln('// Повторить Y/N');
  readln(c);
  c:=upcase(c);
 until (c='N');
end.
Silverstone вне форума Ответить с цитированием
Старый 18.03.2012, 21:21   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Если хотите получить более-менее реальные данные по скорости выполнения, то делайте хотя-бы 1000 заходов - данные получатся более реальные.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.03.2012, 21:41   #3
Silverstone
Пользователь
 
Регистрация: 13.12.2011
Сообщений: 75
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Если хотите получить более-менее реальные данные по скорости выполнения, то делайте хотя-бы 1000 заходов - данные получатся более реальные.
этот нюанс учтен, правда, для начало было бы не плохо просто gettime запустить)
Silverstone вне форума Ответить с цитированием
Старый 18.03.2012, 21:50   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
t2:=sec+hour*0,01+min*60+hour*3600;
вот тут похоже есть ошибка... если разница в миллисекундах, то время будет одинаковым.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.03.2012, 21:57   #5
Silverstone
Пользователь
 
Регистрация: 13.12.2011
Сообщений: 75
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
вот тут похоже есть ошибка... если разница в миллисекундах, то время будет одинаковым.
ок. сейчас посмотрю

но тут еще проблема в том, что writeln от gettime ничего не выводит
по началу он мне хотя бы нули выводил...
Silverstone вне форума Ответить с цитированием
Старый 18.03.2012, 22:02   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
writeln('‚Время начала сортировки: ',t1:0:10);
А целая часть времени совсем не интересует? тут вроде всё в секундах должно измеряться...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++, GetThreadTimes, Измерение времени выполнения потока OffyGhost Помощь студентам 1 13.03.2010 15:52
Профилирование (Измерение времени работы программы) megakatapuz Общие вопросы C/C++ 0 06.01.2010 23:04
Измерение времени выполнения цикла Alexcomeback Общие вопросы C/C++ 10 25.04.2009 16:58
Измерение времени нажатия клавиши клавиатуры buka_14 Помощь студентам 6 13.04.2009 13:18
Измерение времени в c# byte916 Помощь студентам 4 06.03.2009 21:18