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

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

 дВектор  ИЗ "..\..\..\..\..\..\Отделы\ЧисАн\32\д\",
(*
кпМатем   ИЗ "..\..\..\..\..\..\Отделы\ЧисАн\32\к\Пара\",  
кпВектор  ИЗ "..\..\..\..\..\..\Отделы\ЧисАн\32\к\Пара\",
*)
  ИзФайла ИЗ "..\..\..\..\..\..\Отделы\Обмен\ВводВывод\",
   ВФайл  ИЗ "..\..\..\..\..\..\Отделы\Обмен\ВводВывод\",
  НаЭкран ИЗ "..\..\..\..\..\..\Отделы\Обмен\ВводВывод\";

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


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


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

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

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

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

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

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

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


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

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

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

КОН кпВектВВ.
