На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (7) « Первая ... 3 4 [5] 6 7  все  ( Перейти к последнему сообщению )  
> адача на Turbo Prolog
    Здравствуйте, не могу решить задачу "Вычислить x^n". Вроде должно выглядеть вот так, но в ошибке пишется типа see declrations power. В чём ошибка?
    ExpandedWrap disabled
      PREDICATES
      %первый аргумент - основание степени, второй - показатель степени,
      % третий - результат
      power (real, integer, real)
       
      CLAUSES
      %любое число в нулевой степени равно 1
      power (_, 0, 1):- !.
      %xn=x(n-1)*x
      power (X, N, X_powerN):- M=N-1,
      %в следующей этой строке ошибка
      power (M, X_powerM),  
      Xpower_N=Xpower_M*X.
       
      GOAL
      write ("Основание степени? "), readreal (X),
      write ("Показатель степени? "), readint (N),
      power (X, N, Result), write (X, " в степени ", N" =", Result).
      ExpandedWrap disabled
        p(X,0,1):-!.
        p(0,X,0):-!.
        p(X,1,X):-!.
        p(X,N,R):-
          N1=N-1,
          p(X,N1,R1),
          R=X*R1.
        Большое спасибо. Работает
          Помогите пожалуйста к зачёту, очень надо.
          1)добавить к списку заданный элемент и найти длину хвоста списка

          2)посчитать сумму ряда, если N дано.
          1/((3N-2)(3N+1))

          3)задано 3 числа (Х1,У1) (Х2,У2) (Х3,У3)
          Найти их взаимное расположение, если:
          1)они образуют прямую;
          2)они образуют невырожденный треугольник.
            ЛИСИКА, с получением зачёта помогают в разделе "Помощь студентам", платно.
              Цитата Swetlana @
              Второе

              ExpandedWrap disabled
                domains
                li=integer*
                 
                predicates
                count(integer,li,integer)
                del(integer,li,li)
                max(li,integer)
                p2(li,li)
                 
                goal
                clearwindow,
                p2([3,2,1,2,1,2,1,3,1],[1]), write("yes");
                write("no").
                 
                 
                clauses
                p2(_,[]):-!.
                p2(L,[H|T]):-
                  max(L,N),!,
                  count(H,L,N),
                  p2(L,T).
                 
                max([],0):-!.
                max([H|T],N):-
                  count(H,[H|T],N1),
                  del(H,T,T1),
                  max(T1,N),
                  N>=N1.
                max([H|T],N):-
                  count(H,[H|T],N).  
                 
                del(_,[],[]):-!.
                del(H,[H|T],T1):-
                  del(H,T,T1),!.
                del(X,[H|T],[H|T1]):-
                  del(X,T,T1).  
                 
                count(X,[],0):-!.
                count(H,[H|T],N1):-
                  count(H,T,N),
                  N1=N+1.
                count(X,[H|T],N):-
                  count(X,T,N).

              Swetlana,ввожу p2([3,2,2,1,2,1,2,1,3,1,2],[1]) пишет "да"
              или p2([3,2,1,2,1,2,1,3,1,2],[1]),тоже пишет "да"
              ((((
                PEOPLE NEED HELP!!! Полный завал с прологом! :wall:
                Нужно описать предикат P(L1,L2), который истинен если в L2 повторяються только те элементы которые повторяються в L1.
                Например L1=[1,2,2,4,6,6,6,3] а L1=[8,4,2,2,6,6,6]
                Здесь пролог должен вывести ДА.
                Буду рад любой помощи!) :(
                  Здравствуйте, помогите пожалуйста решить хоть что-нибудь из этого? Prolog
                  Заранее огромное спасибо)


                  1) Родственные отношения. Имеется N объектов и заданы отношения между
                  ними: родитель, мужчина, женщина. Требуется определить новое отношение (в
                  задании указано жирным шрифтом) и выявить круг лиц, ему удовлетворяющих.

                  Определить предикат потомок и найти всех потомков и потомков конкретного
                  лица.

                  2) Логические головоломки. Написать программу на языке Prolog, реализующую
                  логическую головоломку.

                  На международном конгрессе встретились 4 делегата из разных стран.
                  Каждый из них владел только двумя языками из 4 (английский, французский,
                  итальянский и немецкий). Однако оказалось, что не было такого языка, на
                  котором они могли бы разговаривать вчетвером. И только был один язык, на
                  котором могли вести беседу трое из них. Никто из делегатов не владеет
                  французским и немецким языками одновременно. Хотя физик не говорит по-
                  английски, он может служить переводчиком, если математик и биолог
                  захотят поговорить друг с другом. Биолог говорит по-немецки и может
                  говорить с химиком, хотя тот не знает немецкого. Физик, математик и химик
                  не могут беседовать втроем на одном языке.
                  ? Какими двумя языками владеет каждый из них ?

                  3) Логические головоломки. Написать программу на языке Prolog, реализующую
                  логическую головоломку.

                  Корнеев, Докшин, Мареев и Скобелев – жители нашего города. Их профессии –
                  пекарь, врач, инженер и милиционер. Корнеев и Докшин – соседи и всегда на
                  работу ездят вместе. Докшин старше Мареева. Корнеев регулярно обыгрывает
                  Скобелева в пинг-понг. Пекарь на работу всегда ходит пешком. Милиционер не
                  живет с врачом. Инженер и милиционер встречались единожды, когда
                  милиционер оштрафовал инженера за нарушение правил. Милиционер старше
                  врача и инженера.
                  ? Определите профессии ?

                  4) Списки. Задан список целых чисел L.

                  Сформировать список L1 из элементов: минимальный элемент всего списка L,
                  минимальный элемент из последних n-1 элементов L и т.д.

                  5) Список структур
                  Сформировать список структур. Предусмотреть предикат, дополняющий этот список
                  информацией, вводимой с клавиатуры. Сформировать из исходного списка новый список
                  структур и вывести его на экран.
                  Определены структуры «дата рождения», «Ф.И.О.» (фамилия, имя, отчество),
                  «персона» (Ф.И.О., дата рождения) и «супруги» (Ф.И.О., Ф.И.О.). Заданы N лиц,
                  информация о которых представлена в виде фактов, содержащих структуры «персона»
                  или «супруги».

                  Найти все тупоугольные треугольники.
                    Помогите решить задачу в Turbo Prolog

                    Задайте отношение между числами a, b и x, так чтобы х являлось корнем уравнения ax+b=0.

                    Зарание блпгодарен !!!
                      f(0,0,_):-
                      write("any x"),!.
                      f(0,B,_):-
                      write("No solution"),!.
                      f(A,B,X):-
                      X=-B/A,
                      write("x=",X).
                        Цитата Swetlana @
                        f(0,0,_):-
                        write("any x"),!.
                        f(0,B,_):-
                        write("No solution"),!.
                        f(A,B,X):-
                        X=-B/A,
                        write("x=",X).

                        Это я так понимаю раздел clauses ???
                        А в predicates что нужно написать ???
                          Вроде задание звучит задайте отношение.

                          ExpandedWrap disabled
                            predicates
                            f(real,real,real)
                             
                            goal
                            write("a="), readreal(A), nl,
                            write("b="), readreal(B), nl, f(A,B,X).
                             
                            clauses
                            f(0,0,_):-
                            write("any x"),!.
                             
                            f(0,B,_):-
                            write("No solution"),!.
                             
                            f(A,B,X):-
                            X=-B/A,
                            write("x=",X).
                            Swetlana
                            Спасибо большое за помощь
                              Задача - вычислить длину списка, т.е. количество элементов в списке. Исходные данные берутся из БД.
                              Мое решение:
                              ExpandedWrap disabled
                                domains
                                    list=integer*
                                    num=integer
                                database
                                    length(list)
                                predicates
                                    length_inp(list, num)
                                    start  
                                clauses
                                start:-
                                    consult("db.ddb"),
                                    readterm(list,length(list)),
                                    length_inp([], 0).
                                    length_inp([_|T], L) :-
                                              length_inp(T, L_T),
                                              L = L_T + 1.
                                goal
                                    start,
                                    length_inp(_, L),
                                    write(L).

                              Не знаю как связать базу данных и предикаты. Жду помощи. Заранее благодарен!
                                Доброго времени суток!
                                Необходимо реализовать программу, реализующую предикат concat с помощью repeat-цикла.
                                Сейчас есть что-то такое:
                                ExpandedWrap disabled
                                  concat(X, Y, Res) :- Res = X, repeat, concat_ext(X, Y, Res), !.
                                  concat_ext (X, [], Res).
                                  concat_ext (X, Y, [El | Res]) :- getLastElement(Y, YNew, El), fail.
                                   
                                  repeat.
                                  repeat :- repeat.

                                Вот. concat_ext - совершает действия по объединению списков. Если возвращает true (собрали новый список полностью) - выполнение цикла прекращается. Если список не пуст, по идее, нужно отрезать у него крайний элемент, соединить со списомом Res и вернуть на уровень выше. Так до тех пор, пока список не станет пустым.
                                Но теперь проблема: как в цикл вернуть список, у которого мы отрезали крайний элемент?
                                Или я чего-то не понимаю, или ошибочно спроектировал программу. Везде примеры repeat-циклов, которые не возвращают значений, а только выполняют какие-либо действия (вроде - считать и распечатать).
                                Прошу подсказать в чем проблема. Заранее спасибо!
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (7) « Первая ... 3 4 [5] 6 7  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0393 ]   [ 14 queries used ]   [ Generated: 17.05.24, 08:32 GMT ]