АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Арифметические вычисления

Читайте также:
  1. Алгоритм криптографической системы на основе вычисления дискретных логарифмов в конечном поле – алгоритм Эль Гамаля.
  2. Арифметические выражения
  3. В приближенных вычислениях
  4. Ведомость увязки превышений высотно-теодолитного хода и вычисления отметок станций.
  5. Все письменные вычисления выполняются справа от уравнения.
  6. Вычисления площади части земельного участка
  7. Для вычисления сопротивления системы заземления в однородном грунте принимаем заземлитель – стержневой круглого сечения (трубчатый) в земле.
  8. Источники и классификация погрешностей. Структура полной погрешности. Методы оценки погрешностей вычисления.
  9. Лабораторная работа «Вычисления в WORD»
  10. Основные арифметические операторы и организация ветвлений в программах
  11. Порядок вычисления

Хотя Пролог не предназначен для решения вычислительных задач, его возможности вычислений аналогичны соответствующим возможностям таких языков программирования как Basic, C, Pascal.

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


Таблица 1. Математические операции и функции в Прологе

X + Y Сумма X и Y
X – Y Разность X и Y
X * Y Произведение X и Y
X / Y Деление X на Y
X mod Y Остаток от деления X на Y
X div Y Целочисленное деление X на Y
abs(X) Абсолютная величина числа X
sqrt(X) Квадратный корень из X
random(X) Случайное число в диапазоне от 0 до 1
random(Int,X) Случайное целое число в диапазоне от 0 до Int
round(X) Округление Х
trunc(X) Целая часть Х
sin(X) Синус X
cos(X) Косинус X
arctan(X) Арктангенс Х
tan(X) Тангенс X
ln(X) Натуральный логарифм X
log(X) Логарифм Х по основанию 10

Пример 1.

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

Решение:

PREDICATES

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

CLAUSES

знач_выраж(X,Y):-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 нельзя!

2-й случай:

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

2-й случай:

A=35

B=18

min=18

3-й случай:

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 – четное

2-й случай:

19 – нечетное


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

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(sinx+ex))для введенного X.

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

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

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

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

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

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

 

Отчет о выполненной самостоятельной работе должен содержать:

1) тему лабораторной работы;

2) условие задачи;

3) листинг программы;

4) результаты ее тестирования с различными исходными данными.

Рекурсия

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

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

Пример 1.

База данных содержит следующие факты:

roditel(ivan,oleg).

roditel(inna,oleg).

roditel(oleg,dima).

roditel(oleg,marina).


Составить рекурсивное правило предок и определить всех предков и их потомков.

Решение:

DOMAINS

name=string

PREDICATES

roditel(name,name)

predok(name,name)

CLAUSES

roditel(ivan,oleg).

roditel(inna,oleg).

roditel(oleg,dima).

roditel(oleg,marina).

predok(X,Z):-roditel(X,Z). % нерекурсивная часть правила

predok(X,Z):-roditel(X,Y), % рекурсивная часть правила

predok(Y,Z).

GOAL

predok(X,Y),

write("Рredok -",X," Еgo potomok-",Y),nl,fail.

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

Рredok -ivan Еgo potomok-oleg

Рredok -inna Еgo potomok-oleg

Рredok -oleg Еgo potomok-dima

Рredok -oleg Еgo potomok-marina

Рredok -ivan Еgo potomok-dima

Рredok -ivan Еgo potomok-marina

Рredok -inna Еgo potomok-dima

Рredok -inna Еgo potomok-marina

 

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

Решение:

PREDICATES

fact(integer,integer)

CLAUSES

fact(0,1):-!. % Факториал нуля равен единице

fact(N,F):- N1=N-1, % уменьшаем N на единицу,

fact(N1,F1), % вычисляем факториал нового числа,

F=N*F1. % а затем умножает его на N

GOAL

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

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

1-й случай:

N=0

F=1


2-й случай:

N=1

F=1

3-й случай:

N=4

F=24

 

Пример 3

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

Решение:

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

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

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

3-я часть (рекурсивная) - вычисляет Хn для отрицательного 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

2-й случай:

X=2

N=-2

Y=0.25

Пример 4. Ханойские башни

Имеется три стержня: A, B и C. На стержне А надеты N дисков разного диаметра, надетые друг на друга в порядке убывания диаметров. Необходимо переместить диски со стержня А на стержень С используя В как вспомогательный, если перекладывать можно только по одному диску и нельзя больший диск класть на меньший.

Решение:

Составим правило move, определяющее порядок переноса дисков.


1-я (нерекурсивная) часть правила определяет действие, если на стержне находится 1 диск.

2-я (рекурсивная) часть правила перемещает сначала верхние N-1 диск на стержень B, используя С как вспомогательный, затем оставшийся диск на стержень C и, наконец, диски со стержня B на C, используя А как вспомогательный.

PREDICATES

move(integer,char,char,char)

CLAUSES

move(1,A,B,C):-

write("Перенести диск с ",A," на ",C),nl,!.

move(N,A,B,C):-

M=N-1,move(M,A,C,B),

write("Перенести диск с ",A," на ",C),nl,

move(M,B,A,C).

GOAL

write("Ханойские башни"), nl,

write("Количество дисков:"), readint(N),nl,

move(N,'A','B','C').

 

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

Ханойские башни

Количество дисков:3

 

Перенести диск с A на C

Перенести диск с A на B

Перенести диск с C на B

Перенести диск с A на C

Перенести диск с B на A

Перенести диск с B на C

Перенести диск с A на C


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.016 сек.)