program ulamki;
uses Crt;
var l1, m1, l2, m2, lr, mr, lil, mil, li, mi, l,m : integer;
procedure dane (var l1, m1:integer; nr:byte);
begin
write('Podaj licznik ',nr,' ulamka: ');
readln(l1);
write('Podaj mianownik ',nr,' ulamka: ');
readln(m1);
end;
function nwd(l1,m1:byte):byte;
var r:integer;
begin
if l1<>m1 then
begin
if l1>m1 then
begin
repeat
r:=l1 mod m1;
l1:=m1;
m1:=r;
nwd:=l1;
until m1=0;
end else
begin
repeat
r:=m1 mod l1;
m1:=l1;
l1:=r;
nwd:=m1;
until l1=0;
end;
end else nwd:=l1;
end;
procedure suma (l1, m1, l2, m2 : integer; var l, m :integer);
var n:integer;
begin
l:=l1*m2+l2*m1;
m:=m1*m2;
n:=nwd(l,m);
l:=l div n;
m:=m div n;
end;
procedure roznica (l1, m1, l2, m2 : integer; var lr, mr :integer);
var n:integer;
begin
lr:=l1*m2-l2*m1;
mr:=m1*m2;
n:=nwd(lr,mr);
lr:=lr div n;
mr:=mr div n;
end;
procedure iloczyn (l1, m1, l2, m2 : integer; var li, mi :integer);
var n:integer;
begin
li:=l1*l2;
mi:=m1*m2;
n:=nwd(li,mi);
li:=li div n;
mi:=mi div n;
end;
procedure iloraz (l1, m1, l2, m2 : integer; var lil, mil :integer);
var n:integer;
begin
lil:=l1*m2;
mil:=l2*m1;
n:=nwd(lil,mil);
lil:=lil div n;
mil:=mil div n;
end;
procedure wypisz (l, m, lr, mr, li, mi, lil, mil :integer);
begin
writeln('Suma wynosi ',l,'/',m);
writeln('Roznica wynosi ',lr,'/',mr);
writeln('Iloczyn wynosi ',li,'/',mi);
writeln('Iloraz wynosi ',lil,'/',mil);
end;
begin
ClrScr;
dane(l1,m1,1);
dane(l2,m2,2);
suma(l1,m1,l2,m2,l,m);
roznica(l1,m1,l2,m2,lr,mr);
iloczyn(l1,m1,l2,m2,li,mi);
iloraz(l1,m1,l2,m2,lil,mil);
wypisz(l,m,lr,mr,li,mi,lil,mil);
readkey;
end.