Дан массив А обыкновенных дробей, найти сумму всех дробей, результат вывести в виде несократимой дроби. Задачу решить через внешние подпрограммы:1) Сумма двух обыкновенных дробей;2) подпрограмма для сокращенных дробей — Pascal(Паскаль)

uses crt;
const max=20;
type
frac=record //тип дробь
     p:integer;//числитель
     q:1..maxint;//знаменатель
     end;
procedure Sokr(var a:frac); {Сокращение дроби}
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;
var q:integer;
begin
q:=Nod(abs(a.p),a.q);
a.p:=a.p div q;
a.q:=a.q div q;
end;
procedure Summa(a,b:frac;var c:frac);//сложение двух дробей
begin
c.p:=a.p*b.q+b.p*a.q;{вычисляемем числитель}
c.q:=a.q*b.q;
end;
var a:array[1..max] of frac;
    s:frac;
    n,i,j:integer;
begin
clrscr;
randomize;
repeat
write('Размер массива до ',max,' n=');
readln(n);
until n in [1..max];
writeln('Исходный массив дробей:');
for i:=1 to n do
   begin
     repeat
     a[i].p:=random(20)-5;
     until a[i].p<>0;//без нолей
     a[i].q:=random(10)+1;
     write(a[i].p,'/',a[i].q,'  ');
   end;
writeln;
for i:=1 to n-1 do
 begin
  Summa(a[i],a[i+1],s);//складываем 2 рядом
  a[i+1]:=s;//запоминаем сумму
 end;
Sokr(s);
write('Сумма=',s.p,'/',s.q);
readln
end.

Leave a Comment

32 − 28 =