Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ логарифмы vs. *

Автор: compiler 14.04.2007 22:55

Добрый день!
Необходимо написать программу которая б демонстрировало разность в скоростях при использовании логарифмов и умножении
помогите разобраться с ошибками...
заранее благодарен..

uses crt, Dos, math;

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;

var
r,
re,
start:LongInt;
i, size:integer;
_array: array [0..size] of integer;
const
e=2.71828;
begin
randomize;
size:=random(1000);
r:=1;
start := GetTime;
for i:=0 to size do
begin
_array[i]:=random(32000);
end;
WriteLn('Время выполнения заполнение массива = ', GetTime - start);

start := GetTime;
for i:=0 to size do
begin
r:=_array[i]*r;
end;
WriteLn('Время выполнения умножения = ', GetTime - start);

r:=0;

start := GetTime;
for i:=0 to size do
begin
r:=ln ( _array[i] )+r;
end;

for i:=0 to r do
begin
re:=re*e;
end;
WriteLn('Время выполнения заполнение массива = ', GetTime - start);
end.


Автор: compiler 15.04.2007 21:07

Помогите!!!

еще, компилятор -- FP.

Автор: volvo 15.04.2007 21:31

Цитата
помогите разобраться с ошибками...
А чего с ними разбираться?

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

var
_array: array of integer;

begin
randomize;
size:=random(1000);
r:=1;

setlength(_array, size);
for i:=0 to size-1 do begin
_array[i]:=random(32000) + 1; // Чтобы сразу отсечь попытку Ln(0) чуть ниже
end;

...

for i:=0 to size-1 do begin
r:=_array[i]*r; // <-- Нужен ОЧЕНЬ емкий целый тип, или Double
end;

...

Вместо GetTime из модуля DOS я бы воспользовался GetTickCount из модуля Windows...

А вот дальше я не понял, что ты хотел сделать...

for i:=0 to r do
begin
re:=re*e; // Что такое e, например?
end;

Автор: compiler 15.04.2007 22:21

следующая версия...

uses crt, Dos, math, Windows;

var
r,
re:Int64;
start:Int64;
i, size:Int64;
_array: array of Int64;
const
e=2.71828;

begin
randomize;
size:=random(1000);
r:=1;
re:=1;
setlength(_array, size);

start := GetTickCount();
for i:=0 to size-1 do
begin
_array[i]:=random(32000)+1;
end;
WriteLn('Время выполнения заполнение массива = ', GetTickCount() - start);

start := GetTickCount();
for i:=0 to size-1 do
begin
r:=_array[i]*r;
end;
WriteLn('Время выполнения умножения = ', GetTickCount() - start);

r:=0;

start := GetTickCount();
for i:=0 to size-1 do
begin
r:=ln ( _array[i] )+r;
end;

for i:=0 to r do
begin
re:=re*e;
end;
WriteLn('Время выполнения заполнение массива = ', GetTickCount() - start);
end.




е -- основа натуральных(неперовых[как называют некоторые]) логарифмов
а хотел я переменную r(логарифм) превратить в число переменная rе