В 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 в новой строке отображаются результаты. Когда все показано, отображается строка с сообщением о конце вычислений.

                                                                       << предыдущий | следующий >>


2016-06-05 • Просмотров [ 292 ]