voici une solution pascal aqui utilise 6 modules
je vous passerais une solution recursive ou il suffit à chaque fois de trouve la somme de deux fraction(les deux premiers couples seront remplacés par un nouveau couple qu'on lui ajoute le numéro trois et ainsi de suite...)
program fraction;
uses wincrt;
type
Tab=array[1..20] of integer;
var
num,den:tab;
vnum,vden,n,d:integer;
procedure saisie (var n:integer);
begin
writeln('saisie du nombre de fractions');
repeat
readln(n);
until n in [2..20];
end;
procedure remplir (var t1,t2:tab; n:integer);
var
c:integer;
begin
for c:= 1 to n do
begin
writeln('fraction N° : ', c:3);
writeln ('donnez le numérateur');
readln(T1[c]);
writeln ('donnez le dénominateur');
readln(T2[c])
end;
end;
function pgcd (a , b : integer ) : integer;
var
int:integer;
begin
repeat
if b=0
then pgcd:= a
else
begin
int := b;
b := a mod b;
a:= int;
pgcd:=pgcd(a,b);
end;
until b=0;
end;
procedure calcul (t1,t2:tab;n:integer;var vnum,vden:integer);
var c,int:integer;
begin
vden:=1;
for c:=1 to n do
vden := vden * T2[c] ;
vnum:=0;
for c:=1 to n do
vnum:=vnum + ((T1[c] * vden) div T2[c]);
int:=vnum;
vnum:=vnum div pgcd(vnum,vden);
vden:=vden div pgcd(int,vden);
end;
procedure affichage (a,b:integer);
begin
writeln('la fraction resultante est : ', vnum:3 , '/', vden)
end;
begin
saisie(n);
remplir (num,den, n);
calcul (num,den,n,vnum,vden);
affichage (vnum,vden);
end.