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

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

 дВектВВ  ИЗ "..\..\..\..\Отделы\ЧисАн\64\д\ВводВывод\",
 дМатрВВ  ИЗ "..\..\..\..\Отделы\ЧисАн\64\д\ВводВывод\",
(*
 дСистЛАУ ИЗ "..\..\..\..\Отделы\ЛинАл\64\д\",
 дВекАн   ИЗ "..\..\..\..\Отделы\ЛинАл\64\д\",
*)
  дСобств ИЗ "..\..\..\..\Отделы\ЛинАл\64\д\",

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

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

  СОЗДАТЬ(дСобстЗнач_кВект,РАЗМЕР(дИсхМатД^));
  СОЗДАТЬ(мСобстЗнач_кВект,РАЗМЕР(дИсхМатД^));

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

  ЕСЛИ
    дСобств.Значений_кВектор(дИсхМатД^,дСобстЗнач_кВект^,мСобстЗнач_кВект^) = 0
  ТО
    НаЭкран.ВсяЦепь("^Действительная часть собственных значений:^");

    дВектВВ.наЭкран("%10.5f",дСобстЗнач_кВект^);

    НаЭкран.ВсяЦепь("Мнимая часть собственных значений:^");

    дВектВВ.наЭкран("%10.5f",мСобстЗнач_кВект^);
  ИНАЧЕ
    НаЭкран.ВсяЦепь("^Нет схождения!^")
  КОН
КОН Голова;

(*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*)
УКАЗ                        
  Голова
КОН ПроСЗнач.
