Đề 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.