var a_1,a_2,b_1,b_2,p,q:integer;
function NOD(a:integer; b:integer):integer;
begin
while(a<>0) and (b<>0) do
if a>=b then a:=a mod b
else b:=b mod a;
NOD:=a+b;
end;
function NOK (A: integer; B: integer): integer;
begin
NOK := (a * b) div NOD (a, b);
end;
procedure Socr(a,b:integer; var p,q:integer);
begin
if a=b then begin
p:=1;
q:=1;
end
else if NOD (a, b)<>1 then
begin
p:=a div NOD(a, b);
q:=b div NOD(a, b);
end
else Writeln ('дробь несократима');
end;
begin
a_1:=1;
a_2:=1;
b_1:=1;
for b_2:=2 to 21 do
begin
a_1:=(NOK(b_1, b_2) div b_1)*a_1;
a_1:=a_1+((NOK(b_1, b_2) div b_2)*a_2);
b_1:=NOK(b_1, b_2);
end;
writeln (a_1,'/',b_1);
Socr(a_1,b_1,p,q);
Writeln (p,'/',q);
readln;
end.
посмотрите, please, правильно?