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

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

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

> логарифмы vs. *, отредактируйте прогу...
compiler
сообщение 14.04.2007 18:55
Сообщение #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 - 15.04.2007 17:18


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
compiler
сообщение 15.04.2007 17:07
Сообщение #2


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

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

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


Помогите!!!

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

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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.04.2007 17:31
Сообщение #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 - 15.04.2007 17:32
 К началу страницы 
+ Ответить 
compiler
сообщение 15.04.2007 18:21
Сообщение #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 - 15.04.2007 18:27


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

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

 

- Текстовая версия 26.07.2025 23:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"