Прошу решить задание в Паскале АБС

Приложения:

Ответы

Ответ дал: huston81
1

Ответ:

Готово

Объяснение:

program massiv;

var

 i, maxi, mini, n: integer;

 max, min: real;

 a: array of real;

 znak: boolean;

Function isznak(a: array of real): boolean;  // Проверка знакопеременности

 var i: integer;

     b: real;

 begin

   isznak := true;

   b := a[0];

   for i := 1 to Length(a) - 1 do

   begin

     if a[i] = 0 then continue;

     if (a[i] / abs(a[i])) <> (b / abs(b)) * (-1) then isznak := false;

     b := a[i];

   end;

 end;

Function minmas(a: array of real; var mini: integer): real;   // Минимальный элемент и его индекс

var i: integer;

   min: real;

begin

 min := a[0];

 mini := 0;

 for i := 1 to Length(a) - 1 do

   if a[i] < min then

   begin

     min := a[i];

     mini := i;

   end;

 minmas := min;

end;

Function maxmas(a: array of real; var mini: integer): real;   // Максимальный элемент и его индекс

var i: integer;

   max: real;

begin

 max := a[0];

 maxi := 0;

 for i := 1 to Length(a) - 1 do

   if a[i] > max then

   begin

     max := a[i];

     maxi := i;

   end;

 maxmas := max;

end;

Procedure add(a: array of real; max: real; mini, maxi: integer);   // Преобразование массива

var i: integer;

begin

 if mini > maxi then Swap(mini, maxi);

 for i := mini + 1 to maxi - 1 do

   a[i] := a[i] + max;

end;

Function summod(a: array of real): real;   // Сумма модулей

var i: integer;

   sum: real;

begin

 sum := 0;

 for i := 0 to Length(a) - 1 do

   sum := sum + Abs(a[i]);

 summod := sum;

end;

begin    // Основной блок

 Write('Введите размер массива N: ');

 ReadLn(n);

 SetLength(a, n);

 WriteLn('Введите последовательность чисел:');

 for i := 0 to n - 1 do

 begin

   Write('A[', i, '] = ');

   ReadLn(a[i]);

 end;

 if isznak(a) then

 begin

   WriteLn('Введенная последовательность является знакопеременной.');

   WriteLn('Сумма модулей всех элементов последовательности равна ', summod(a));

 end

 else

 begin

   WriteLn('Введенная последовательность не является знакопеременной.');

   min := minmas(a, mini);

   max := maxmas(a, maxi);

   if abs(maxi - mini) > 1 then add(a, max, mini, maxi);    

   WriteLn('Результат преобразования массива:');

   for i := 0 to n - 1 do

     Write(a[i], ', ');

   WriteLn;

 end;

end.

Вас заинтересует