Исходные числа для суммы и произведения

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

Помечено: 

В этой теме 1 ответ, 2 участника, последнее обновление 3 нед., 6 дн. назад.

  • Автор
    Сообщения
  • #5403
    @dima4871

    Задача. Заданны два натуральных числа. Надо проверить если такие числа, сумма и произведение которых, равнялась бы двум заданным числам.

    Например: Заданны числа 10 и 25. Результатом будет 5+5=10 и 5*5=25.

    В обычном случае можно было бы взять два цикла и перебором найти эти два числа. Но я не понимаю как сделать подцикл.

    in(S,P,X,Y):-
      S>3, S<199, 
      P>3, P<199, 
      out(1,1,S,P,X,Y).
      
    out(Sa,Sb,S,P,X,Y):-
      Sa*Sb=P,
      Sa+Sb=S,!,
      write('yes'),
      X=Sa,Y=Sb.
    out(Sa,Sb,S,P,X,Y):-
      Sa=<P,
      Sa1 is Sa+1, 
      out(Sa1,Sb1,X,P,X,Y).
    
    goal:-
      write('Введите первое число: '),nl,
      read(S),
      write('Введите второе число: '),nl,
      read(P),nl,
      in(S,P,X,Y),
      write('Первое число: ',X),nl,
      write('Второе число: ',Y),nl,nl.

  • #5404
    @admin

    Для случая с натуральными числами решить можно так:

    sum_prod(Sum, Prod, A, B):-
        between(0, Sum, A),
        between(0, Sum, B),
        Sum is A+B,
        Prod is A*B.

    Числа натуральные, значит A и B лежат в диапазоне от нуля до Sum. Встроенная функция between перебирает числа в заданном диапазоне. В крайнем случае, она элементарно реализуется.

    Ну а в общем случае задачи такого типа нужно решать с помощью clpfd или типа того. Это более простой, эффективный и универсальный способ.

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