(*~\Глагол\ПриложенияЛинАл\64\д\СистЛАУдейств\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                                    ОТДЕЛ ПроОпред+;
(*============================================================================*
 * НАЗНАЧЕНИЕ: вычисление определителя и обратной матрицы
 * ПРИМЕЧАНИЯ: 
 *     Исходная матрица записана в файле "ПроМатр1.дан".
 *     В этом файле 1-я строка содержит размер матрицы (строк и столбцов),
 *  а последующие строки содержат значения элементов матрицы.
 *============================================================================*)

ИСПОЛЬЗУЕТ
(*
 дМатем   ИЗ "..\..\..\..\Отделы\ЧисАн\64\д\",
*)
 дМатрица ИЗ "..\..\..\..\Отделы\ЧисАн\64\д\",
 дМатрВВ  ИЗ "..\..\..\..\Отделы\ЧисАн\64\д\ВводВывод\",

 дСистЛАУ ИЗ "..\..\..\..\Отделы\ЛинАл\64\д\",

  ИзФайла ИЗ "..\..\..\..\Отделы\Обмен\ВводВывод\",
  НаЭкран ИЗ "..\..\..\..\Отделы\Обмен\ВводВывод\";

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Голова;
ПЕР
   ч:ИзФайла.ДкПотоку;
  дМ,
  дО:дМатрица.Доступ;(* доступ к исходной матрице <дМ> и
                                 обратной матрице <дО>=1/<дМ> к <дМ> *)
УКАЗ
   ч:=дМатрВВ.ОткрытиеФайла("ПроМатр1.дан");
  дМ:=дМатрВВ.изФайла(ч);
              ИзФайла.Закрыть(ч);

  СОЗДАТЬ(дО,РАЗМЕР(дМ^,0),РАЗМЕР(дМ^,1));

      НаЭкран.ВсяЦепь("^Исходная матрица:^");

  дМатрВВ.наЭкран("%8.4f",дМ^);
  ЕСЛИ
       дСистЛАУ.Обратить(дМ^,дО^) = 0
  ТО
      НаЭкран.ВсяЦепь("^Обратная матрица:^");

    дМатрВВ.наЭкран("%8.4f",дО^);
    НаЭкран.Вещ4числа("^Определитель: %8.4f^",дСистЛАУ.Определитель(дМ^),0,0,0);

    ЕСЛИ
         дСистЛАУ.Обратить(дО^,дМ^) = 0
    ТО
      НаЭкран.ВсяЦепь("^Обратная от обратной матрицы:^");
      дМатрВВ.наЭкран("%8.4f",дМ^)
    КОН
  ИНАЧЕ
      НаЭкран.ВсяЦепь("^Вырожденная матрица!^")
  КОН
КОН Голова;

(*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*)
УКАЗ
  Голова
КОН ПроОпред.
