В Prolog, как и в других языках программирования, есть класс математических операций Math. В классе определены группы функций:
• алгебраические;
• тригонометрические;
• базовые функции.
Алгебра
Рассмотрим пример с группой алгебраических функций.
Создадим новый консольный проект и назовем его «math_algebra». В файл main.pro добавим следующий код:
implement main
open core, console
clauses
run() :-
init(),
write("X = "), ;X = read(),
write("Y = "), Y = read(), nl,
write("Исходные числа ", X, "и ", Y), nl, nl, _= readLine(),
write("Операции с числами: ", X,"и ", Y), nl, _= readLine(),
Z = X + Y,
write("Сумма: ", X, " + ", Y, " = ", Z), _= readLine(),
Z1 = X - Y,
write("Разность: ", X, " - " Y, " = ", Z1), _= readLine(),
Z2 = X * Y,
write("Произведение: ", X, " * ", Y, " = ", Z2), _= readLine(),
Z3 = X / Y,
write("Частное: ", X, " / ", Y, " = ", Z3), _= readLine(),
Z4 = X ^ Y,
write("Степень: ", X, " ^ ", Y, " = ", Z4), nl, _= readLine(),
write("Деления с выделением целого и остатка: ", X," и ",Y), nl,
_= readLine(),
Z5 = X div Y,
write("Целая часть с округлением к минусу: ", X, " div ", Y, " = ", Z5),
_= readLine(),
Z6 = X mod Y,
write("Остаток с округлением к минусу: ", X, " mod ", Y, " = ", Z6),
_= readLine(),
Z7 = X quot Y,
write("Целая часть с округлением к 0: ", X, " quot ", Y, " = ", Z7),
_= readLine(),
Z8 = X rem Y,
write("Остаток с округлением к 0: ", X, " rem ", Y, " = ", Z8),
_= readLine(), nl,
write("Конец, Нажмите: Enter"), _= readLine(). % Ждем Enter
end implement main
goal
mainExe::run(main::run).
В примере выполняются разные математические операции над двумя операндами X и Y, такие как:
• суммирование (+);
• нахождение разности (-);
• произведение чисел (*);
• частное деление (/);
• возведение в степень (^);
• нахождение целой части числа с округлением к минусу (div);
• нахождение остатка от деления с округлением к минусу (mod);
• нахождение целой части с округлением к 0 (quot);
• нахождение остатка от деления с округлением к 0 (rem).
После запуска программы появляется окно консоли с именем первого аргумента «X =» в первой строке. После его ввода пользователю необходимо нажать Enter. В следующей строке появляется имя второго аргумента «Y =» и т. д. Далее при каждом нажатии Enter в новой строке отображаются результаты работы программы. Когда все строки показано, отображается строка с сообщением о конце вычислений.
Тригонометрия
Перейдём к рассмотрению примера использования группы тригонометрических функций.
Создадим консольное приложение и назовем его, например, «math_trigonometriya». После в файл main.pro добавим такой код:
implement main
open core, console, math
clauses
run() :-
init(),
write("X градусы = "), X0 = read(),
X = X0 / 180 * pi, nl, % Перевод в радианы
write("X в градусах и радианах ",X0," и ",X), nl, nl, _= readLine(),
Z=sin(X),
write("Синус от ",X0," градусов = ", Z), _= readLine(),
Z10 = arcsin(Z),
Z1 = Z10 * 180 / pi, % Перевод в градусы
write("Арксинус от: ", Z, " = ", Z1, " градусов"), _= readLine(),
Z2 = cos(X),
write("Косинус от ", X0, " градусов = ", Z2), _= readLine(),
Z30 = arccos(Z2),
Z3 = Z30 * 180 / pi, % Перевод в градусы
write("Арккосинус от ", Z2, " = ", Z3, " градусов"), _= readLine(),
Z4 = tan(X),
write("Тангенс от ", X0, " градусов = ", Z4), _= readLine(),
Z50 = arctan(Z4),
Z5 = Z50 * 180 / pi, % Перевод в градусы
write("Арктангенс от ", Z4, " = ", Z5, " градусов"), nl,nl,
write("Конец. Нажмите Enter"), _= readLine().
end implement main
goal
mainExe::run(main::run).
Внимание! Для того, чтобы работали встроенные функции класса Math необходимо во фрагменте заголовка (строка open core, console) открыть этот класс дописав в строку math.
В примере выполняются прямые и обратные тригонометрические функции с операндом X в градусах, а именно:
• синус (sin) и арксинус (arcsin);
• косинус (cos) и арккосинус (arccos);
• тангенс (tan) и арктангенс (arctan).
После запуска программы появляется окно консоли с именем аргумента «X градусы» в первой строке. Пользователю необходимо ввести значение в градусах и нажать Enter. Далее при каждом нажатии Enter в новой строке отображаются результаты. Когда все показано, отображается строка с сообщением о конце вычислений.
Базовые функции
В следующем примере рассмотрим группу базовых функций.
Создадим новый проект и назовем его «math_basic». После этого в файл main.pro добавим такой код:
implement main
open core, console, math
clauses
run():-
init(),
write("Базовые функции класса math "), nl, nl,
write("Отрицательное X = "), X = read(),
write("Положительное Y = "), Y = read(), nl,
write("Исходные числа ",X," и ",Y), nl, nl, _= readLine(),
Z = abs(X),
write("Абсолютное значение abs(",X,") = ", Z), _= readLine(),
Z1 = sqrt(Y),
write("Квадратный корень из ", Y, " = ", Z1), _= readLine(),
Z2 = sqr(X),
write("Квадрат ", X, " = ", Z2), _= readLine(),
Z3 = max(X,Y),
Z4 = min(X,Y),
write("Минимальное min(", X, ",", Y, ") = ", Z4), _= readLine(),
Z5 = ln(Y),
write("Натуральный логарифм ln(", Y, ") = ", Z5), _= readLine(),
Z6 = log(Y),
Z7 = exp(X),
write("Экспонента, exp(", X, ") = ", Z7), _= readLine(), nl,
write("Конец. Нажмите Enter "),
_= readLine(),nl.
end implement main
goal
mainExe::run(main::run).
В данном примере выполняются базовые функции с отрицательным операндом X и положительным операндом Y, такие как:
• нахождение модуля числа (abs);
• квадратный корень числа (sqrt);
• поднесение числа в квадрат (sqr);
• нахождение максимального числа (max);
• минимального числа (min);
• натуральный логарифм числа (ln);
• десятичный логарифм (log);
• нахождение экспоненты (exp).
После запуска проекта появляется окно консоли с заголовком и приглашениями ввода отрицательного операнда X и положительного операнда Y. Далее как в предыдущих примерах, при каждом нажатии Enter в новой строке отображаются результаты. Когда все показано, отображается строка с сообщением о конце вычислений.