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

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

кнМатем   ИЗ "..\..\..\..\..\..\Отделы\ЧисАн\64\к\Набор\",  
кнВектор  ИЗ "..\..\..\..\..\..\Отделы\ЧисАн\64\к.N\Набор\",

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

ВИД
        (* вид Вещ - это удвоенная точность 64 разряда (16 десятичных знаков) *)
  Вещ = дМатем.Вещ;                   (* локально *)


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


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

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

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

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

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

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


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