Реализацию на Си пишите сами, я его не знаю, могу подсказать алгоритм. Нужно обе переменные разделить на действительную часть и мнимую. A = A1 + j*A2; A1 = 1; A2 = -2 B = B1 + j*B2; B1 = 1; B2 = 3 И точно также все результаты вычислений делятся на две части. И каждую скобку записывай в отдельную пару переменных, а на последнем шаге всё сложишь и умножишь. Можно и подпрограммы сделать на сумму и произведение. Сумма S = A + B = (A1 + B1) + j*(A2 + B2); S1 = A1 + B1; S2 = A2 + B2 Произведение P = A*B = (A1*B1 - A2*B2) + j*(A1*B2 + A2*B1) P1 = A1*B1 - A2*B2; P2 = A1*B2 + A2*B1 Квадраты AA = A*A = (A1*A1 - A2*A2) + j*(2*A1*A2) AA1 = A1*A1 - A2*A2; AA2 = 2*A1*A2 BB = B*B = (B1*B1 - B2*B2) + j*(2*B1*B2) BB1 = B1*B1 - B2*B2; BB2 = 2*B1*B2
// PascalABC.NET 3.2, сборка 1492 от 03.07.2017 // Внимание! Если программа не работает, обновите версию!
begin var a:=ArrRandom(ReadInteger('n='),-5,5).Select(m->m/10).ToArray; a.Println; Writeln('Номер максимального элемента ',a.IndexMax+1); var s:=a.IndexesOf(x->x=0).Take(2); if s.Count<2 then Writeln('Массив не содержит двух нулей') else if s.First+1=s.Last then Writeln('Нулевые элементы соседствуют') else Writeln('Произведение элементов между первой парой нулей ', a[s.First+1:s.Last].Aggregate(1.0,(x,y)->x*y)) end.
Пример n= 15 0.1 -0.4 0 -0.3 0.1 0.2 0 -0.5 -0.5 0.2 -0.3 -0.3 0.5 0.4 0.5 Номер максимального элемента 13 Произведение элементов между первой парой нулей -0.006
Нужно обе переменные разделить на действительную часть и мнимую.
A = A1 + j*A2; A1 = 1; A2 = -2
B = B1 + j*B2; B1 = 1; B2 = 3
И точно также все результаты вычислений делятся на две части.
И каждую скобку записывай в отдельную пару переменных, а на последнем шаге всё сложишь и умножишь.
Можно и подпрограммы сделать на сумму и произведение.
Сумма
S = A + B = (A1 + B1) + j*(A2 + B2); S1 = A1 + B1; S2 = A2 + B2
Произведение
P = A*B = (A1*B1 - A2*B2) + j*(A1*B2 + A2*B1)
P1 = A1*B1 - A2*B2; P2 = A1*B2 + A2*B1
Квадраты
AA = A*A = (A1*A1 - A2*A2) + j*(2*A1*A2)
AA1 = A1*A1 - A2*A2; AA2 = 2*A1*A2
BB = B*B = (B1*B1 - B2*B2) + j*(2*B1*B2)
BB1 = B1*B1 - B2*B2; BB2 = 2*B1*B2
// Внимание! Если программа не работает, обновите версию!
begin
var a:=ArrRandom(ReadInteger('n='),-5,5).Select(m->m/10).ToArray;
a.Println;
Writeln('Номер максимального элемента ',a.IndexMax+1);
var s:=a.IndexesOf(x->x=0).Take(2);
if s.Count<2 then Writeln('Массив не содержит двух нулей')
else if s.First+1=s.Last then Writeln('Нулевые элементы соседствуют')
else
Writeln('Произведение элементов между первой парой нулей ',
a[s.First+1:s.Last].Aggregate(1.0,(x,y)->x*y))
end.
Пример
n= 15
0.1 -0.4 0 -0.3 0.1 0.2 0 -0.5 -0.5 0.2 -0.3 -0.3 0.5 0.4 0.5
Номер максимального элемента 13
Произведение элементов между первой парой нулей -0.006