Лабораторный практикум пролог. Методические рекомендации по дисциплине Анализ данных
Скачать 311.21 Kb.
|
Пример 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 - предикат для ввода действительных чисел Результат выполнения программы: й случай: X=4 Y=4 Делить на 0 нельзя! й случай: 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. Результат выполнения программы: й случай: A=5 B=17 min=5 й случай: A=35 B=18 min=18 й случай: 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. Результат выполнения программы: й случай: 6 - четное й случай: 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. Результат выполнения программы: й случай: N=0 F=1 й случай: N=1 F=1 й случай: N=4 F=24 Пример 5 Составить программу для вычисления Y=Xn, X, n - целые числа Решение: Составим правило stepen, состоящее из 3-х частей. я часть правила (нерекурсивная) определяет, что Х0=1. я часть правила (рекурсивная) вычисляет Xn для положительного n. я часть (рекурсивная) - вычисляет 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. Результат выполнения программы: й случай: X=3 N=2 Y=9 й случай: X=2 N=-2 Y=0.25 ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ Составить программу для вычисления значения выражения Y=(X2+1)/(X-2) для введенного X. Составить программу для вычисления значения выражения S=2(X2+Y2)/(X+Y) для введенных X и Y. Составить программу для вычисления значения выражения z=exsinx +3lnx для введенного X. Составить программу для вычисления значения выражения y ln(lg(sin\-exy)/u>i введенного X. Составить программу для проверки введенного натурального числа на четность. Составить программу для проверки попадает ли введенное число X в заданный промежуток [a,b]. Составить программу для выбора наименьшего из трех введенных чисел. Составить программу для выбора наибольшего из трех введенных чисел. Вычислить сумму 1+2+3+...+N. Подсчитать сумму ряда целых четных чисел от 2 до N. Вычислить сумму ряда целых нечетных чисел от 1 до n. Найти значение произведения: 2*4*6*...*12 Найти значение произведения: 1*3*5*...*11 Вычислить значение n-го члена ряда Фибоначчи: f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2). |