Proc47. Используя функцию NOD2 из задания Proc46, описать процедуру Frac1($$a$$, $$b$$, $$p$$, $$q$$), преобразующую дробь $$a/b$$ к несократимому виду $$p/q$$ (все параметры процедуры — целого типа, $$a$$ и $$b$$ — входные, $$p$$ и $$q$$ — выходные). Знак результирующей дроби $$p/q$$ приписывается числителю (то есть $$q > 0$$). С помощью Frac1 найти несократимые дроби, равные $$a/b + c/d, a/b + e/f, a/b + g/h$$ (числа $$a, b, c, d, e, f, g, h$$ даны).
Формулы:
$$\frac{a}{b}+\frac{c}{d}=\frac{a*d}{b*d}+\frac{c*b}{d*b}=\frac{a*d+c*b}{b*d}$$
$$\frac{a}{b}+\frac{e}{f}=\frac{a*f}{b*f}+\frac{e*b}{f*b}=\frac{a*f+e*b}{b*f}$$
$$\frac{a}{b}+\frac{g}{h}=\frac{a*h}{b*h}+\frac{g*b}{h*b}=\frac{a*h+g*b}{b*h}$$
Решение:
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 |
program Proc47; Function NOD2(A,B:Integer):Integer; begin while (A<>0) and (B<>0) do begin if a>b then A:=(a mod b) else B:=(B mod A); end; NOD2:=A+B; end; Procedure Frac1(a,b:integer;var p,q:integer); begin p:=a div NOD2(a,b); q:=b div NOD2(a,b); end; var A, B, C, D, E, F, G, H, rez1,rez2: integer; begin Write('A :'); Readln(A); Write('B :'); Readln(B); Frac1(a,b,rez1,rez2); Writeln(Rez1,'/',Rez2); Write('C :'); Readln(C); Write('D :'); Readln(D); Write('E :'); Readln(E); Write('F :'); Readln(F); Write('G :'); Readln(G); Write('H :'); Readln(H); Frac1(a*d+c*b,b*d,rez1,rez2); Writeln(Rez1,'/',Rez2); Frac1(a*f+e*b,b*f,rez1,rez2); Writeln(Rez1,'/',Rez2); Frac1(a*h+g*b,b*h,rez1,rez2); Writeln(Rez1,'/',Rez2); Readln; end. |
Другие задачи из раздела Proc можно посмотреть здесь.
Для учета знака результата (см. условие) необходимо брать абсолютные значения