Ну, вот что пришло в голову:
Код
const
{ Это только для примера, чтобы убедиться, что программа работает }
n = 10;
a: array[1 .. n] of real =
(1, 2, -4, 5, -6, 9, -11, 8, 11, 10);
var
i, i_neg, i_non_neg: integer;
z: real;
begin
z := 0;
{ это можно раскомментировать и сюда будут записаны случ. значения }
{
for i := 1 to n do
a[i] := random(200) - 100;
}
i_neg := 1; i_non_neg := 1;
repeat
while (a[i_neg] >= 0) and (i_neg <= n) do
inc(i_neg);
if i_neg <= n then begin
while (a[i_non_neg] < 0) and (i_non_neg <= n) do
inc(i_non_neg);
if i_non_neg <= n then begin
z := z + a[i_neg]*a[i_non_neg];
inc(i_neg); inc(i_non_neg);
end;
end;
if (i_neg > n) or (i_non_neg > n) then break;
until false;
writeln('z = ', z:0:0);
end.