program maticovani;
uses crt;
const max=4; {velikost ctvercove matice}
      v=11;  {velikost cisel}
type matice=array[1..max,1..max] of longint;
var i,j,k,t,n:longint;
    s,o,p:matice;

 procedure generuj(var m:matice);
  begin
   for i:=1 to max do
    begin
     for j:=1 to max do m[i,j]:=Random(v);
    end;
  end;

 procedure transponuj(var m:matice);
 var temp:matice;
 begin
   temp:=m;
   for i:=1 to max do
   begin
    for j:=1 to max do m[i,j]:=temp[j,i];
   end;
 end;

 procedure nasob(var m1,m2,m: matice);
 begin
   for i:=1 to max do
   begin
    for j:=1 to max do
    begin
     for k:=1 to max do t:=t+m1[i,k]*m2[k,j];
     m[i,j]:=t;
     k:=1;
     t:=0;
    end;
   end;
 end;

 procedure secti(var m1,m2,m: matice);
 begin
   for i:=1 to max do
   begin
    for j:=1 to max do m[i,j]:=m1[i,j]+m2[i,j];
   end;
 end;



begin
clrscr;
generuj(s);
writeln('Matice s');
 for i:=1 to max do
  begin
   for j:=1 to max do write(s[i,j]:5);
   writeln;
  end;
writeln('N transponovana');
transponuj(s);
 for i:=1 to max do
  begin
   for j:=1 to max do write(s[i,j]:5);
   writeln;
  end;
transponuj(s);
generuj(o);
writeln('Matice o');
 for i:=1 to max do
  begin
   for j:=1 to max do write(o[i,j]:5);
   writeln;
  end;
nasob(s,o,p);
writeln('Matice s x o');
 for i:=1 to max do
  begin
   for j:=1 to max do write(p[i,j]:5);
   writeln;
  end;
secti(s,o,p);
writeln('Matice s + o');
 for i:=1 to max do
  begin
   for j:=1 to max do write(p[i,j]:5);
   writeln;
  end;

readkey;
end.