
14. Даны две дроби A/B и C/D (A,B,C,D-натуральные числа). Составить программу для вычитания из первой дроби второй. Реузультат должен быть несократимой дробью.
undefinedprogram program zadanie 3;
uses crt;
function nod(a,b:integer):integer;
begin
while a<>b do if a>b then a:=a-b else b:=b-a;
nod:=a;
end;
function nok(a,b:integer):integer;
begin
nok:=round((a*b)/nod(a,b));
end;
procedure minus(a,b,c,d:integer;var x,y:integer);
var m:integer;
begin
x:=a*(nok(b,d) div b)-c*(nok(b,d) div d);
y:=nok(b,d);
m:=nod(abs(x),y);
x:=x div m;
y:=y div m;
end;
var n1,n2,m1,m2,x,y:integer;
begin
clrscr;
write('Введите числитель первой дроби: ');readln(n1);
repeat
write('Введите знаменатель первой дроби: ');readln(n2);
until n2>0;
write('Введите числитель второй дроби: ');readln(m1);
repeat
write('Введите знаменатель второй дроби: ');readln(m2);
until m2>0;
minus(n1,n2,m1,m2,x,y);
clrscr;
if m1>=0 then writeln(n1,'/',n2,'-',m1,'/',m2,'=',x,'/',y) else
writeln(n1,'/',n2,'-(',m1,'/',m2,')=',x,'/',y);
readkey;
end.
if x<>0 then begin
m:=nod(abs(x),y);
x:=x div m;
y:=y div m; end;