(*~\Глагол\Отделы\ЧисАн\64\к\Ряд\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                       ОТДЕЛ крВектор;
(*============================================================================*
 * НАЗНАЧЕНИЕ: определение векторов (рядов) из комплексных чисел,
 *             представленных в виде ряда из 2-х вещ. вида дМатем.Вещ
 *               и основные вычисления над этими комплексными векторами
 *============================================================================*)

ИСПОЛЬЗУЕТ
   дМатем ИЗ "..\..\..\..\..\Отделы\ЧисАн\64\д\",
  крМатем ИЗ "..\..\..\..\..\Отделы\ЧисАн\64\к\Ряд\";
(*
  НаЭкран ИЗ "..\..\..\..\..\Отделы\Обмен\ВводВывод\";
*)

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

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


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


(*----------------------------------------------------------------------------*
 * арифметические действия над векторами из комплексных в виде ряда из 2-х вещ.
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ умнНаВещ-(кВход- :Вид; v:Вещ;
                  кВыход+:Вид);    (* кВыход:=кВход*v - умножение вектора на вещ. v *)
ЗАДАЧА^ делНаВещ-(кВход- :Вид; v:Вещ;
                  кВыход+:Вид);    (* кВыход:=кВход/v - деление   вектора на вещ. v *)

ЗАДАЧА^ увеличВдейств-(        v:Вещ;
                   кВект+:Вид);    (* кВект *= v - увеличить себя в действ. число v раз *)
ЗАДАЧА^ уменьшВдейств-(        v:Вещ;
                   кВект+:Вид);    (* кВект /= v - уменьшить себя в действ. число v раз *)

ЗАДАЧА^ умнНаКомпл-(кВход- :Вид; w-:крМатем.Вид;
                    кВыход+:Вид);  (* кВыход:=кВход*w - умножение вектора на компл. w *)
ЗАДАЧА^ делНаКомпл-(кВход- :Вид; w-:крМатем.Вид;
                    кВыход+:Вид);  (* кВыход:=кВход/w - деление   вектора на компл. w *)

ЗАДАЧА^ увеличВкомпл-(           w-:крМатем.Вид;
                     кВект+:Вид);  (* кВект *= w - увеличить себя в компл. число w раз *)
ЗАДАЧА^ уменьшВкомпл-(           w-:крМатем.Вид;
                     кВект+:Вид);  (* кВект /= w - уменьшить себя в компл. число w раз *)


(*----------------------------------------------------------------------------*
 * Переписывание векторов из комплексных в виде ряда из 2-х вещ.
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ Списать-(кВход-,
                 кВыход+:Вид);    (* Цель: Переписывание комплексных векторов *)


(*----------------------------------------------------------------------------*
 * Выставка вектора из комплексных в виде ряда из 2-х вещ.
 *----------------------------------------------------------------------------*)

      (* Инициализация комплексного вектора:
                                             действительным Sin-сигналом      *)
ЗАДАЧА^ Выставка_в_дSin-(        кВект+:Вид);

      (* Инициализация комплексного вектора:
                                             действительным Sin-сигналом +1 +
                                                     мнимый Sin-сигнал        *)
ЗАДАЧА^ Выставка_в_дSin_1_мSin-( кВект+:Вид);

      (* Инициализация комплексного вектора:
                                             действительным линейным сигналом *)
ЗАДАЧА^ Выставка_в_линию_Действ-(кВект+:Вид);



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


(*============================================================================*
 * арифметические действия над векторами из комплексных в виде ряда из 2-х вещ.
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умнНаВещ-(кВход- :Вид; v:Вещ;
                 кВыход+:Вид);    (* кВыход:=кВход*v - умножение вектора на вещ. v *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ             (* нормировка на вещественное v
                                  комплексного вектора из наборов кВход *)
          (* N:=РАЗМЕР(кВход); *)
  ОТ i:=0 ДО    РАЗМЕР(кВход)-1 ВЫП
    крМатем.умнНаВещ(кВход[i],v,кВыход[i])         (* кВыход[i] = кВход[i]*v  *)
  КОН
КОН умнНаВещ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умнНаКомпл-(кВход- :Вид; w-:крМатем.Вид;
                   кВыход+:Вид);  (* кВыход:=кВход*w - умножение вектора на компл. w *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ             (* нормировка на комплексное w (обычное комплексное умножение)
                                  комплексного вектора из наборов кВход *)
          (* N:=РАЗМЕР(кВход); *)
  ОТ i:=0 ДО    РАЗМЕР(кВход)-1 ВЫП
    крМатем.умножить(кВход[i],w,кВыход[i])         (* кВыход[i] = кВход[i]*w  *)
  КОН
КОН умнНаКомпл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА увеличВдейств-(        v:Вещ;
                  кВект+:Вид);    (* кВект *= v - увеличить себя в действ. число v раз *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ             (* нормировка на вещественное v
                                  комплексного вектора из наборов кВект *)
          (* N:=РАЗМЕР(кВект); *)
  ОТ i:=0 ДО    РАЗМЕР(кВект)-1 ВЫП
    крМатем.увеличВдейств(v,кВект[i])               (* кВект[i] = кВект[i]*v  *)
  КОН
КОН увеличВдейств;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА уменьшВдейств-(        v:Вещ;
                  кВект+:Вид);    (* кВект /= v - уменьшить себя в действ. число v раз *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
  обр_v:Вещ;
УКАЗ           (* нормировка на вещественное 1/v
                             комплексного вектора из наборов  кВект *)
  обр_v:=1/v;
          (* N:=РАЗМЕР(кВект); *)
  ОТ i:=0 ДО    РАЗМЕР(кВект)-1 ВЫП
(*
    крМатем.уменьшВдейств(    v,кВект[i])       (* кВект[i] = кВект[i]/v      *)
*)
    крМатем.увеличВдейств(обр_v,кВект[i])       (* кВект[i] = кВект[i]*обр_v  *)
  КОН
КОН уменьшВдейств;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА делНаВещ-(кВход- :Вид; v:Вещ;
                 кВыход+:Вид);    (* кВыход:=кВход/v - деление   вектора на вещ. v *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
  обр_v:Вещ;
УКАЗ            (* нормировка на вещественное 1/v
                              комплексного вектора из наборов  кВход *)
  обр_v:=1/v;
          (* N:=РАЗМЕР(кВход); *)
  ОТ i:=0 ДО    РАЗМЕР(кВход)-1 ВЫП
(*
    крМатем.делНаВещ(кВход[i],v,кВыход[i])      (* кВыход[i] = кВход[i]/v     *)
*)
    крМатем.умнНаВещ(кВход[i],обр_v,кВыход[i])  (* кВыход[i] = кВход[i]*обр_v *)
  КОН
КОН делНаВещ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА делНаКомпл-(кВход- :Вид; w-:крМатем.Вид;
                   кВыход+:Вид);  (* кВыход:=кВход/w - деление   вектора на компл. w *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ             (* нормировка на комплексное 1/w (обычное комплексное деление)
                                  комплексного вектора из наборов кВход *)
          (* N:=РАЗМЕР(кВход); *)
  ОТ i:=0 ДО    РАЗМЕР(кВход)-1 ВЫП
    крМатем.делить(кВход[i],w,кВыход[i])           (* кВыход[i] = кВход[i]/w  *)
  КОН
КОН делНаКомпл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА увеличВкомпл-(           w-:крМатем.Вид;
                    кВект+:Вид);     (* кВект *= w - увеличить себя в компл. число w раз *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ             (* нормировка на комплексное w (обычное комплексное умножение)
                                  комплексного вектора из наборов кВект       *)
          (* N:=РАЗМЕР(кВект); *)
  ОТ i:=0 ДО    РАЗМЕР(кВект)-1 ВЫП
    крМатем.увеличВкомпл(w,кВект[i])                (* кВект[i] = кВект[i]*w  *)
  КОН
КОН увеличВкомпл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА уменьшВкомпл-(           w-:крМатем.Вид;
                    кВект+:Вид);     (* кВект /= w - уменьшить себя в компл. число w раз *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ             (* нормировка на комплексное 1/w (обычное комплексное деление)
                                  комплексного вектора из наборов кВект       *)
          (* N:=РАЗМЕР(кВект); *)
  ОТ i:=0 ДО    РАЗМЕР(кВект)-1 ВЫП
    крМатем.уменьшВкомпл(w,кВект[i])                (* кВект[i] = кВект[i]/w  *)
  КОН
КОН уменьшВкомпл;


(*============================================================================*
 * Переписывание векторов из комплексных в виде ряда из 2-х вещ.
 *============================================================================*)


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Списать-(кВход-,
                кВыход+:Вид);     (* Цель: Переписывание комплексных векторов *)
ПЕР
     i:ЦЕЛ;
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
          (* N:=РАЗМЕР(кВход); *)
  ОТ i:=0 ДО    РАЗМЕР(кВход)-1 ВЫП
    кВыход[i]:=кВход[i]
  КОН
КОН Списать;


(*============================================================================*
 * Выставка вектора из комплексных в виде ряда из 2-х вещ.
 *============================================================================*)


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
      (* Инициализация комплексного вектора:
                                             действительным Sin-сигналом      *)
ЗАДАЧА Выставка_в_дSin-(кВект+:Вид);
ПЕР
     i:ЦЕЛ;
    t,
   dT :Вещ;
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
          (* N:=РАЗМЕР(кВект); *)

                  (* заполняем комплексный вектор
                                                  действительным sin-сигналом *)
   dT:=дМатем.ДваПИ*(1/РАЗМЕР(кВект));
                                 t:=0;
  ОТ i:=0 ДО РАЗМЕР(кВект)-1 ВЫП
                  (* <дМатем.sin(t);0>    - вид входного комплексного сигнала *)
    крМатем.алгебрВид(дМатем.sin(t),0,кВект[i]);
(*
    крМатем.алгебрВид(дМатем.sin(t),дМатем.cos(t),кВект[i]);
*)
    t:=t+dT                                        (* 0 <= t <= 2ПИ*(N-1)/N *)
  КОН
КОН Выставка_в_дSin;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
      (* Инициализация комплексного вектора:
                                             действительным Sin-сигналом +1 +
                                                     мнимый Sin-сигнал        *)
ЗАДАЧА Выставка_в_дSin_1_мSin-(кВект+:Вид);
ПЕР
     i:ЦЕЛ;
    t,
   dT :Вещ;

     X:крМатем.Вид;

             N:ЦЕЛ;       (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
             N:=РАЗМЕР(кВект);

              (* заполняем комплексный вектор
                                              действительным Sin-сигналом  +1 *)
         dT:=дМатем.ДваПИ*(1/N);
                                 t:=0;
  ОТ i:=0 ДО N-1 ВЫП
                  (* <дМатем.sin(t);0>    - вид входного комплексного сигнала *)
    крМатем.алгебрВид(дМатем.sin(t),0,кВект[i]);      (* кВект[i]  = sin(t),0 *)

          (* добавляем к комплексному вектору
                                              действительный единичный сигнал *)
    крМатем.добавить(крМатем.ДействЕДИНИЦА,
                                           кВект[i]); (* кВект[i] += 1,0 *)
                 (* Постоянная = <1;0> - вид входного комплексного сигнала 
    кпМатем.алгебрВид(            1,0,     кВект[i]);
                  *)
    t:=t+dT              (* 0 <= t <= 2ПИ*(N-1)/N *)
  КОН;
               (* добавляем к входному комплексному вектору
                                                            мнимый Sin-сигнал *)
         dT:=дМатем.ДваПИ*(3/N);
                                    t:=0;
  ОТ i:=0 ДО N-1 ВЫП
                  (* <0; дМатем.sin(t)>   - вид входного комплексного сигнала *)
    крМатем.алгебрВид(0, дМатем.sin(t), X);
    крМатем.добавить(                   X, кВект[i]); (* кВект[i] += X *)

    t:=t+dT                 (* 0 <= t <= 2ПИ*(N-1)/N *)
  КОН
КОН Выставка_в_дSin_1_мSin;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
      (* Инициализация комплексного вектора:
                                             действительным линейным сигналом *)
ЗАДАЧА Выставка_в_линию_Действ-(кВект+:Вид);
ПЕР
     i:ЦЕЛ;
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
          (* N:=РАЗМЕР(кВект); *)
  ОТ i:=0 ДО    РАЗМЕР(кВект)-1 ВЫП
    крМатем.алгебрВид(i,0,кВект[i])
  КОН
КОН Выставка_в_линию_Действ;

КОН крВектор.
