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.