Cộng Trừ Nhân Chia Phân Số Trong Pascal - Code24h

Đề 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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990vara,b,c,d:longint; functionucln(a,b:longint):longint;varr:longint;beginwhileamodb<>0dobeginr:=amodb;a:=b;b:=r;end;exit(b);end; procedure cong(a,b,c,d:longint);vartu,mau,UC:longint;begintu:=a*d+b*c;mau:=b*d;UC:=ucln(tu,mau);tu:=tu div uc;mau:=mau div uc;ifmau=1thenwriteln(a,'/',b,' + ',c,'/',d,' = ',tu)elsewriteln(a,'/',b,' + ',c,'/',d,' = ',tu,'/',mau);end; procedure tru(a,b,c,d:longint);vartu,mau,UC:longint;begintu:=a*d-b*c;mau:=b*d;UC:=ucln(tu,mau);tu:=tu div uc;mau:=mau div uc;ifmau=1thenwriteln(a,'/',b,' - ',c,'/',d,' = ',tu)elsewriteln(a,'/',b,' - ',c,'/',d,' = ',tu,'/',mau);end; procedure nhan(a,b,c,d:longint);vartu,mau,UC:longint;begintu:=a*c;mau:=b*d;UC:=ucln(tu,mau);iftu=0thenbeginwriteln(a,'/',b,' * ',c,'/',d,' = ',0);exit;end;tu:=tu div uc;mau:=mau div uc;ifmau=1thenwriteln(a,'/',b,' * ',c,'/',d,' = ',tu)elsewriteln(a,'/',b,' * ',c,'/',d,' = ',tu,'/',mau);end; procedure chia(a,b,c,d:longint);vartu,mau,UC:longint;begintu:=a*d;mau:=b*c;UC:=ucln(tu,mau);iftu=0thenbeginwriteln(a,'/',b,' : ',c,'/',d,' = ',0);exit;end;tu:=tu div uc;mau:=mau div uc;ifmau=1thenwriteln(a,'/',b,' : ',c,'/',d,' = ',tu)elsewriteln(a,'/',b,' : ',c,'/',d,' = ',tu,'/',mau);end; beginread(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.

Từ khóa » Dấu Cộng Trừ Nhân Chia Trong Pascal