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

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

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


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


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

КОН уцМатрВВ.
