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

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

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


(*-оооооооооооооо- опережающие определения/заготовки задач -ооооооооооооооооо-*)


ЗАДАЧА^ ОткрытиеФайла-(имяФайла-:ЦЕПЬ):ИзФайла.ДкПотоку;

ЗАДАЧА^ изФайла-(потокД:ИзФайла.ДкПотоку):уцВектор.Доступ;

ЗАДАЧА^ наЭкран-(описание-:ЦЕПЬ; уцВект-:уцВектор.Вид);

ЗАДАЧА^ наЭкранДвух-(описание-:ЦЕПЬ;
                             уцВек1-,
                             уцВек2-:уцВектор.Вид);

ЗАДАЧА^ наЭкранЧетырёх-(описание-:ЦЕПЬ;
                        уцВек1-,уцВек2-,
                        уцВек3-,уцВек4-:уцВектор.Вид);

ЗАДАЧА^ вФайл-(выходФайлД:ВФайл.ДкПотоку;
                     описание-:ЦЕПЬ;
                      уцВект- :уцВектор.Вид);

ЗАДАЧА^ вФайлДвух-(выходФайлД:ВФайл.ДкПотоку;
                         описание-:ЦЕПЬ;
                          уцВек1-,
                          уцВек2- :уцВектор.Вид);

ЗАДАЧА^ вФайлЧетырёх-(выходФайлД:ВФайл.ДкПотоку;
                             описание-:ЦЕПЬ;
                       уцВек1-,уцВек2-,
                       уцВек3-,уцВек4-:уцВектор.Вид);


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


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