Модуль для вычисления логарифма - Free Pascal
Формулировка задачи:
Создать свой модуль для вычисления логарифма числа и программу, проверяющую работоспособность модуля: вычисление значений функции , где x, y вводятся с клавиатуры.
Решение задачи: «Модуль для вычисления логарифма»
textual
Листинг программы
unit myunit;
{$mode objfpc}{$H+}
interface
function lg(const t:double):double;
function fact(const t:qword):qword;
implementation
function lg(const t:double):double;
var res:double;
begin
{$ASMMODE Intel}
asm
finit
fldlg2
fld qword ptr t
fyl2x
fst res
end;
lg:=res;
end;
function fact(const t:qword):qword;
begin
if t=1 then fact:=1
else fact:=fact(t-1)*t;
end;
end.
Объяснение кода листинга программы
- В данном коде написаны две функции:
lgиfact. - Функция
lgпринимает на вход число типа double и возвращает число типа double. - Внутри функции
lgобъявлена переменнаяresтипа double. - Далее идет блок ассемблерного кода, который вычисляет логарифм числа
tс основанием 2. - После блока ассемблерного кода следует присваивание значения переменной
resпеременнойlg. - Функция
factпринимает на вход число типа qword и возвращает число типа qword. - Внутри функции
factиспользуется условный оператор if-else для определения последовательности вычисления факториала числаt. - Если
tравно 1, то функция возвращает 1. - Если
tбольше 1, то функция вызывает саму себя, передавая в качестве аргументаt-1, и результат умножает наt. - В конце функции
factвозвращается результат вычисления факториала числаt. - В конце модуля следует завершающая часть кода, которая включает в себя вызов функции
factс аргументом 5. - Значение, возвращаемое функцией
factпри вызове, присваивается переменнойres. - Результат вычисления функции
lgпри вызове, присваивается переменнойres. - Код завершается.