Главная страница
Навигация по странице:

  • Результат выполнения программы

  • Пример 2.

  • Пример 3.

  • Пример 4.

  • Пример 5

  • Решение

  • Лабораторный практикум пролог. Методические рекомендации по дисциплине Анализ данных


    Скачать 311.21 Kb.
    НазваниеМетодические рекомендации по дисциплине Анализ данных
    АнкорЛабораторный практикум пролог
    Дата11.03.2021
    Размер311.21 Kb.
    Формат файлаodt
    Имя файлаProlog.odt
    ТипМетодические рекомендации
    #183725
    страница8 из 10
    1   2   3   4   5   6   7   8   9   10
    Пример 1.

    Вычислить значение выражения Z=(2*X+Y)/(X-Y) для введенных X и Y.

    Решение:

    PREDICATES

    знач выраж(real,real)

    CLAUSES

    знач_выраж(Х,У):-X<>Y, Z=(2*X+Y)/(X-Y), write("Z=",Z);

    write ("Делить на 0 нельзя!").

    GOAL

    Write("X="),readreal(X),

    Write("Y="),readreal(Y),знач_выраж(X,Y),nl.

    Комментарий: readreal - предикат для ввода действительных чисел

    Результат выполнения программы:

    1. й случай:

    X=4

    Y=4

    Делить на 0 нельзя!

    1. й случай:

    X=5

    Y=2

    Z=4

    Пример 2.

    Найти минимальное из двух введенных A и B.

    Решение:

    PREDICATES

    min(integer,integer,integer)

    CLAUSES

    min(A,B,A):-A<=B,!.

    min(A,B,B).

    GOAL

    Write("A="),readreal(A),Write("B="),readreal(B), min(A,B,Min),write("min=",Min),nl.

    Результат выполнения программы:

    1. й случай:

    A=5

    B=17

    min=5

    1. й случай:

    A=35

    B=18

    min=18

    1. й случай:

    A=8

    B=8

    min=8

    Пример 3.

    Определить, является четным или нечетным случайным образом выбранное число от 0 до 20.

    Решение:

    PREDICATES

    chet

    CLAUSES

    chet:-random(20,X),write(X),X mod 2=0, write(" - четное"),!.

    chet:-write( " - нечетное").

    GOAL

    chet.

    Результат выполнения программы:

    1. й случай:

    6 - четное

    1. й случай:

    19 - нечетное

    Рекурсивная процедура - это процедура, вызывающая сама себя до тех пор, пока не будет соблюдено некоторое условие, которое остановит рекурсию. Такое условие называют граничным. Рекурсия в ПРОЛОГе используется для организации повторяющихся действий.

    Рекурсивное правило всегда состоит по крайней мере из двух частей, одна из которых является нерекурсивной. Она и определяет граничное условие.

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

    Рекурсия является эффективным способом для решения задач, содержащих в себе подзадачу такого же типа.

    Пример 4. Вычисление факториала.

    Решение:

    PREDICATES

    fact(integer,integer)


    % Факториал нуля равен единице


    % уменьшаем N на единицу,

    % вычисляем факториал нового числа,

    % а затем умножает его на N

    CLAUSES

    fact(0,1):-!. fact(N,F):- N1=N-1,

    fact(N1,F1), F=N*F1. GOAL

    write("N="),readint(N),fact(N,F),write("F=",F),nl.

    Результат выполнения программы:

    1. й случай:

    N=0

    F=1

    1. й случай:

    N=1

    F=1

    1. й случай:

    N=4

    F=24

    Пример 5

    Составить программу для вычисления Y=Xn, X, n - целые числа

    Решение:

    Составим правило stepen, состоящее из 3-х частей.

    1. я часть правила (нерекурсивная) определяет, что Х0=1.

    2. я часть правила (рекурсивная) вычисляет Xn для положительного n.

    3. я часть (рекурсивная) - вычисляет Xn для отрицательного n (добавляется необходимое условие Х<>0)

    PREDICATES

    stepen(real,real,real)

    CLAUSES

    stepen(X,0,1):-!. stepen(X,N,Y):-N>0,N1=N-1,stepen(X,N1,Y1),Y=Y1*X,!. stepen(X,N,Y):-X<>0,K=-N,stepen(X,K,Z),Y=1/Z.

    GOAL

    write("X="),readreal(X),

    write("N="),readreal(N), stepen(X,N,Y),write("Y=",Y),nl.

    Результат выполнения программы:

    1. й случай:

    X=3

    N=2

    Y=9

    1. й случай:

    X=2

    N=-2

    Y=0.25

    ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

    1. Составить программу для вычисления значения выражения Y=(X2+1)/(X-2) для введенного X.

    2. Составить программу для вычисления значения выражения S=2(X2+Y2)/(X+Y) для введенных X и Y.

    3. Составить программу для вычисления значения выражения z=exsinx +3lnx для введенного X.

    4. Составить программу для вычисления значения выражения y ln(lg(sin\-exy)/u>i введенного X.

    5. Составить программу для проверки введенного натурального числа на четность.

    6. Составить программу для проверки попадает ли введенное число X в заданный промежуток [a,b].

    7. Составить программу для выбора наименьшего из трех введенных чисел.

    8. Составить программу для выбора наибольшего из трех введенных чисел.

    9. Вычислить сумму 1+2+3+...+N.

    10. Подсчитать сумму ряда целых четных чисел от 2 до N.

    11. Вычислить сумму ряда целых нечетных чисел от 1 до n.

    12. Найти значение произведения: 2*4*6*...*12

    13. Найти значение произведения: 1*3*5*...*11

    14. Вычислить значение n-го члена ряда Фибоначчи: f(0)=0, f(1)=1,

    f(n)=f(n-1)+f(n-2).

    1   2   3   4   5   6   7   8   9   10


    написать администратору сайта