Code:
{Chu y: Moi ham deu tao ra mot bien dong moi lam ket qua tra ve}
{dat tham so xoa bang true de xoa tham so gui vao }
uses crt;
type phanso= record
tu, mau: longint;
end;
pphanso=^phanso;
function toigian(p1: pphanso; xoa: boolean): pphanso;
var p: pphanso;
a, b, t, uoc: longint;
begin
{Thuat toan OClit tim uoc so chung nho nhat}
a:= abs(p1^.tu);
b:= abs(p1^.mau);
repeat
if a< b then
begin
t:= a; a:= b; b:= t;
end;
a:= a-b;
until a=0;
uoc:= b;
new(p);
p^.tu:= p1^.tu div uoc;
p^.mau:= p1^.mau div uoc;
{Toi gian ve dau, dat dau tru tren tu so}
if p^.mau<0 then
begin
p^.tu:= -p^.tu;
p^.mau:= -p^.mau;
end;
toigian:= p;
if xoa then begin dispose(p1); end;
end;
function cong(p1, p2: pphanso; xoa: boolean): pphanso;
var p: pphanso;
begin
new(p);
if p1^.mau= p2^.mau then
begin
p^.tu:= p1^.tu + p2^.tu;
p^.mau:= p1^.mau;
end
else
begin
p^.tu:= p1^.tu* p2^.mau+p2^.tu*p1^.mau;
p^.mau:= p1^.mau* p2^.mau;
end;
cong:= toigian(p, false);
dispose(p);
if xoa then begin dispose(p1); dispose(p2); end;
end;
function tru(p1, p2: pphanso; xoa: boolean): pphanso;
var p: pphanso;
begin
new(p);
if p1^.mau= p2^.mau then
begin
p^.tu:= p1^.tu - p2^.tu;
p^.mau:= p1^.mau;
end
else
begin
p^.tu:= p1^.tu* p2^.mau - p2^.tu*p1^.mau;
p^.mau:= p1^.mau * p2^.mau;
end;
tru:= toigian(p, false);
dispose(p);
if xoa then begin dispose(p1); dispose(p2); end;
end;
function nhan(p1, p2: pphanso; xoa: boolean): pphanso;
var p: pphanso;
begin
new(p);
p^.tu:= p1^.tu* p2^.tu;
p^.mau:= p1^.mau * p2^.mau;
nhan:= toigian(p, false);
dispose(p);
if xoa then begin dispose(p1); dispose(p2); end;
end;
function nghichdao(p1: pphanso; xoa: boolean): pphanso;
var p: pphanso;
begin
new(p);
p^.tu:= p1^.mau;
p^.mau:= p1^.tu;
nghichdao:= p;
if xoa then begin dispose(p1); end;
end;
function chia(p1, p2: pphanso; xoa: boolean): pphanso;
var p: pphanso;
begin
p:= nhan(p1, nghichdao(p2, false), false);
chia:= p;
if xoa then begin dispose(p1); dispose(p2); end;
end;
var p1, p2,p, pmark: pphanso;
ans: char;
begin
Mark(pmark);
repeat
clrscr;
new(p1); new(p2);
write('Nhap tu so va mau so cho phan so 1 (2 3 nghia la 2/3): '); readln(p1^.tu, p1^.mau);
write('Nhap tu so va mau so cho phan so 2 (2 3 nghia la 2/3): '); readln(p2^.tu, p2^.mau);
p1:= toigian(p1,false); p2:= toigian(p2,false);
writeln('Thuc hien phep tinh cong phan so 1 voi phan so 2: ');
p:= cong(p1, p2, false);
writeln(p1^.tu,' / ', p1^.mau, ' + ', p2^.tu,' / ', p2^.mau,' = ', p^.tu, ' / ', p^.mau );
writeln('Thuc hien phep tinh tru phan so 1 voi phan so 2: ');
p:= tru(p1, p2, false);
writeln(p1^.tu,' / ', p1^.mau, ' - ', p2^.tu,' / ', p2^.mau,' = ', p^.tu, ' / ', p^.mau );
writeln('Thuc hien phep tinh nhan phan so 1 voi phan so 2: ');
p:= nhan(p1, p2, false);
writeln(p1^.tu,' / ', p1^.mau, ' * ', p2^.tu,' / ', p2^.mau,' = ', p^.tu, ' / ', p^.mau );
writeln('Thuc hien phep tinh nghich dao phan so 1 : ');
p:= nghichdao(p1, false);
writeln(p1^.tu,' / ', p1^.mau, ' ^ (-1)',' = ', p^.tu, ' / ', p^.mau );
writeln('Thuc hien phep tinh nhan phan so 1 voi phan so 2: ');
p:= chia(p1, p2, false);
writeln('(',p1^.tu,' / ', p1^.mau,')', ' / ', '(',p2^.tu,' / ', p2^.mau,')',' = ', p^.tu, ' / ', p^.mau );
write('Ban co muon thuc hien phep tinh khac khong (c/k): '); ans:= readkey;
until upcase(ans)= 'K';
release(pmark);
end.