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