Проблема с процедурой Gettime - Pascal
Формулировка задачи:
uses crt,dos;
var i,k:word;
h,m,s,h1:word;
t:longint;
Begin
clrscr;
begin
i:=1;
k:=5;
while i<120 do
begin
if ((i+k) mod 7)=3
then i:=i*i+1
else i:=k*i+17;
end;
end;
writeln('Pascal i=',i);
gettime(h,m,s,h1);
writeln('Time Pascal: ',s*100+m*6000+h1);
for t:=1 to 10000 do
begin
asm
mov i,1;
mov k,5;
@m0:
cmp i,120;
jg @m3;
mov ax,i;
add ax,k;
mov bh,7;
div bh;
cmp dx,3;
je @m2;
jmp @m1;
@m2:
mov ax,i;
mul ax;
add ax,1;
mov i,ax;
jmp @m0;
@m1:
mov ax,i;
mul k;
add ax,17;
mov i,ax;
jmp @m0;
@m3:
end;
end;
writeln;
writeln('Assembler i=',i);
gettime(h,m,s,h1);
writeln('Time Asambler: ',s*100+m*6000+h1);
readln;
end.Решение задачи: «Проблема с процедурой Gettime»
textual
Листинг программы
function getSpeed : real; var tstart : int64; begin tstart := tickCount; sleep(100); tstart := tickCount - tstart; getSpeed := tstart * 10; end;
Объяснение кода листинга программы
- Создается функция под названием getSpeed, которая возвращает значение типа real.
- Объявляются две переменные: tstart, тип которой int64, и getSpeed, тип которой real.
- В блоке begin выполняется следующая последовательность действий:
- tstart присваивается значение текущей метки времени (tickCount).
- Выполняется пауза в течение 100 единиц времени (sleep(100)).
- tstart присваивается значение метки времени после паузы (tickCount - tstart).
- getSpeed присваивается значение, равное произведению tstart на 10.
- Код завершается, и getSpeed возвращается в качестве результата функции.