Trở về đầu
Đề bài: Cài đặt phép tính cộng, trừ, nhân, chia đối với hai phân số.
Mời các bạn download tại: Click here
{$MODE OBJFPC}
uses crt, sysutils;
type PhanSo = record
tuso, mauso: integer;
end;
var ps1, ps2, ketqua: PhanSo;
procedure Nhap(var ps: PhanSo);
begin
with ps do
begin
write(' - Nhap Tu so : '); readln(tuso);
write(' - Nhap Mau so: '); readln(mauso);
if mauso = 0 then raise EDivByZero.create('Loi chia cho 0');
end;
end;
function min2(a, b: integer): integer;
begin
if a < b then exit(a)
else exit(b);
end;
function UCLN(a, b: integer): integer;
var i, minx: integer;
begin
minx:= min2(a, b);
for i:=minx downto 1 do
if (a mod i =0) and (b mod i = 0) then
exit(i);
end;
function Nhan(ps1, ps2: PhanSo):PhanSo;
var ab,cd,gtucln:integer;
ketqua: PhanSo;
begin
ab:=ps1.tuso*ps2.tuso;
cd:=ps1.mauso*ps2.mauso;
gtucln:= UCLN(ab, cd);
with ketqua do
begin
tuso:= ab div gtucln;
mauso:= cd div gtucln;
exit(ketqua);
end;
end;
function Chia(ps1, ps2: PhanSo):PhanSo;
var ab,cd,gtucln:integer;
ketqua: PhanSo;
begin
ab:=ps1.tuso*ps2.mauso;
cd:=ps1.mauso*ps2.tuso;
gtucln:= UCLN(ab, cd);
with ketqua do
begin
tuso:= ab div gtucln;
mauso:= cd div gtucln;
if mauso = 0 then
raise EDivByZero.create('Loi chia cho 0');
exit(ketqua);
end;
end;
function Cong(ps1, ps2: PhanSo):PhanSo;
var ab,cd,gtucln:integer;
ketqua: PhanSo;
begin
ab:=ps1.tuso*ps2.mauso + ps2.tuso*ps1.mauso;
cd:=ps1.mauso*ps2.mauso;
gtucln:= UCLN(ab, cd);
with ketqua do
begin
tuso:= ab div gtucln;
mauso:= cd div gtucln;
exit(ketqua);
end;
end;
function Tru(ps1, ps2: PhanSo):PhanSo;
var ab,cd,gtucln:integer;
ketqua: PhanSo;
begin
ab:=ps1.tuso*ps2.mauso - ps2.tuso*ps1.mauso;
cd:=ps1.mauso*ps2.mauso;
gtucln:= UCLN(ab, cd);
with ketqua do
begin
tuso:= ab div gtucln;
mauso:= cd div gtucln;
exit(ketqua);
end;
end;
BEGIN
CLRSCR;
try
writeln('Nhap phan so thu 1: '); Nhap(ps1);
writeln('Nhap phan so thu 2: '); Nhap(ps2);
ketqua:= Cong(ps1, ps2);
writeln(ps1.tuso, '/', ps1.mauso, ' + ', ps2.tuso, '/', ps2.mauso,
' = ', ketqua.tuso, '/', ketqua.mauso);
ketqua:= Tru(ps1, ps2);
writeln(ps1.tuso, '/', ps1.mauso, ' - ', ps2.tuso, '/', ps2.mauso,
' = ', ketqua.tuso, '/', ketqua.mauso);
ketqua:= Nhan(ps1, ps2);
writeln(ps1.tuso, '/', ps1.mauso, ' * ', ps2.tuso, '/', ps2.mauso,
' = ', ketqua.tuso, '/', ketqua.mauso);
ketqua:= Chia(ps1, ps2);
writeln(ps1.tuso, '/', ps1.mauso, ' : ', ps2.tuso, '/', ps2.mauso,
' = ', ketqua.tuso, '/', ketqua.mauso);
except
on e: EDivByZero do writeln(e.message);
end;
READLN;
END.