(*~\Глагол\Отделы\ЧисАн\32\к\Ряд\ВводВывод\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                                 ОТДЕЛ крМатрВВ;
(*============================================================================*
 * НАЗНАЧЕНИЕ: (ввод из файла)/(вывод в файл) и печать на экран матриц
 *============================================================================*)

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

крМатем   ИЗ "..\..\..\..\..\..\Отделы\ЧисАн\32\к\Ряд\",  
крВектор  ИЗ "..\..\..\..\..\..\Отделы\ЧисАн\32\к\Ряд\",
*)
крМатрица ИЗ "..\..\..\..\..\..\Отделы\ЧисАн\32\к\Ряд\",

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

ВИД
(*
                     Вид- = РЯД ИЗ крМатем.Вид; (* вектор  из комплексных чисел в виде ряда *)
  Доступ- = ДОСТУП К Вид;              (* доступ к вектору из комплексных чисел в виде ряда *)
*)
        (* вид Вещ - это удвоенная точность 32 разряда (6 десятичных знаков)  *)
  Вещ = дМатем.Вещ;                   (* локально *)


(*=рррррррррррррррррррррррр= реализация задач =рррррррррррррррррррррррррррррр=*)


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ОткрытиеФайла-(имяФайла-:ЦЕПЬ):ИзФайла.ДкПотоку;
(*
 * Цель:  если возможно, то открыть поток на чтение, иначе АВОСТ
 *----------------------------------------------------------------------------*
 * До:    <имяФайла> - имя считываемого файла
 * Ответ: открытый на чтение поток (ДОСТУП к Потоку)
 *)
ПЕР
       потокД:ИзФайла.ДкПотоку;
УКАЗ
       потокД:=ИзФайла.Открыть(имяФайла);
  ЕСЛИ
       потокД = ПУСТО
  ТО
(*
    НаЭкран.ОшибкаВпотоке-(имяФайла,' " не найден.^');
*)
    НаЭкран.ВсяЦепь('^Файл "');
    НаЭкран.ВсяЦепь(имяФайла);
    НаЭкран.ВсяЦепь('" не найден.^');
    СТОП(1) 
  КОН;
          потокД.цВидЗнаков:=ИзФайла.знУни;
  ВОЗВРАТ потокД
КОН ОткрытиеФайла;
 
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА изФайла-(ч:ИзФайла.ДкПотоку):крМатрица.Доступ;
(* Цель: прочитать из потока размер комплексной матрицы (строк, столбцов)
 *       создать комплексную матрицу и заполнить её данными из этого потока
 *----------------------------------------------------------------------------*
 * До:    <ч> - открытый на чтение поток
 * Ответ: созданная матрица *)
ПЕР
  i,j,строк,столбцов:ЦЕЛ;
  дT,мT:Вещ;
          кВыхМатД:крМатрица.Доступ;
УКАЗ
                   строк:=ИзФайла.Цел32(ч);
                         столбцов:=ИзФайла.Цел32(ч);
  СОЗДАТЬ(кВыхМатД,строк,столбцов);  (* матрица <строк,столбцов> из рядов [0,1] *)

  ОТ i:=0 ДО строк-1 ВЫП
    ОТ j:=0 ДО столбцов-1 ВЫП
      дT:=ИзФайла.Вещ32(ч);
      мT:=ИзФайла.Вещ32(ч);
      крМатем.алгебрВид(дT,мT,кВыхМатД[i,j])
    КОН 
  КОН;
  ВОЗВРАТ кВыхМатД
КОН изФайла;
 
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА наЭкран-(описание-:ЦЕПЬ; кМатр-:крМатрица.Вид);
(* Цель:  вывести на экран содержимое комплексной матрицы <кМатр> NxN из рядов
 *----------------------------------------------------------------------------*
 * До:   <описание> - описатель печати элемента матрицы (см. Текст.отд)
 *       <кМатр>    - прямоугольная комплексная матрица NxN из рядов          *)
ПЕР
  i,j:ЦЕЛ;
УКАЗ
  ОТ i:=0 ДО РАЗМЕР(кМатр,0)-1 ВЫП
    ОТ j:=0 ДО РАЗМЕР(кМатр,1)-1 ВЫП
      НаЭкран.Вещ4числа(описание,кМатр[i,j].д,кМатр[i,j].м,0,0)
    КОН;   
               (* переход на новую строку для печати следующей строки матрицы *)
    НаЭкран.ВсяЦепь('^')
  КОН
КОН наЭкран;
 
КОН крМатрВВ.
