cộng trừ nhân chia phân số trong pascal
Đề 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 ...
Đề 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | 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. |