Помощь - Поиск - Пользователи - Календарь
Полная версия: логарифмы vs. *
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
compiler
Добрый день!
Необходимо написать программу которая б демонстрировало разность в скоростях при использовании логарифмов и умножении
помогите разобраться с ошибками...
заранее благодарен..

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
Помогите!!!

еще, компилятор -- FP.
volvo
Цитата
помогите разобраться с ошибками...
А чего с ними разбираться?

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

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
следующая версия...
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е
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.