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

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

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

 
 Ответить  Открыть новую тему 
> логарифмы vs. *, отредактируйте прогу...
сообщение
Сообщение #1


Человек
*****

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

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


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

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 -


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


Человек
*****

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

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


Помогите!!!

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

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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

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

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;


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Человек
*****

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

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


следующая версия...
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е

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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