дана задача
"Программа работает в текстовом режиме. Пользователь выбирает операцию, вводит с клавиатуры размер матрицы и значения элементов матрицы. Программа выполняет заданную операцию и выводит на экран ее результат. Для реализации в программе предлагаются следующие операции: перемножение двух матриц, транспонирование, вычисление определителя, вычисление обратной матрицы, сложение (вычитание) двух матриц. "
Помогите решить очень срочно, пожалуйста. 
Либо помогите найти ошибку в коде:
Program MATRIX;            {Наименование программы}
Uses CRT;
VAR  
     i1, i2, i3 : integer;  {Счетчик строк}
     j1, j2, j3 : integer;  {Счетчик столбцов}
 operation: integer;    {Вариант развития программы}
 det :      real;       {Определитель}
 k:   integer;          {Рабочая переменная}
 m1, m2, m3 : integer;  
 n1, n2, n3 : integer;  
    {Массивы (матрицы), используемые в программе}
     MAS1,   {Матрица А}               
     MAS2,   {Матрица В} 
     MAS3 : array [1..10,1..10] of real;   {Матрица С}
BEGIN  {Начало программы}
     WriteLn ('Что Вы желаете делать с матрицами?');
     {Выбор пользователем варианта развития программы}
     WriteLn ('Если Вы желаете найти определитель матрицы, нажмите 1');
     WriteLn ('Если Вы желаете найти обратную матрицу, нажмите 2');
     WriteLn ('Если Вы желаете транспонировать матрицу, нажмите 3');
     WriteLn ('Если Вы желаете сложить матрицы, нажмите 4');
     WriteLn ('Если Вы желаете вычесть матрицы, нажмите 5');
     WriteLn ('Если Вы желаете перемножить матрицы, нажмите 6');
     ReadLn (operation); {Занесение выбранного варианта в память}
     WriteLn ('Введите кол-во строк исходной матрицы, не более 10');
     ReadLn (m1);
     WriteLn ('Введите кол-во столбцов исходной матрицы, не более 10');      ReadLn (n1);
      If ((1>n1) or  (n1>10) or (1>m1) or  (m1>10)) {Условия ошибки}
        then begin
               WriteLn ('ОШИБКА!!!');
               Halt;
             end
        else begin
               WriteLn ('Введите исходную матрицу');  {Ввод исходной матрицы}
               for i1:=1 to m1 do
                  for j1:=1 to n1 do Read (MAS1[i1,j1]);
              end;
               for i1:=1 to m1 do   {Вывод исходной матрицы}
                      begin
                       for j1:=1 to n1 do
                        Write (MAS1[i1,j1]);
                        WriteLn;
                      end;
          Case operation of  {Оператор выбора «operation»}
              1: begin  {Определитель}
                    if (m1<>n1) then writeLn ('ОШИБКА!!!') {Условие ошибки}
                    else
                        begin {Формула определителя}
                         det:=(MAS1[1,1]*MAS1[2,2]*MAS1[3,3]
                         +MAS1[2,1]*MAS1[3,2]*MAS1[1,3] 
                         +MAS1[1,2]*MAS1[2,3]*MAS1[3,1])
                         -(MAS1[3,1]*MAS1[2,2]*MAS1[1,3]
                         +MAS1[3,2]*MAS1[2,3]*MAS1[1,1]
                         +MAS1[2,1]*MAS1[1,2]*MAS1[3,3]);
                         WriteLn ('Opredelitel det=',det); {Вывод определителя}
                        end;
                 end;
              2: begin  {Обратная матрица}
                   if (m1<>n1) then WriteLn ('ОШИБКА!!!') {Условие ошибки}
                   else begin
                          det:=(MAS1[1,1]*MAS1[2,2]*MAS1[3,3] {Определитель}
                          +MAS1[2,1]*MAS1[3,2]*MAS1[1,3]
                          +MAS1[1,2]*MAS1[2,3]*MAS1[3,1])
                          -(MAS1[3,1]*MAS1[2,2]*MAS1[1,3]
                          +MAS1[3,2]*MAS1[2,3]*MAS1[1,1]
                          +MAS1[2,1]*MAS1[1,2]*MAS1[3,3]);
                          if det = 0 then WriteLn ('ОШИБКА!!!') {Условие ошибки}
                          else begin {Союзная матрица}
                                 for i1:=1 to m1 do
                                     for j1:=1 to n1 do MAS2[i1,j1]:=MAS1[j1,i1]; 
                                 {Итоговая формула}              
					    for i1:=1 to m1 do
                                     for j1:=1 to n1 do 			                                     					                        MAS3[i1,j1]:=(1/det)*MAS2[i1,j1]; 
                                 WriteLn;
                                 WriteLn ('Обратная матрица:');
                                 for i1:=1 to m1 do begin {Вывод обратной матрицы}
                                                      for j1:=1 to n1 do
                                                      Write (MAS3[i1,j1]);
                                                      WriteLn;
                                                    end;
                               end;
                        end;
                 end;
              3: begin {Транспонирование матрицы}
                   for i1:=1 to m1 do
                    for j1:=1 to n1 do MAS2[i1,j1]:=MAS1[j1,i1]; {Формула}
                   WriteLn ('Транспонированная матрица: ');
                   for i1:=1 to m1 do begin {Вывод транспонированной матрицы}
                                          for j1:=1 to n1 do
                                          Write (MAS2[i1,j1]);
                                          WriteLn;
                                      end;
                 end;
              4,5: begin {Сложение/вычитание матриц}
                         {Ввод второй матрицы}
                       WriteLn ('Введите кол-во строк второй матрицы');
                       ReadLn (m2);
                       Writeln ('Введите кол-во столбцов второй матрицы');
                       ReadLn (n2);
                       If (n2<>n1) or (m2<>m1)
                        then WriteLn ('OSHIBKA!!!') {Условие ошибки}
                        else begin
                                 WriteLn ('Введите вторую матрицу');
                                 for i1:=1 to m1 do
                                   for j1:=1 to n1 do
                                    Read (MAS2[i1,j1]);
                             end;
                       for i1:=1 to m1 do   {Вывод второй матрицы}
                           begin
                             for j1:=1 to n1 do
                             Write (MAS2[i1,j1]);
                             WriteLn;
                           end;
                       if operation = 4 then k := 1;
                       if operation = 5 then k := -1;
                       for i1:=1 to m1 do
                          for j1:=1 to n1 do
                            MAS3[i1,j1]:=MAS1[i1,j1]+k*MAS2[i1,j1]; {Итоговая формула}
                       writeln('Сумма/разность:');
                       for i1:=1 to m1 do
                           begin
                             for j1:=1 to n1 do Write(MAS3[i1,j1]);
                             WriteLn;
                           end;
                   end;
              6:  begin {Умножение матриц}
                    {Ввод второй матрицы}
                    WriteLn ('Введите кол-во строк второй матрицы'); 
                    ReadLn (m2);
                    Writeln ('Введите кол-во столбцов второй матрицы');
                    ReadLn (n2);
                    If ((1>=m2) or  (m2>=10) or (1>=n2) or  (n2>=10) {Условие ошибки}
                                or  (n2<>m1)) then WriteLn ('ОШИБКА!!!') 
                       else begin
                              WriteLn ('Введите вторую матрицу');
                              for i2:=1 to m2 do
                                 for j2:=1 to n2 do Read (MAS2[i2,j2]);
                            end;
                    for i2:=1 to m2 do begin {Вывод второй матрицы}
                                         for j2:=1 to n2 do
                                         Write (MAS2[i2,j2]);
                                         WriteLn;
                                       end;
                    m3:=m1; n3:=n2;
                    for i3:=1 to m3 do
                        for j3:=1 to n3 do begin
                                             MAS3[i3,j3] := 0;
                                             for i2:= 1 to m2 do
                                  {Итоговая формула}
                                  MAS3[i3,j3] :=MAS3[i3,j3] + MAS1[i3,i2] * MAS2[i2,j3];
                                           end;
                    begin {Вывод произведения}
                      writeln;
                      writeln('Произведение:');
                      for i3:=1 to m1 do begin
                                           for j3:=1 to n2 do Write (MAS3[i3,j3]);
                                           WriteLn;
                                         end;
                    end;
              end;
          End; {End Case}
          ReadKey;
END.   {Конец программы}