Вычисление многочлена по схеме Горнера на Prolog

      Комментарии к записи Вычисление многочлена по схеме Горнера на Prolog отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Общие вопросы Вычисление многочлена по схеме Горнера на Prolog

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 1 год, 10 мес. назад.

  • Автор
    Сообщения
  • #2111

    questioner
    Участник

    Помогите решить задачу на языке Prolog:

    Дан многочлен от одной переменной, нужно вычислить его значение по схеме Горнера.

    Вложения:
  • #2117

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

    polynome_gorner([], _X, 0):-!.
    polynome_gorner([An], _X, An):-!.
    polynome_gorner([A|TailMultipliers], X, B):-
      polynome_gorner(TailMultipliers, X, NextB),
      B is A + NextB*X.

    Первое правило обрабатывает случай, когда на вход подан пустой список, т.е. в многочлене нет ни одного ненулевого коэффициента. В схеме Горнера такой случай не рассматривается, однако многочлен при этом равен нулю вне зависимости от значения переменной.
    Второе правило соответствует случаю, когда у многочлена есть один коэффициент, очевидно, что в этом случае значением многочлена будет значение соответствующего коэффициента. Это же правило соответствует первому шару алгоритма в схеме Горнера.
    Остальные шаги алгоритма реализуются рекурсивно- третьим правилом. При этом исходный список разделяется на первый коэффициент и хвост. Хвост обрабатывается рекурсивно (вычисляется значение bn по Горнеру). После того, как результат получен можно вычислить предыдущее значение.

Для ответа в этой теме необходимо авторизоваться.