IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Quicksort, gettime
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Не могу понять,до и после сортировки одно и тоже время....
Код
writeln('Kolichestvo chisel v massive:');
readln(rnd);
for i:=1 to rnd do begin
data[i]:=random(rnd);
end;
writeln('poluchenniy massiv:');
for i:=1 to rnd do begin
write(data[i],' ');
end;
writeln;
begin
gettime(h,m,s,ms);
quicksort(data,1,rnd);
gettime(h1,m1,s1,ms1);
writeln('Otsortirovanniy massiv:');
for i:=1 to rnd do
write(data[i],' ');
writeln('s:',h,':',m,':',s,':',ms);
writeln('e:',h1,':',m1,':',s1,':',ms1);
end;
end.

кто может сказать...еще,как вычислить теперь значение времени,за которое отсортировалось.?

Сообщение отредактировано: bigformat -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Просто выполняется сортировка слишком быстро. Прогони ее сотни тысяч раз в цикле, а потом послеченное время подели на кол-во итераций, что бы примерно подсчитать время выполнения сортировки.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Да ... видимо время работы менее 1 мс, вот тебе на следующий раз модуль для замера времениб чтобы постоянно не юзать gettime

Модуль и пример работы :

Unit XTIMER;

INTERFACE
Var elapsed: Longint; { прошедшее время, в милисекундах. }
Procedure ClockOn; { включает счётчик времени }
Procedure ClockOff; { выключает его }
Procedure PrintTime; { выводит прошедшее время }

IMPLEMENTATION

{uses CRT;}
const Seg0040: word=$0040; { constant of CRT module }

var start:longint;

{ Copyright © 1989-1993 Norbert Juffa }
FUNCTION Clock: LONGINT; ASSEMBLER; { same as VMS; time in milliseconds }
ASM
PUSH DS { save caller's data segment }
MOV DS, Seg0040 { access ticker counter }
MOV BX, 6Ch { offset of ticker counter in segm.}
MOV DX, 43h { timer chip control port }
MOV AL, 4 { freeze timer 0 }
PUSHF { save caller's int flag setting }
CLI { make reading counter an atomic operation}
MOV DI, DS:[BX] { read BIOS ticker counter }
MOV CX, DS:[BX+2]
STI { enable update of ticker counter }
OUT DX, AL { latch timer 0 }
CLI { make reading counter an atomic operation}
MOV SI, DS:[BX] { read BIOS ticker counter }
MOV BX, DS:[BX+2]
IN AL, 40h { read latched timer 0 lo-byte }
MOV AH, AL { save lo-byte }
IN AL, 40h { read latched timer 0 hi-byte }
POPF { restore caller's int flag }
XCHG AL, AH { correct order of hi and lo }
CMP DI, SI { ticker counter updated ? }
JE @no_update { no }
OR AX, AX { update before timer freeze ? }
JNS @no_update { no }
MOV DI, SI { use second }
MOV CX, BX { ticker counter }
@no_update: NOT AX { counter counts down }
MOV BX, 36EDh { load multiplier }
MUL BX { W1 * M }
MOV SI, DX { save W1 * M (hi) }
MOV AX, BX { get M }
MUL DI { W2 * M }
XCHG BX, AX { AX = M, BX = W2 * M (lo) }
MOV DI, DX { DI = W2 * M (hi) }
ADD BX, SI { accumulate }
ADC DI, 0 { result }
XOR SI, SI { load zero }
MUL CX { W3 * M }
ADD AX, DI { accumulate }
ADC DX, SI { result in DX:AX:BX }
MOV DH, DL { move result }
MOV DL, AH { from DL:AX:BX }
MOV AH, AL { to }
MOV AL, BH { DX:AX:BH }
MOV DI, DX { save result }
MOV CX, AX { in DI:CX }
MOV AX, 25110 { calculate correction }
MUL DX { factor }
SUB CX, DX { subtract correction }
SBB DI, SI { factor }
XCHG AX, CX { result back }
MOV DX, DI { to DX:AX }
POP DS { restore caller's data segment }
END;

procedure clockon;
begin
start:=clock;
end;
procedure clockoff;
begin
elapsed:=clock-start;
end;
Procedure PrintTime;
begin
writeln('Elapsed time = ',elapsed, ' ms');
end;

BEGIN
Port [$43] := $34; { need rate generator, not square wave }
Port [$40] := 0; { generator as programmed by some BIOSes }
Port [$40] := 0; { for timer 0 }
END.



uses xtimer;
var
i : integer;
begin
i := 1;
ClockOn;
repeat
inc(i);
until i = 1000;
ClockOff;
PrintTime;
readln;
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


кто может подсказать еще насчет геттайма...Как вычислить значение времени,за которое совершена сортировка,имея 2 отрезка времени(начало и конец)...не вычитать же?(что собсно говоря сойдет,если у вас быстрый комп(тк...несколько мс выполняется,и можно просто мс-ды вычесть)

Сообщение отредактировано: bigformat -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
не вычитать же?


Почему нет ?! blink.gif Посчитал на одном отрезке, закомнил, посчитал на втором, прибавил, лишний байт для переменной жалко ? Ну или парочку lol.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(klem4 @ 11.01.2006 21:01) *

Почему нет ?! blink.gif Посчитал на одном отрезке, закомнил, посчитал на втором, прибавил, лишний байт для переменной жалко ? Ну или парочку lol.gif

Ну а все же....Ну это у меня дома даже 19к сортируется,бывает меньшьше чем за 1мс,а если я приду к своей преподавательнице,и у меня там секунд 5 он сортировать будет...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Function GetTime: LongInt;
Var h, m, s, ms: Word;
begin
Dos.GetTime(h, m, s, ms);
GetTime := ms + 100 * (s + 60 * (m + 60 * h));
end;

...
start := GetTime;
{ твоя сортировка }
WriteLn('Время сортировки = ', GetTime - start);
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


respect volvo,оч помог.
на будущее,кто будет искать...или кому лень будет
Код

program Kviksort;
uses crt,dos;
const n=20000;
type
list=array[1..n] of integer;
var
data:list;
i,rnd: integer;
start:word;

function Gettime:LongInt;
var h,m,s,ms:word;
begin
dos.gettime(h,m,s,ms);
gettime:=ms+100*(s+60*(m+60*h));
end;

procedure quicksort(var a:list; min,max: integer);
procedure sort(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
i:=i+1;
while x<a[j] do
j:=j-1;
if i<=j then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
i:=i+1;
j:=j-1;
end;
until i>j;
If l<j then sort(l,j);
If i<r then sort(i,r);
end;
begin
sort(min,max);
end;
begin
randomize;
writeln;
writeln('Kolichestvo chisel v massive:');
readln(rnd);
for i:=1 to rnd do begin
data[i]:=random(rnd);
end;
writeln('poluchenniy massiv:');
for i:=1 to rnd do begin
write(data[i],' ');
end;
writeln;
begin
gettime;
start:=gettime;
quicksort(data,1,rnd);
writeln('Otsortirovanniy massiv:');
for i:=1 to rnd do
write(data[i],' ');
writeln;
write('vremya sortirovki=',gettime-start,'ms');
end;
end.

принимайте какой есть
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 7.12.2021 19:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name