Trở về đầu

foto1 foto2 foto3 foto4 foto5
Nguyễn Tô Sơn - Giảng viên Đại học Sư phạm Hà Nội. SĐT: 091.333.2869

HỌC TIN CÙNG THỦ KHOA

Thành tích hôm nay, Thành công ngày mai !

Tìm kiếm

Đề bài: Cài đặt phép tính cộng, trừ, nhân, chia đối với hai phân số.

Mời các bạn download tại: Click here

{$MODE OBJFPC}
uses crt, sysutils;
type PhanSo = record
                tuso, mauso: integer;
              end;
var ps1, ps2, ketqua: PhanSo;

procedure Nhap(var ps: PhanSo);
begin
     with ps do
     begin
        write('   - Nhap Tu so : '); readln(tuso);
        write('   - Nhap Mau so: '); readln(mauso);
        if mauso = 0 then raise EDivByZero.create('Loi chia cho 0');
     end;
end;

function min2(a, b: integer): integer;
begin
        if a < b then exit(a)
                else exit(b);
end;

function UCLN(a, b: integer): integer;
var i, minx: integer;
begin
        minx:= min2(a, b);
        for i:=minx downto 1 do
                if (a mod i =0) and (b mod i = 0) then
                        exit(i);

end;

function Nhan(ps1, ps2: PhanSo):PhanSo;
var ab,cd,gtucln:integer;
    ketqua: PhanSo;
begin
        ab:=ps1.tuso*ps2.tuso;
        cd:=ps1.mauso*ps2.mauso;

        gtucln:= UCLN(ab, cd);
        with ketqua do
        begin
                tuso:=  ab div gtucln;
                mauso:= cd div gtucln;
                exit(ketqua);
        end;
end;

function Chia(ps1, ps2: PhanSo):PhanSo;
var ab,cd,gtucln:integer;
    ketqua: PhanSo;
begin
        ab:=ps1.tuso*ps2.mauso;
        cd:=ps1.mauso*ps2.tuso;

        gtucln:= UCLN(ab, cd);

        with ketqua do
        begin
                tuso:=  ab div gtucln;
                mauso:= cd div gtucln;
                if mauso = 0 then
                        raise EDivByZero.create('Loi chia cho 0');

                exit(ketqua);
        end;
end;

function Cong(ps1, ps2: PhanSo):PhanSo;
var ab,cd,gtucln:integer;
    ketqua: PhanSo;
begin
        ab:=ps1.tuso*ps2.mauso + ps2.tuso*ps1.mauso;
        cd:=ps1.mauso*ps2.mauso;

        gtucln:= UCLN(ab, cd);
        with ketqua do
        begin
                tuso:=  ab div gtucln;
                mauso:= cd div gtucln;
                exit(ketqua);
        end;
end;

function Tru(ps1, ps2: PhanSo):PhanSo;
var ab,cd,gtucln:integer;
    ketqua: PhanSo;
begin
        ab:=ps1.tuso*ps2.mauso - ps2.tuso*ps1.mauso;
        cd:=ps1.mauso*ps2.mauso;

        gtucln:= UCLN(ab, cd);
        with ketqua do
        begin
                tuso:=  ab div gtucln;
                mauso:= cd div gtucln;
                exit(ketqua);
        end;
end;

BEGIN
        CLRSCR;
        try
                writeln('Nhap phan so thu 1: '); Nhap(ps1);
                writeln('Nhap phan so thu 2: '); Nhap(ps2);
                ketqua:= Cong(ps1, ps2);
                writeln(ps1.tuso, '/', ps1.mauso, ' + ', ps2.tuso, '/', ps2.mauso,
                        ' = ', ketqua.tuso, '/', ketqua.mauso);

                ketqua:= Tru(ps1, ps2);
                writeln(ps1.tuso, '/', ps1.mauso, ' - ', ps2.tuso, '/', ps2.mauso,
                        ' = ', ketqua.tuso, '/', ketqua.mauso);

                ketqua:= Nhan(ps1, ps2);
                writeln(ps1.tuso, '/', ps1.mauso, ' * ', ps2.tuso, '/', ps2.mauso,
                        ' = ', ketqua.tuso, '/', ketqua.mauso);

                ketqua:= Chia(ps1, ps2);
                writeln(ps1.tuso, '/', ps1.mauso, ' : ', ps2.tuso, '/', ps2.mauso,
                        ' = ', ketqua.tuso, '/', ketqua.mauso);
        except
                on e: EDivByZero do writeln(e.message);
        end;
        READLN;
END.

Bản quyền thuộc về Nguyễn Tô Sơn, Đại học Sư phạm Hà Nội. Điện thoại: 091.333.2869