Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 26.01.2010, 00:04   #1 (permalink)
SGE
Member
 
Регистрация: 04.06.2009
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 37
По умолчанию ln/Log

Приветствую вас, уважаемые программисты. У меня возник такой вопрос - можно ли через натуральный логарифм написать процедуру для нахождения логарифма с произвольным основанием и числом (логарифма); если да, то какие св-ва логарифмов при этом необходимо использовать?
SGE вне форума   Ответить с цитированием
Старый 26.01.2010, 00:21   #2 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Если я правильно понял Вам нужна процедура, которая получает на входе основание и число логарифма и потом используя стандартную функцию Паскаля Ln(x) вычисляет логарифм?
Вот сама математика: log a (B)= ln(B)/ln(a)
DDS вне форума   Ответить с цитированием
Старый 26.01.2010, 00:56   #3 (permalink)
SGE
Member
 
Регистрация: 04.06.2009
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 37
По умолчанию

Это уже было испробовано. Значение выходного параметра всегда равно 0.
SGE вне форума   Ответить с цитированием
Старый 26.01.2010, 01:02   #4 (permalink)
SGE
Member
 
Регистрация: 04.06.2009
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 37
По умолчанию

Собственно, вот программный код:
Program lg;
Uses crt;
Var a,x: word; c: real;
Procedure log (x,a: word; c: real);
begin
If (x>0) and (a>0) and (a<>1) then
c:=ln(x)/ln(a);
end;
Begin
Clrscr;
Writeln('Введите число логарифма и его основание: ');
Readln(x,a);
Log(x,a,c);
Write('Полученное значение равно ',c:3:1);
End.
SGE вне форума   Ответить с цитированием
Старый 26.01.2010, 01:11   #5 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Надо подумать и сообразить(или вспомнить процедуры), что переменная с должна быть указана со словом var, то бишь надо писать
Procedure log (x,a: word; var c: real);

Последний раз редактировалось DDS; 26.01.2010 в 01:21 Причина: опечатка
DDS вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 26.01.2010, 05:06   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

В процедуру вообще можно значения не передавать, тогда она работает с глобальными переменными, а в вашем случае вы подсчитываете значение локальной переменной с, потом возвращаетесь в основную программу и выводите значение глобальной переменной с, которое равно 0, так как не изменено.
Вывод значения лучше реализовать внутри процедуры, тогда будет выводиться вычисленное значение.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 26.01.2010, 09:53   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

И еще - какой смысл в целочисленном (word) формате переменной x? Я бы ее сделал REAL. К тому же зачем тут вообще процедура? Куда логичнее использовать функцию. В общем, я бы так оформил:
Код:
Program lg;
Uses crt;
Var 
 a: word; 
 x: real;
Function log(Xl:real; Al:word):Real;
 begin
  log:=ln(Xl)/ln(Al);
 end;
Begin
 Clrscr;
 Repeat
  Write('The base of logarithm= ');
  Readln(a);
  Write('The argument= ');
  Readln(x);
  If (a<=1) or (x<0) then
   Writeln('The input data is wrong!');
 Until (a>1) and (x>0);
 Write('The value of logarithm is ',Log(x,a):8:5);
 ReadLn;
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 27.01.2010, 17:13   #8 (permalink)
SGE
Member
 
Регистрация: 04.06.2009
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 37
По умолчанию

Всех благодарю за ответы.
SGE вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:30.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.