(*~\Глагол\Отделы\ЧисАн\64\к\Пара\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ кпМатем;
(*============================================================================*
 * НАЗНАЧЕНИЕ: функции комплексной переменной,
 *         представленной в виде пары вещественных вида дМатем.Вещ - 64 бита
 *----------------------------------------------------------------------------*
 * ПРИМЕЧАНИЯ: после вызова задачи переменная <дМатем.код> может стать # 0,
 *         это означает, что ответ задачи содержит не результат вычислений, а
 *         особое значение.
 *============================================================================*)

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

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

(*----------------------------------------------------------------------------*
 * Вид обрабатываемых данных: пара чисел (из 2х ШИРВЕЩ вида дМатем.Вещ)
 *----------------------------------------------------------------------------*)
(*
                          вместо
  Вид- = НАБОР
              д+,м+:Вещ   (* оконечный (+) нежелателен, но может быть быстрее,
                                         чем доступ через задачи этого отдела *)
      (* или 
              д-,м-:Вещ (* в других отделах эти свойства\поля изменять нельзя *)
       *)
         КОН;
*)
(*----------------------------------------------------------------------------*
 * Комплексные переменные/постоянные
 *----------------------------------------------------------------------------*)
ПЕР
  дКомплексногоНОЛЯ-,      мКомплексногоНОЛЯ-  :Вещ;    (* ( 0;            0) *)
  дДействЕДИНИЦы-,         мДействЕДИНИЦы-     :Вещ;    (* (+1;            0) *)
  дМинусДействЕДИНИЦы-,    мМинусДействЕДИНИЦы-:Вещ;    (* (-1;            0) *)
  дМнимойЕДИНИЦы-,         мМнимойЕДИНИЦы-     :Вещ;    (* ( 0;           +1) *)
  дМинусМнимойЕДИНИЦы-,    мМинусМнимойЕДИНИЦы-:Вещ;    (* ( 0;           -1) *)

  дДействМаксВещ-,         мДействМаксВещ-     :Вещ;    (* (дМатем.МаксВещ;0) *)
  дДействПолПИ-,           мДействПолПИ-       :Вещ;    (* (дМатем.ПолПИ;  0) *)

  NBS:РЯД 8 ИЗ Вещ;  (* ряд для Г-функции *)


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


(*----------------------------------------------------------------------------*
 * Стандартные функции: норма, модуль, аргумент (экспоненты),
 *                         знак и обмен 2-х комплексных чисел в виде пары вещ.
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ знакЧ-(Zд-,Zм-:Вещ):ЦЕЛ; (* вернуть знак (-1,0,+1) действительной или
                                                          мнимой части компл.числа *)
ЗАДАЧА^ норма-(Zд-,Zм-:Вещ):Вещ; (* Norma(Z)=Zд^2+Zм^2        - норма  компл.числа *)
ЗАДАЧА^ мод-(Zд-,Zм-:Вещ):Вещ;        (* |Z|=квкор(Zд^2+Zм^2) - модуль компл.числа *)
ЗАДАЧА^ arg-(Zд-,Zм-:Вещ):Вещ;     (* arg(Z)=arctg2(Zм,Zд)  - аргумент компл.числа *)

ЗАДАЧА^ обмен-(Zд+,Zм+,Кд+,Км+:Вещ);  (* <Zд,Zм> <- <Кд,Км>; <Кд,Км> <- <Zд,Zм> *)

(*----------------------------------------------------------------------------*)
(* Собрать из двух вещественных одно комплексное
                                                        в алгебраическом виде *)
ЗАДАЧА^ алгебрВид-(Дейст-,Мним-:Вещ; Кд+,Км+:Вещ); (* Кд:=Дейст; Км:=Мним *)

(*----------------------------------------------------------------------------*)
(* Собрать из двух вещественных одно комплексное
                                       в тригонометрическом виде (экспонента) *)
ЗАДАЧА^ тригонВид-(r-,тета-:Вещ; Кд+,Км+:Вещ);     (* К :=r*exp(тета)         *)

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

ЗАДАЧА^ отрицание-(Zд-,Zм-,Кд+,Км+:Вещ);            (* [К:=-Z]  Кд:=-Zд;   Км:=-Zм; *)
ЗАДАЧА^ минус-(Кд+,Км+:Вещ);                 (* К:=-К - минус (самоотрицание) комплексного К *)
ЗАДАЧА^ сопрячьсебя-(Кд+,Км+:Вещ);           (* К:=К* - самосопряжение        комплексного К *)
ЗАДАЧА^ сопряжение-(Zд-,Zм-,Кд+,Км+:Вещ);           (* [К:=Z*]  Кд:= Zд;   Км:=-Zм; *)

ЗАДАЧА^ сложить-(Aд-,Aм-,Bд-,Bм-,Кд+,Км+:Вещ);      (* [К:=A+B] Кд:=Aд+Bд; Км:=Aм+Bм; *)
ЗАДАЧА^ вычесть-(Aд-,Aм-,Bд-,Bм-,Кд+,Км+:Вещ);      (* [К:=A-B] Кд:=Aд-Bд; Км:=Aм-Bм; *)
ЗАДАЧА^ добавить-(Bд-,Bм-,Кд+,Км+:Вещ);      (* К+=B;   К:=К+B - увеличить <К+> на комплексное <B> *)
ЗАДАЧА^ отнять-(Bд-,Bм-,Кд+,Км+:Вещ);        (* К-=B;   К:=К-B - уменьшить <К+> на комплексное <B> *)

ЗАДАЧА^ умножить-(Aд-,Aм-,Bд-,Bм-,Кд+,Км+:Вещ);     (* [К:=A*B] - умножение двух комплексных <A> и <B>  *)
ЗАДАЧА^ умнНаВещ-(Zд-,Zм-:Вещ; v:Вещ; Кд+,Км+:Вещ); (* [К:=Z*v] Кд:=Zд*v;  Км:=Zм*v; - умножение на действ./вещ. <v> *)
ЗАДАЧА^ увеличВдейств-(  v:Вещ; Кд+,Км+:Вещ);(* К*=v;   К:=К*v - увеличить <К+> в действ. число <v> раз *)
ЗАДАЧА^ увеличВкомпл-( Bд-,Bм-, Кд+,Км+:Вещ);(* К*=B;   К:=К*B - увеличить <К+> в  компл. число <B> раз *)

ЗАДАЧА^ делить-(    Aд-,Aм-, Bд-,Bм-, Кд+,Км+:Вещ); (* [К:=A/B] - деление   двух комплексных <A> и <B> *)
ЗАДАЧА^ делНаВещ-(Zд-,Zм-:Вещ; v:Вещ; Кд+,Км+:Вещ); (* [К:=Z/v] Кд:=Zд/v;  Км:=Zм/v; -  деление  на действ./вещ. <v> *)
ЗАДАЧА^ уменьшВдейств-(        v:Вещ; Кд+,Км+:Вещ); (*  К/=v; К:=К/v - уменьшить <К+> в действ. число <v> раз *)
ЗАДАЧА^ уменьшВкомпл-(       Bд-,Bм-, Кд+,Км+:Вещ); (*  К/=B; к:=к/B - уменьшить <К+> в  компл. число <B> раз *)

ЗАДАЧА^ суммаПроизведений-(Aд-,Aм-,Bд-,Bм-,Sд+,Sм+:Вещ); (* S:=S+A*B - сумма
                                         произведений двух комплексных в ДПФi *)

(*----------------------------------------------------------------------------*
 * Основные математические функции: показательные (корни и экспоненты),
 *                                  логарифмические 
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ кв-(Zд-,Zм-,Кд+,Км+:Вещ);      (* К:=Z^(+2); к:=кв(Z) - квадрат комплексного Z  *)
ЗАДАЧА^ квкор-(Zд-,Zм-,Кд+,Км+:Вещ);              (* К:=квкор(Z) - кв.корень из комплексного*)
ЗАДАЧА^ корни-(Zд-,Zм-:Вещ; m,n:ЦЕЛ; Кд+,Км+:Вещ);(* К:=Z^(1/n), m=0..n-1 - все n-корней комплексного Z *)
(*
 ЗАДАЧА корни должна вычислить все "n" корней комплексного z,
              если при её вызове изменять "m" от 0 до n-1
 *)
ЗАДАЧА^ exp-(Zд-,Zм-,Кд+,Км+:Вещ);                (* К:=<дМатем.exp(Zд)*дМатем.cos(Zм);
                                                         дМатем.exp(Zд)*дМатем.sin(Zм)> *)
ЗАДАЧА^ ln-(Zд-,Zм-,Кд+,Км+:Вещ);                 (* К:=ln (Z) - комплексный Ln *)
ЗАДАЧА^ lnГ-(Zд-,Zм-,Кд+,Км+:Вещ);                (* К:=ln( Г(Z) ) - Ln Г-функции от комплексного Z *)


(*----------------------------------------------------------------------------*
 * Степенные функции комплексного аргумента в виде пары вещ.
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ степКЦ-(Zд-,Zм-:Вещ; n:ЦЕЛ; Кд+,Км+:Вещ); (* К:=Z^n - степень комплексного ЦЕЛая *)
ЗАДАЧА^ степКВ-(Zд-,Zм-:Вещ; v:Вещ; Кд+,Км+:Вещ); (* К:=Z^v - степень комплексного действительная *)
ЗАДАЧА^ степКК-(Aд-,Aм-,Bд-,Bм-,Кд+,Км+:Вещ);     (* К:=A^B - степень комплексного комплексная *)

(*----------------------------------------------------------------------------*
 * Тригонометрические функции комплексного аргумента в виде пары вещ.
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ sin-(Zд-,Zм-,Кд+,Км+:Вещ);      
ЗАДАЧА^ arcsin-(Zд-,Zм-,Кд+,Км+:Вещ);
ЗАДАЧА^ cos-(Zд-,Zм-,Кд+,Км+:Вещ);      
ЗАДАЧА^ arccos-(Zд-,Zм-,Кд+,Км+:Вещ);
ЗАДАЧА^ tg-(Zд-,Zм-,Кд+,Км+:Вещ);
ЗАДАЧА^ arctg-(Zд-,Zм-,Кд+,Км+:Вещ);   

(*----------------------------------------------------------------------------*
 * Гиперболические функции комплексного аргумента в виде пары вещ.
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ sh-(Zд-,Zм-,Кд+,Км+:Вещ);
ЗАДАЧА^ ch-(Zд-,Zм-,Кд+,Км+:Вещ);
ЗАДАЧА^ th-(Zд-,Zм-,Кд+,Км+:Вещ);
ЗАДАЧА^ Arsh-(Zд-,Zм-,Кд+,Км+:Вещ);
ЗАДАЧА^ Arch-(Zд-,Zм-,Кд+,Км+:Вещ);
ЗАДАЧА^ Arth-(Zд-,Zм-,Кд+,Км+:Вещ);



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


(*============================================================================*
 * Стандартные функции: норма, модуль, аргумент (экспоненты),
 *                         знак и обмен 2-х комплексных чисел в виде пары вещ.
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА знакЧ-(Zд-,Zм-:Вещ):ЦЕЛ;  (* вернуть знак (-1,0,+1) действительной или
                                                         мнимой части компл.числа *)
УКАЗ
  ЕСЛИ  Zд > 0 ТО
    ВОЗВРАТ 1
  АЕСЛИ Zд < 0 ТО
    ВОЗВРАТ -1
  АЕСЛИ Zм > 0 ТО
    ВОЗВРАТ 1
  АЕСЛИ Zм < 0 ТО
    ВОЗВРАТ -1
  ИНАЧЕ
    ВОЗВРАТ 0 
  КОН
КОН знакЧ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА норма-(Zд-,Zм-:Вещ):Вещ;         (* Norma(Z)=Zд^2+Zм^2 - норма компл.числа *)
УКАЗ
  ВОЗВРАТ дМатем.кв(Zд) + дМатем.кв(Zм)
КОН норма;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА мод-(Zд-,Zм-:Вещ):Вещ;        (* |Z|=квкор(Zд^2+Zм^2) - модуль компл.числа *)
УКАЗ
  ВОЗВРАТ дМатем.Пифагор(Zд,Zм)
КОН мод;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА arg-(Zд-,Zм-:Вещ):Вещ; (* arg(Z)=arctg2(Zм,Zд) - аргумент/фаза компл.числа *)
УКАЗ
  ВОЗВРАТ дМатем.arctg2(Zм,Zд)        (* arctg (Zм/Zд) или
                                                    неопределённость вида 0/0 *)
КОН arg;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА обмен-(Zд+,Zм+,Кд+,Км+:Вещ); (* <Zд,Zм> <- <Кд,Км>; <Кд,Км> <- <Zд,Zм> *)
ПЕР
  дT,мT:Вещ;
УКАЗ
  дT:=Zд; мT:=Zм;
  Zд:=Кд; Zм:=Км;
  Кд:=дT; Км:=мT
КОН обмен;


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(* Собрать из двух вещественных одно комплексное
                                                        в алгебраическом виде *)
ЗАДАЧА алгебрВид-(Дейст-,Мним-:Вещ; Кд+,Км+:Вещ); (* Кд:=Дейст; Км:=Мним *)
УКАЗ
  Кд:=Дейст;
  Км:=Мним
КОН алгебрВид;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(* Собрать из двух вещественных одно комплексное
                                       в тригонометрическом виде (экспонента) *)
ЗАДАЧА тригонВид-(r-,тета-:Вещ; Кд+,Км+:Вещ);     (* К :=r*exp(тета)         *)
УКАЗ
  алгебрВид(r*дМатем.cos(тета),
            r*дМатем.sin(тета), Кд,Км)
КОН тригонВид;


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

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА отрицание-(Zд-,Zм-,Кд+,Км+:Вещ);             (* [К:=-Z]  Кд:=-Zд;   Км:=-Zм; *)
УКАЗ
  алгебрВид(-Zд,                          (* это работает даже при "Кд+,Км+" = "Zд-,Zм-" *)
            -Zм, Кд,Км)
КОН отрицание;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА минус-(Кд+,Км+:Вещ);                          (* К:=-К - минус (самоотрицание) комплексного К *)
УКАЗ
  алгебрВид(-Кд,
            -Км, Кд,Км)
КОН минус;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА сопряжение-(Zд-,Zм-,Кд+,Км+:Вещ);            (* [К:=Z*]  Кд:= Zд;   Км:=-Zм; *)
УКАЗ
  алгебрВид( Zд,                          (* это работает даже при "Кд+,Км+" = "Zд-,Zм-" *)
            -Zм, Кд,Км)
КОН сопряжение;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА сопрячьсебя-(Кд+,Км+:Вещ);                    (* К:=К* - самосопряжение        комплексного К *)
УКАЗ
  алгебрВид(+Кд,
            -Км, Кд,Км)
КОН сопрячьсебя;


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА сложить-(Aд-,Aм-,Bд-,Bм-,Кд+,Км+:Вещ);       (* [К:=A+B] Кд:=Aд+Bд; Км:=Aм+Bм; *)
УКАЗ
  алгебрВид(Aд + Bд,                      (* это работает даже при "Кд+,Км+" = "Aд-,Aм-" *)
            Aм + Bм, Кд,Км)
КОН сложить;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА вычесть-(Aд-,Aм-,Bд-,Bм-,Кд+,Км+:Вещ);       (* [К:=A-B] Кд:=Aд-Bд; Км:=Aм-Bм; *)
УКАЗ
  алгебрВид(Aд - Bд,
            Aм - Bм, Кд,Км)
КОН вычесть;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА добавить-(       Bд-,Bм-,Кд+,Км+:Вещ);        (* К+=B;
                                                        К:=К+B - увеличить <К+> на комплексное <B> *)
УКАЗ
  алгебрВид(Кд + Bд,
            Км + Bм, Кд,Км)
КОН добавить;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА отнять-(         Bд-,Bм-,Кд+,Км+:Вещ);        (* К-=B;
                                                        К:=К-B - уменьшить <К+> на комплексное <B> *)
УКАЗ
  алгебрВид(Кд - Bд,
            Км - Bм, Кд,Км)
КОН отнять;


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умножить-( Aд-,Aм-, Bд-,Bм-,  Кд+,Км+:Вещ);  (* [К:=A*B] - умножение двух комплексных <A> и <B> *)
УКАЗ
  алгебрВид(Aд*Bд - Aм*Bм,                (* это работает даже при "Кд+,Км+" = "Aд-,Aм-" *)
            Aд*Bм + Aм*Bд, Кд,Км)
КОН умножить;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умнНаВещ-(Zд-,Zм-:Вещ; v:Вещ; Кд+,Км+:Вещ);  (* [К:=Z*v]
                                                        Кд:=Zд*v;  Км:=Zм*v; - умножение на действ./вещ. <v> *)
УКАЗ
  алгебрВид(Zд*v,                         (* это работает даже при "Кд+,Км+" = "Zд-,Zм-" *)
            Zм*v, Кд,Км)
КОН умнНаВещ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА увеличВдейств-(        v:Вещ; Кд+,Км+:Вещ);   (* К*=v;
                                                        К:=К*v - увеличить <К+> в действ. число <v> раз *)
УКАЗ
  алгебрВид(Кд*v,
            Км*v, Кд,Км)
КОН увеличВдейств;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА увеличВкомпл-(      Bд-,Bм-,  Кд+,Км+:Вещ);   (* К*=B;
                                                        К:=К*B - увеличить <К+> в  компл. число <B> раз *)
УКАЗ
  алгебрВид(Кд*Bд - Км*Bм,
            Кд*Bм + Км*Bд, Кд,Км)
КОН увеличВкомпл;


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА делить-(   Aд-,Aм-, Bд-,Bм-,  Кд+,Км+:Вещ);  (* [К:=A/B] - деление  двух комплексных <A> и <B> *)
ПЕР
  врем:Вещ;
УКАЗ
  ЕСЛИ (Bд = 0) И (Bм = 0) ТО
    дМатем.код:=дМатем.ПЕРЕПОЛНЕНИЕ;
(*
  алгебрВид(кпМатем.дДействМаксВещ,
            кпМатем.мДействМаксВещ, Кд,Км)
*)
        Кд:=кпМатем.дДействМаксВещ;
        Км:=кпМатем.мДействМаксВещ;
    ВОЗВРАТ
  КОН;
  врем:=дМатем.кв(Bд) + дМатем.кв(Bм);
  алгебрВид(
            (Aд*Bд + Aм*Bм)/врем,         (* это работает даже при "Кд+,Км+" = "Aд-,Aм-" *)
            (Aм*Bд - Aд*Bм)/врем, Кд,Км)
КОН делить;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА делНаВещ-(Zд-,Zм-:Вещ; v:Вещ; Кд+,Км+:Вещ);  (* [К:=Z/v]
                                                        Кд:=Zд/v;  Км:=Zм/v; -  деление  на действ./вещ. <v> *)
УКАЗ
  алгебрВид(Zд/v,                         (* это работает даже при "Кд+,Км+" = "Zд-,Zм-" *)
            Zм/v, Кд,Км)
КОН делНаВещ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА уменьшВдейств-(        v:Вещ; Кд+,Км+:Вещ);   (* К/=v; 
                                                        К:=К/v - уменьшить <К+> в действ. число <v> раз *)
УКАЗ
  алгебрВид(Кд/v,
            Км/v, Кд,Км)
КОН уменьшВдейств;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА уменьшВкомпл-(       Bд-,Bм-, Кд+,Км+:Вещ);   (* К/=B;
                                                        К:=К/B - уменьшить <К+> в  компл. число <B> раз *)
ПЕР
  врем:Вещ;
УКАЗ
  ЕСЛИ (Bд = 0) И (Bм = 0) ТО
    дМатем.код:=дМатем.ПЕРЕПОЛНЕНИЕ;
(*
  алгебрВид(кпМатем.дДействМаксВещ,
            кпМатем.мДействМаксВещ, Кд,Км)
*)
        Кд:=кпМатем.дДействМаксВещ;
        Км:=кпМатем.мДействМаксВещ;
    ВОЗВРАТ
  КОН;
  врем:=дМатем.кв(Bд) + дМатем.кв(Bм);
  алгебрВид(
            (Кд*Bд + Км*Bм)/врем,
            (Км*Bд - Кд*Bм)/врем, Кд,Км)
КОН уменьшВкомпл;


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА суммаПроизведений-(Aд-,Aм-,Bд-,Bм-,Sд+,Sм+:Вещ);
                                       (* S:=S+A*B - сумма произведений двух комплексных <A> и <B> *)
УКАЗ
        Sд:=(Aд*Bд - Aм*Bм) + Sд;
        Sм:=(Aд*Bм + Aм*Bд) + Sм
(*
  алгебрВид((Aд*Bд - Aм*Bм) + Sд,
            (Aд*Bм + Aм*Bд) + Sм, Sд,Sм)
*)
КОН суммаПроизведений;


(*============================================================================*
 * Основные математические функции: показательные (корни и экспоненты),
 *                                  логарифмические 
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА кв-(Zд-,Zм-,Кд+,Км+:Вещ);      (* К:=Z^(+2);
                                         Кк:=кв(Z) - квадрат комплексного Z  *)
УКАЗ
  алгебрВид(Zд*Zд - Zм*Zм,
(*          z.д*z.м + z.м*z.д,к)       *)
            Zд*Zм*2,          Кд,Км) 
КОН кв;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА квкор-(Zд-,Zм-,Кд+,Км+:Вещ);   (* К:=квкор(Z) - кв.корень из комплексного*)
ПЕР
  r,тета:Вещ;
УКАЗ
  r:=мод(Zд,Zм);
  тета:=arg(Zд,Zм);
  ЕСЛИ r = 0 ТО
    Кд:=кпМатем.дКомплексногоНОЛЯ;
    Км:=кпМатем.мКомплексногоНОЛЯ
  ИНАЧЕ
    тригонВид(дМатем.квкор(r),
              дМатем.уголВПи(0.5*тета), Кд,Км)
  КОН
КОН квкор;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА корни-(Zд-,Zм-:Вещ; m,n:ЦЕЛ; Кд+,Км+:Вещ);(* К:=Z^(1/n), m=0..n-1 - все n-корней комплексного Z *)
(*
 * задача 'корни' должна вычислить все 'n' корней комплексного Z,
 * если при её вызове изменять 'm' от 0 до n-1
 *)
ПЕР
  r,тета:Вещ;
УКАЗ
  ЕСЛИ (n <= 0) ИЛИ (m < 0) ИЛИ (m >= n) ТО
    дМатем.код:=дМатем.ВНЕОБЛАСТИ;
    Кд:=кпМатем.дКомплексногоНОЛЯ;
    Км:=кпМатем.мКомплексногоНОЛЯ;
    ВОЗВРАТ
  КОН;
  r:=мод(Zд,Zм);
  тета:=arg(Zд,Zм);
  ЕСЛИ r = 0 ТО
    Кд:=кпМатем.дКомплексногоНОЛЯ;
    Км:=кпМатем.мКомплексногоНОЛЯ
  ИНАЧЕ                                (* результат *)
    тригонВид(дМатем.степВВ(r,1/n),
              дМатем.уголВПи((тета + m*дМатем.ДваПИ)/n), Кд,Км)
  КОН
КОН корни;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА exp-(Zд-,Zм-,Кд+,Км+:Вещ);                (* К:=<дМатем.exp(Zд)*дМатем.cos(Zм);
                                                        дМатем.exp(Zд)*дМатем.sin(Zм)> *)
ПЕР
  expX:Вещ;
УКАЗ
  expX:=дМатем.exp(Zд);
  ЕСЛИ дМатем.код = 0 ТО
    алгебрВид(expX*дМатем.cos(Zм),
              expX*дМатем.sin(Zм), Кд,Км)
  ИНАЧЕ                 (* дМатем.код=дМатем.ПЕРЕПОЛНЕИЕ или дМатем.ОБНУЛЕНИЕ *)
    алгебрВид(expX,     (* дМатем.МаксВещ   или  0 *)
                 0, Кд,Км)
  КОН
КОН exp;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ln-(Zд-,Zм-,Кд+,Км+:Вещ);          (* К:=ln (Z) - Ln от комплексного Z *)
ПЕР
  r,тета,lnr:Вещ;
УКАЗ
  r:=мод(Zд,Zм);
  тета:=arg(Zд,Zм);
  lnr:=дМатем.ln(r);
  ЕСЛИ дМатем.код = 0 ТО
    алгебрВид( lnr,
              тета, Кд,Км)
  ИНАЧЕ
    алгебрВид(-дМатем.МаксВещ,
                           0, Кд,Км)
  КОН
КОН ln;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА lnГприбл(Zд-,Zм-,Кд+,Км+:Вещ);                            (* локальная *)
(*
 * Это NBS приближение Г функции в области (9 < Re(z) < 10; 0 < Im(z) < 10). 
 * Другие значения можно получить из: ln Г(z+1) = ln z + ln Г(z)
 *)
ПЕР
  i:ЦЕЛ;
  дСтепени,мСтепени:РЯД 8 ИЗ Вещ;
  дВрем1,мВрем1,
  дВрем2,мВрем2:Вещ;
УКАЗ
  ln(Zд,Zм,дВрем1,мВрем1);            (* ln(z)                      *)
  алгебрВид(Zд-0.5,
            Zм,    дВрем2,мВрем2);    (*  Z-0.5                     *)
  умножить(дВрем1,мВрем1,
      дВрем2,мВрем2, Кд,Км);          (* (Z-0.5)*ln(z)              *)
  вычесть(Кд,Км,Zд,Zм, Кд,Км);            (* (Z-0.5)*ln(z)-z            *)
  Кд:=Кд + 0.91893853320467274178;    (* (Z-0.5)*ln(z)-z+ln(2*ПИ)/2 *)
  дВрем1:=кпМатем.дДействЕДИНИЦы;
  мВрем1:=кпМатем.мДействЕДИНИЦы;
  делить(дВрем1,мВрем1,Zд,Zм, дСтепени[0],мСтепени[0]);  (*  z^(-1)  *)
  умножить(дСтепени[0],мСтепени[0],
      дСтепени[0],мСтепени[0], дВрем2,мВрем2);        (*  z^(-2)  *)
  ОТ i:=1 ДО 7 ВЫП
    умножить(дСтепени[i-1],мСтепени[i-1],
               дВрем2,       мВрем2, дСтепени[i],мСтепени[i]) 
  КОН;
  ОТ i:=7 ДО 0 ПО -1 ВЫП
    алгебрВид(NBS[i]*дСтепени[i],
              NBS[i]*мСтепени[i], дВрем1,мВрем1);
    сложить(Кд,Км, дВрем1,мВрем1, Кд,Км)        (* <Кд,Км>  = <Кд,Км> + <дВрем1,мВрем1> *)  
(*
    добавить(дВрем1,мВрем1, Кд,Км)              (* <Кд,Км> += <дВрем1,мВрем1> *)  
*)
  КОН 
КОН lnГприбл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА lnГ-(Zд-,Zм-,Кд+,Км+:Вещ);                (* К:=ln( Г(Z) ) - Ln Г-функции от комплексного Z *)
ПЕР
  дLnZ,мLnZ,
  дX,мX,
  дY,мY:Вещ;
УКАЗ
  ЕСЛИ (Zд <= 0) И (Zм = 0) ТО
    ЕСЛИ (ЦЕЛЧАСТЬ(Zд - 1.D-8) - Zд) = 0 ТО           (* Отрицательное целое? *)
      дМатем.код:=дМатем.ОСОБЕННОСТЬ;
      Кд:=кпМатем.дДействМаксВещ;
      Км:=кпМатем.мДействМаксВещ;
      ВОЗВРАТ
    КОН 
  КОН;
  ЕСЛИ Zм < 0 ТО               (* III (IV) квадрант? *)
    сопряжение(Zд,Zм, дX,мX); (* Отображение во II (I) квадрант *)
    lnГ(дX,мX,дY,мY);         (* Попытаемся вычислить здесь *)
    сопряжение(дY,мY, Кд,Км)  (* Обратное отображение *)
  ИНАЧЕ
    ЕСЛИ Zд < 9 ТО            (* за пределами области определения NBS *)
      ln(Zд,Zм,дLnZ,мLnZ);
      алгебрВид(1+Zд,
                  Zм, дX,мX);
      lnГ(дX,мX,дY,мY);
      вычесть(дY,мY,дLnZ,мLnZ,Кд,Км)
    ИНАЧЕ
      lnГприбл(Zд,Zм,Кд,Км)   (* область определения NBS: 9 < Re(к) < 10 *)
    КОН 
  КОН 
КОН lnГ;


(*============================================================================*
 * Степенные функции комплексного аргумента в виде пары вещ.
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА степКЦ-(Zд-,Zм-:Вещ; n:ЦЕЛ; Кд+,Км+:Вещ); (* К:=Z^n - степень комплексного ЦЕЛая *)
ПЕР
  r,тета:Вещ;
УКАЗ
  r:=мод(Zд,Zм);
  тета:=arg(Zд,Zм);
  ЕСЛИ r = 0 ТО
    ЕСЛИ n = 0 ТО
      Кд:=кпМатем.дДействЕДИНИЦы;
      Км:=кпМатем.мДействЕДИНИЦы
    АЕСЛИ n > 0 ТО
      Кд:=кпМатем.дКомплексногоНОЛЯ;
      Км:=кпМатем.мКомплексногоНОЛЯ
    ИНАЧЕ
      дМатем.код:=дМатем.ОСОБЕННОСТЬ;
      Кд:=кпМатем.дДействМаксВещ;
      Км:=кпМатем.мДействМаксВещ
    КОН
  ИНАЧЕ
    тригонВид(дМатем.степВЦ(r,n),
              дМатем.уголВПи(n*тета), Кд,Км)
  КОН
КОН степКЦ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА степКВ-(Zд-,Zм-:Вещ; v:Вещ; Кд+,Км+:Вещ); (* К:=Z^v - степень комплексного действительная *)
ПЕР
  r,тета:Вещ;
УКАЗ
  r:=мод(Zд,Zм);
  тета:=arg(Zд,Zм);
  ЕСЛИ r = 0 ТО
    ЕСЛИ v = 0 ТО
      Кд:=кпМатем.дДействЕДИНИЦы;
      Км:=кпМатем.мДействЕДИНИЦы
    АЕСЛИ v > 0 ТО
      Кд:=кпМатем.дКомплексногоНОЛЯ;
      Км:=кпМатем.мКомплексногоНОЛЯ
    ИНАЧЕ
      дМатем.код:=дМатем.ОСОБЕННОСТЬ;
      Кд:=кпМатем.дДействМаксВещ;
      Км:=кпМатем.мДействМаксВещ
    КОН
  ИНАЧЕ
    тригонВид(дМатем.степВВ(r,v),
              дМатем.уголВПи(v*тета), Кд,Км)
  КОН
КОН степКВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА степКК-(Aд-,Aм-,Bд-,Bм-,Кд+,Км+:Вещ);     (* К:=A^B - степень комплексного комплексная *)
ПЕР
  дT,мT:Вещ;
УКАЗ
  ЕСЛИ (Aд = 0) И (Aм = 0) ТО
    ЕСЛИ (Bд = 0) И (Bм = 0) ТО
      Кд:=кпМатем.дДействЕДИНИЦы;
      Км:=кпМатем.мДействЕДИНИЦы  (* К= lim a^a = 1 при a -> 0 *)
    ИНАЧЕ
      Кд:=кпМатем.дКомплексногоНОЛЯ;
      Км:=кпМатем.мКомплексногоНОЛЯ       (* К= 0^b = 0, b > 0 *)
    КОН 
  ИНАЧЕ 
    ln(Aд,Aм, Кд,Км);             (* к=ln(a) -> к=a^b = exp(b*ln(a)) *)  
    умножить(Bд,Bм,Кд,Км,дT,мT);  (* t=b*к = b*ln(a)                 *)
    exp(дT,мT,Кд,Км)              (* к= exp(t)        = exp(b*ln(a)) *) 
  КОН
КОН степКК;


(*============================================================================*
 * Тригонометрические функции комплексного аргумента в виде пары вещ.
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА sin-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  sinX,cosX,
  sinhY,coshY:Вещ;
УКАЗ
  дМатем.sincos(Zд,sinX,cosX);
  дМатем.shch(Zм,sinhY,coshY);  
(*
  алгебрВид(sinX*coshY,
            cosX*sinhY, Кд,Км)
*)
       Кд:= sinX*coshY;
       Км:= cosX*sinhY
КОН sin;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА arcsin-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  rp,rm,s,врем,zx2:Вещ;
  дT,мT:Вещ;
УКАЗ
  дT:= Zм;
  мT:=-Zд;  (* T = Zм - i*Zд *)
  zx2:=2*Zд;
  s:= дМатем.кв(Zд)+дМатем.кв(Zм)+1;
  rp:=0.5*дМатем.квкор(s+zx2);
  rm:=0.5*дМатем.квкор(s-zx2);
  врем:=rp+rm;
(*
  алгебрВид(             дМатем.arcsin(rp - rm),
            знакЧ(дT,мT)*дМатем.ln(врем + дМатем.квкор(дМатем.кв(врем)-1)), Кд,Км);
*)
       Кд:=              дМатем.arcsin(rp - rm);
       Км:= знакЧ(дT,мT)*дМатем.ln(врем + дМатем.квкор(дМатем.кв(врем)-1))
КОН arcsin;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА cos-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  sinX,cosX,
  sinhY,coshY:Вещ;
УКАЗ
  дМатем.sincos(Zд,sinX,cosX);
  дМатем.shch(Zм,sinhY,coshY);  
(*
  алгебрВид( cosX*coshY,
            -sinX*sinhY, Кд,Км)
*)
        Кд:= cosX*coshY;
        Км:=-sinX*sinhY
КОН cos;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА arccos-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  дT,мT:Вещ;
УКАЗ
  arcsin(Zм,Zд,               дT,мT);                   (* T = arcsin(Z) *)
(*
  arcsin(z,t);                                          (* t = arcsin(z) *)
  вычесть(кпМатем.ДействПолПИ,t,к);          (* к = ПИ/2 - t             *)
*)
                                             (* К = ПИ/2 - T             *)
  Кд:= кпМатем.дДействПолПИ - дT;
  Км:= кпМатем.мДействПолПИ - мT
КОН arccos;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА tg-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  sinX2, cosX2,
  sinhY2,coshY2, врем:Вещ;
УКАЗ
  дМатем.sincos(2*Zд,sinX2,cosX2);
  дМатем.shch(2*Zм,sinhY2,coshY2);
  ЕСЛИ дМатем.код = 0 ТО
    врем:=cosX2+coshY2
  ИНАЧЕ
    врем:=coshY2 
  КОН;
  ЕСЛИ врем # 0 ТО
(*
    алгебрВид(sinX2/врем,
             sinhY2/врем, Кд,Км)
*)
        Кд:=  sinX2/врем;
        Км:= sinhY2/врем
  ИНАЧЕ                             (* z = ПИ/2 + к*ПИ *)
    дМатем.код:=дМатем.ОСОБЕННОСТЬ;
(*
    алгебрВид(дДействМаксВещ,
              мДействМаксВещ, Кд,Км)
*)
        Кд:= кпМатем.дДействМаксВещ;
        Км:= кпМатем.мДействМаксВещ
  КОН
КОН tg;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА arctg-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  квZд,incZм,decZм:Вещ;
УКАЗ
  ЕСЛИ 
       (Zд = 0) И (МОДУЛЬ(Zм) = 1)
  ТО                                  (* z = +/- i *)
    дМатем.код := дМатем.ОСОБЕННОСТЬ;
(*
    алгебрВид( 0,
                  дМатем.условСменаЗнакаЧ(дМатем.МаксВещ,Zм), Кд,Км)
*)
    Кд:= 0;
    Км:= дМатем.условСменаЗнакаЧ(дМатем.МаксВещ,Zм);
    ВОЗВРАТ
  КОН;
  квZд:=дМатем.кв(Zд);
  incZм:=Zм+1;
  decZм:=Zм-1;
(*
  алгебрВид( 0.5*(дМатем.arctg2(Zд,-decZм) - дМатем.arctg2(-Zд,incZм)),
            0.25* дМатем.ln((квZд + дМатем.кв(incZм))/(квZд + дМатем.кв(decZм))), Кд,Км)
*)
       Кд := 0.5*(дМатем.arctg2(Zд,-decZм) - дМатем.arctg2(-Zд,incZм));
       Км :=0.25* дМатем.ln((квZд + дМатем.кв(incZм))/(квZд + дМатем.кв(decZм)))
КОН arctg;


(*============================================================================*
 * Гиперболические функции комплексного аргумента в виде пары вещ.
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА sh-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  shx,chx:Вещ;
УКАЗ
  дМатем.shch(Zд,shx,chx);
  алгебрВид(
            shx*дМатем.cos(Zм),
            chx*дМатем.sin(Zм), Кд,Км)
КОН sh;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Arsh-(Zд-,Zм-,Кд+,Км+:Вещ);
(* arsh(z) = -i*arcsin(i*z) *)
ПЕР
  дT,мT:Вещ;
УКАЗ
  умножить(кпМатем.дМнимойЕДИНИЦы,
           кпМатем.мМнимойЕДИНИЦы,Zд,Zм,дT,мT);   (*           t= (0;1)*z    *)
  arcsin(дT,мT,Кд,Км);                            (* к= arcsin(t)            *)
  умножить(кпМатем.дМнимойЕДИНИЦы,
           кпМатем.мМнимойЕДИНИЦы,Кд,Км,дT,мT);   (*     t= (0;1)*к          *)
  отрицание(дT,мT,Кд,Км)                          (* к= -t                   *)
КОН Arsh;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ch-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  shx,chx:Вещ;
УКАЗ
  дМатем.shch(Zд,shx,chx);
  алгебрВид(
            chx*дМатем.cos(Zм),
            shx*дМатем.sin(Zм), Кд,Км)
КОН ch;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Arch-(Zд-,Zм-,Кд+,Км+:Вещ);
(* arch(Z) = знакЧ(Zм + j(1-Zд)) * j*arccos(Z) где Z = Zд+jZм *)
ПЕР
  дX,мX,
  дY,мY:Вещ;
УКАЗ
  arccos(Zд,Zм, Кд,Км);
  умножить(кпМатем.дМнимойЕДИНИЦы,
           кпМатем.мМнимойЕДИНИЦы,Кд,Км,дX,мX);
  алгебрВид(  Zм,
            1-Zд, дY,мY);
  ЕСЛИ
        знакЧ(дY,мY) = -1
  ТО
    отрицание(дX,мX, Кд,Км)
  ИНАЧЕ
    Кд:=дX; Км:=мX 
  КОН
КОН Arch;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА th-(Zд-,Zм-,Кд+,Км+:Вещ);
ПЕР
  x2,y2,
  siny2,cosy2,
  shx2,chx2, врем:Вещ;
УКАЗ
  x2:=2*Zд;
  y2:=2*Zм;
  дМатем.sincos(y2,siny2,cosy2);
  дМатем.shch(x2,shx2,chx2);

  ЕСЛИ дМатем.код = 0 ТО
    врем:=chx2+cosy2
  ИНАЧЕ
    врем:=chx2 
  КОН;
  ЕСЛИ врем # 0 ТО
    алгебрВид(
              shx2/врем,
             siny2/врем, Кд,Км)
  ИНАЧЕ (* z = i*(ПИ/2 + к*ПИ) *)
    дМатем.код:=дМатем.ОСОБЕННОСТЬ;
    алгебрВид(0,
               дМатем.МаксВещ, Кд,Км)
  КОН
КОН th;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Arth-(Zд-,Zм-,Кд+,Км+:Вещ);
    (* arth(z) = -i*arctg(i*z) *)
ПЕР
  дT,мT:Вещ;
УКАЗ
  ЕСЛИ
       (МОДУЛЬ(Zд) = 1) И (Zм = 0)
  ТО                                (* z = +/- 1 *)
    дМатем.код:=дМатем.ОСОБЕННОСТЬ;
    алгебрВид(дМатем.условСменаЗнакаЧ(дМатем.МаксВещ,Zд),
                                                      0 , Кд,Км);
  ИНАЧЕ 
    умножить(кпМатем.дМнимойЕДИНИЦы,
             кпМатем.мМнимойЕДИНИЦы,Zд,Zм,дT,мT);   (*          t= (0;1)*z  *)
    arctg(дT,мT,Кд,Км);                             (* к= arctg(t)          *)
    умножить(кпМатем.дМнимойЕДИНИЦы,
             кпМатем.мМнимойЕДИНИЦы,Кд,Км,дT,мT);   (*     t= (0;1)*к       *)
    отрицание(дT,мT,Кд,Км)                          (* к= -t                *)
  КОН 
КОН Arth;


(*-ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss-*)
УКАЗ
  NBS[0]:= 8.33333333333333D-02;
  NBS[1]:=-2.77777777777778D-03;
  NBS[2]:= 7.93650793650794D-04;
  NBS[3]:=-5.95238095238095D-04;
  NBS[4]:= 8.41750841750842D-04;
  NBS[5]:=-1.91752691752692D-03;
  NBS[6]:= 6.41025641025641D-03;
  NBS[7]:=-2.95506535947712D-02;

  алгебрВид( 0,            0, кпМатем.дКомплексногоНОЛЯ,   кпМатем.мКомплексногоНОЛЯ);  (* кнМатем.НОЛЬ               =< 0; 0> *)
  алгебрВид( 1,            0, кпМатем.дДействЕДИНИЦы,      кпМатем.мДействЕДИНИЦы);     (* кнМатем.ДействЕДИНИЦА      =< 1; 0>=W(0) *)
  алгебрВид(-1,            0, кпМатем.дМинусДействЕДИНИЦы, кпМатем.мМинусДействЕДИНИЦы);(* кнМатем.минусДействЕДИНИЦА =<-1; 0>=W(-ПИ)=W(+ПИ) *)
  алгебрВид( 0,            1, кпМатем.дМнимойЕДИНИЦы,      кпМатем.мМнимойЕДИНИЦы);     (* кнМатем.МнимаяЕДИНИЦА      =< 0; 1>=W(+ПИ/2)=<cos(+ПИ/2);sin(+ПИ/2)> *)
  алгебрВид( 0,           -1, кпМатем.дМинусМнимойЕДИНИЦы, кпМатем.мМинусМнимойЕДИНИЦы);(* кнМатем.минусМнимаяЕДИНИЦА =< 0;-1>=W(-ПИ/2)=<cos(-ПИ/2);sin(-ПИ/2)> *)

  алгебрВид(дМатем.МаксВещ,0, кпМатем.дДействМаксВещ,      кпМатем.мДействМаксВещ);     (* кнМатем.ДействМаксВещ      =<дМатем.МаксВещ;0> *)
  алгебрВид(дМатем.ПолПИ,  0, кпМатем.дДействПолПИ,        кпМатем.мДействПолПИ)        (* кнМатем.ДействПолПИ        =<дМатем.ПолПИ;  0> *)

КОН кпМатем.
