Возведение в степень сложением на Prolog

      Комментарии к записи Возведение в степень сложением на Prolog отключены

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

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

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

    questioner
    Участник

    Здравствуйте, мне нужно реализовать на языке Prolog функцию, выполняющую возведение в степень при помощи сложения. Степень при этом является целым числом.

  • #2579

    Функция должна принимать дробное число, возводимое в степень, целочисленную степень и возвращать дробный результат:

    predicates
      pow(real, integer, real)

    В функции может быть три варианта поведения в зависимости от значения степени:

    • степень равна нулю — результат равен единице. Это частный случай при котором будет останавливаться рекурсия;
    • степень больше ноля — рекурсивно обрабатывается случай с уменьшенной на единицу степенью, результат умножается на исходное число, т.к. в этом случае a^b = a^(b-1) * a;
    • степень меньше ноля — рекурсивно обрабатывается случай с учеличенной на единицу степенью, результат делится на исходное число, т.к. в этом случае a^b = a^(b+1) / a.

    clauses	
      pow(Value, 0, 1):-!.
      pow(Value, Power, ValuePower):-
      	Power > 0, !,
      	TailPower = Power - 1,
      	pow(Value, TailPower, TailValuePower),
      	ValuePower = TailValuePower*Value.
      pow(Value, Power, ValuePower):-
      	TailPower = Power + 1,
      	pow(Value, TailPower, TailValuePower),
      	ValuePower = TailValuePower/Value.

    Для проверки решения запросим два числа и запустим программу:

    goal
    	write("Value: "), readreal(Value), 
    	write("Power: "), readInt(Power),
    	pow(Value, Power, ValuePower).

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