Программа для работы с дробями, написанная с использованием процедур и функций
program Drob;
var a_ch, a_zn, b_ch, b_zn, res_ch, res_zn:integer; //Переменные описывающие числитель и знаменатель
//Функция для нахождения наибольшего общего делителя двух чисел - a и b
function NOD(a,b:integer):integer;
begin
while a<>b do //Вычисляем значени НОД по алгоритму Евклида
begin
if a>b then a:=a-b
else b:=b-a;
end;
NOD:=a;
end;
// Процедура сокращения дроби ch/zn
procedure dSokr(var ch,zn:integer);
var t:integer; //объявим локальную переменную
begin
t:=NOD(ch,zn);
ch:=ch div t;
zn:=zn div t;
end;
// Процедура сложения двух дробей ch1/zn1 + ch2/zn2
procedure dSum(ch1,zn1,ch2,zn2:integer; var res_ch,res_zn:integer);
begin
res_ch:=ch1*zn2+ch2*zn1;
res_zn:=zn1*zn2;
dSokr(res_ch,res_zn); // Сокращаем полученную дробь
end;
// Процедура умножения дробей ch1/zn1 * ch2/zn2
procedure dMult(ch1,zn1,ch2,zn2:integer; var res_ch,res_zn:integer);
begin
res_ch:=ch1*ch2;
res_zn:=zn1*zn2;
dSokr(res_ch,res_zn); // Сокращаем полученную дробь
end;
// Процедура вычитания дробей ch1/zn1 - ch2/zn2
procedure dMinus(ch1,zn1,ch2,zn2:integer; var res_ch,res_zn:integer);
begin
res_ch:=ch1*zn2-ch2*zn1;
res_zn:=zn1*zn2;
dSokr(res_ch,res_zn); // Сокращаем полученную дробь
end;
// Процедура деления дробей ch1/zn1 : ch2/zn2
procedure dDiv(ch1,zn1,ch2,zn2:integer; var res_ch,res_zn:integer);
begin
res_ch:=ch1*ch2;
res_zn:=zn1*zn2;
dSokr(res_ch,res_zn); // Сокращаем полученную дробь
end;
// Проверка дроби - правильная или нет
function IsCorrect(ch,zn:integer):boolean;
begin
if ch>=zn then IsCorrect:=false
else IsCorrect:=true;
end;
// Функция возвращает целую часть дроби
function GetIntPart(ch,zn:integer):integer;
begin
GetIntPart:=ch div zn;
end;
// Начинается главная часть програмы
// Вычислим значение выражения
// a_ch/a_zn = 2/3 + 5/7 * 4/6
// b_ch/b_zn = 5/6 * 7/8 - 1/12
// res = a:b
begin
dMult(5,7, 4,6, a_ch,a_zn);
dSum(2,3, a_ch,a_zn, a_ch,a_zn);
dMult(5,6, 7,8, b_ch,b_zn);
dMinus(b_ch,b_zn, 1,12, b_ch,b_zn);
dDiv(a_ch,a_zn, b_ch,b_zn, res_ch,res_zn);
writeln('Результат вычисления: ', res_ch,'/',res_zn);
end.
program Drob;
var a_ch, a_zn, b_ch, b_zn, res_ch, res_zn:integer; //Переменные описывающие числитель и знаменатель
//Функция для нахождения наибольшего общего делителя двух чисел - a и b
function NOD(a,b:integer):integer;
begin
while a<>b do //Вычисляем значени НОД по алгоритму Евклида
begin
if a>b then a:=a-b
else b:=b-a;
end;
NOD:=a;
end;
// Процедура сокращения дроби ch/zn
procedure dSokr(var ch,zn:integer);
var t:integer; //объявим локальную переменную
begin
t:=NOD(ch,zn);
ch:=ch div t;
zn:=zn div t;
end;
// Процедура сложения двух дробей ch1/zn1 + ch2/zn2
procedure dSum(ch1,zn1,ch2,zn2:integer; var res_ch,res_zn:integer);
begin
res_ch:=ch1*zn2+ch2*zn1;
res_zn:=zn1*zn2;
dSokr(res_ch,res_zn); // Сокращаем полученную дробь
end;
// Процедура умножения дробей ch1/zn1 * ch2/zn2
procedure dMult(ch1,zn1,ch2,zn2:integer; var res_ch,res_zn:integer);
begin
res_ch:=ch1*ch2;
res_zn:=zn1*zn2;
dSokr(res_ch,res_zn); // Сокращаем полученную дробь
end;
// Процедура вычитания дробей ch1/zn1 - ch2/zn2
procedure dMinus(ch1,zn1,ch2,zn2:integer; var res_ch,res_zn:integer);
begin
res_ch:=ch1*zn2-ch2*zn1;
res_zn:=zn1*zn2;
dSokr(res_ch,res_zn); // Сокращаем полученную дробь
end;
// Процедура деления дробей ch1/zn1 : ch2/zn2
procedure dDiv(ch1,zn1,ch2,zn2:integer; var res_ch,res_zn:integer);
begin
res_ch:=ch1*ch2;
res_zn:=zn1*zn2;
dSokr(res_ch,res_zn); // Сокращаем полученную дробь
end;
// Проверка дроби - правильная или нет
function IsCorrect(ch,zn:integer):boolean;
begin
if ch>=zn then IsCorrect:=false
else IsCorrect:=true;
end;
// Функция возвращает целую часть дроби
function GetIntPart(ch,zn:integer):integer;
begin
GetIntPart:=ch div zn;
end;
// Начинается главная часть програмы
// Вычислим значение выражения
// a_ch/a_zn = 2/3 + 5/7 * 4/6
// b_ch/b_zn = 5/6 * 7/8 - 1/12
// res = a:b
begin
dMult(5,7, 4,6, a_ch,a_zn);
dSum(2,3, a_ch,a_zn, a_ch,a_zn);
dMult(5,6, 7,8, b_ch,b_zn);
dMinus(b_ch,b_zn, 1,12, b_ch,b_zn);
dDiv(a_ch,a_zn, b_ch,b_zn, res_ch,res_zn);
writeln('Результат вычисления: ', res_ch,'/',res_zn);
end.
Комментариев нет:
Отправить комментарий