Đề bài: viết chương trình nhập vào 2 phân số a/b , c/d với a/b lớn hơn c/d và không âm. Hãy tính các phép toán cộng, trừ, nhân, chia và xuất ra màn hình.
Lưu ý: kết quả phải tối giản.
Lời giải cộng trừ nhân chia phân số trong pascal
– Cơ sở đề mình viết các phép tính là do tính chất của toán học, xem hình để dễ hiểu hơn…

– ở code dưới đây mình sẽ ko chặn các trường hợp input cho ra kết quả vô nghĩa nên các bạn tự cải tiến nếu cần.
– ở phép tính chia, thật ra chỉ cần gọi procedure nhân rồi nghịch đảo lại là được, nhưng do xuất kết quả ở trong procedure luôn nên nó sẽ hiện dấu nhân, vì vậy mình sẽ viết lại cái khác.
– Để phân số có tính tối giản thì chỉ cần chia tử và mẫu cho ước chung lớn nhất của tử và mẫu.
– Nếu kết quả tu/mau có dạng tu/1 thì chỉ cần xuất tử. vì phân số có mẫu là 1 vô nghĩa.
….. còn ở phép nhân và chia, chỉ cần tử bằng 0 thì kết quả sẽ bằng 0.
Code cộng, trừ, nhân chia trong pascal
var
a,b,c,d:longint;
function ucln(a,b:longint):longint;
var r:longint;
begin
while a mod b <>0 do
begin
r:=a mod b;
a:=b;
b:=r;
end;
exit(b);
end;
procedure cong(a,b,c,d:longint);
var tu, mau,UC:longint;
begin
tu:=a*d+b*c;
mau:=b*d;
UC:=ucln(tu,mau);
tu:=tu div uc;
mau:=mau div uc;
if mau=1 then
writeln(a,'/',b,' + ',c,'/',d,' = ',tu)
else
writeln(a,'/',b,' + ',c,'/',d,' = ',tu,'/',mau);
end;
procedure tru(a,b,c,d:longint);
var tu, mau,UC:longint;
begin
tu:=a*d-b*c;
mau:=b*d;
UC:=ucln(tu,mau);
tu:=tu div uc;
mau:=mau div uc;
if mau=1 then
writeln(a,'/',b,' - ',c,'/',d,' = ',tu)
else
writeln(a,'/',b,' - ',c,'/',d,' = ',tu,'/',mau);
end;
procedure nhan(a,b,c,d:longint);
var tu, mau,UC:longint;
begin
tu:=a*c;
mau:=b*d;
UC:=ucln(tu,mau);
if tu=0 then
begin
writeln(a,'/',b,' * ',c,'/',d,' = ',0);
exit;
end;
tu:=tu div uc;
mau:=mau div uc;
if mau=1 then
writeln(a,'/',b,' * ',c,'/',d,' = ',tu)
else
writeln(a,'/',b,' * ',c,'/',d,' = ',tu,'/',mau);
end;
procedure chia(a,b,c,d:longint);
var tu, mau,UC:longint;
begin
tu:=a*d;
mau:=b*c;
UC:=ucln(tu,mau);
if tu=0 then
begin
writeln(a,'/',b,' : ',c,'/',d,' = ',0);
exit;
end;
tu:=tu div uc;
mau:=mau div uc;
if mau=1 then
writeln(a,'/',b,' : ',c,'/',d,' = ',tu)
else
writeln(a,'/',b,' : ',c,'/',d,' = ',tu,'/',mau);
end;
begin
read(a,b,c,d);
cong(a,b,c,d);
tru(a,b,c,d);
nhan(a,b,c,d);
chia(a,b,c,d);
readln;
readln;
end.