• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

ln/Log

  • Автор темы Автор темы SGE
  • Дата начала Дата начала

SGE

Новые
Регистрация
4 Июн 2009
Сообщения
75
Реакции
1
Баллы
0
Приветствую вас, уважаемые программисты. У меня возник такой вопрос - можно ли через натуральный логарифм написать процедуру для нахождения логарифма с произвольным основанием и числом (логарифма); если да, то какие св-ва логарифмов при этом необходимо использовать?
 
Если я правильно понял Вам нужна процедура, которая получает на входе основание и число логарифма и потом используя стандартную функцию Паскаля Ln(x) вычисляет логарифм?
Вот сама математика: log a (B)= ln(B)/ln(a)
 
Это уже было испробовано. Значение выходного параметра всегда равно 0.
 
Собственно, вот программный код:
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.
 
Надо подумать и сообразить(или вспомнить процедуры), что переменная с должна быть указана со словом var, то бишь надо писать
Procedure log (x,a: word; var c: real);
 
Последнее редактирование:
В процедуру вообще можно значения не передавать, тогда она работает с глобальными переменными, а в вашем случае вы подсчитываете значение локальной переменной с, потом возвращаетесь в основную программу и выводите значение глобальной переменной с, которое равно 0, так как не изменено.
Вывод значения лучше реализовать внутри процедуры, тогда будет выводиться вычисленное значение.
 
  • Like
Реакции: SGE
И еще - какой смысл в целочисленном (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.
 
Всех благодарю за ответы.
 
Назад
Сверху