Преобразовать массив так, чтобы элементы, большие 1, располагались после всех остальных - Pascal ABC

Формулировка задачи:

В одномерном массиве, состоящем из n вещественных элементов, вычис лить: 1) максимальный по модулю элемент массива; 2) сумму элементов массива, расположенных между первым и вторым положительными элементами. Преобразовать массив таким образом, чтобы элементы, большие 1, располагались после всех остальных. Упорядочить каждую часть массива по возрастанию, используя алгоритм сортировки методом прямого выбора
uses
  crt;
 
const
  n = 10;
 
var
  mas: array[1..n] of real;
  del, j, i, l: integer;
  max, sum: real;
 
begin
  for i := 1 to n do
  begin
    del := random(7) + 2;
    mas[i] := random(100) - 48;
    mas[i] := mas[i] / del;
    write(mas[i]:0:2, ' ');
  end;
  max := mas[1];
  for i := 2 to n do
    if abs(max) < abs(mas[i]) then max := mas[i];
  
  writeln;
  writeln('1) ', max:0:2, '.');
  for i := 1 to n do
    if mas[i] > 0 then break;
  
  for j := i + 1 to n do
    if mas[j] > 0 then break;
  
  writeln;
  
  if (i = n) or (j = n) then writeln('2) Недостаточно положительных элементов.')
  else if abs(i - j) = 1 then writeln('2) Они расположены рядом - между ними нету элементов.')
  else if abs(i - j) = 2 then writeln('2) ', mas[(i + j) div 2]:0:2, '.')
        else
  begin
    for l := i + 1 to j - 1 do
      sum := sum + mas[l];
    writeln('2) ', sum:0:2, '.');
  end;
  writeln;
  for i := 1 to n do 
    if mas[i] <= 1 then begin
      for j := 1 to n do 
        if mas[j] > 1 then begin
          sum := mas[j];
          mas[j] := mas[i];
          mas[i] := sum;
        end;
    end;
    writeln;
    for i:=1 to n do 
    write(mas[i]:0:2, ' ');
end.


textual

Код к задаче: «Преобразовать массив так, чтобы элементы, большие 1, располагались после всех остальных - Pascal ABC»

uses  crt;
const n = 10;
var mas:array[1..n] of real;
    i,j,i1,i2,k,p,x:integer;
    max, sum: real;
begin
writeln('Исходный массив');
i1:=0;
i2:=0;
for i:=1 to n do
 begin
  mas[i]:=-3+6*random;
  write(mas[i]:6:2);
  if mas[i]>0 then
  if i1=0 then i1:=i
  else if i2=0 then i2:=i;
 end;
max:=mas[1];
for i:= 2 to n do
if abs(max)<abs(mas[i]) then max:= mas[i];
writeln;
writeln('1) Максимальный по модулю=',max:0:2);
write('2) ');
if i1=0 then writeln('В массиве нет положительных чисел')
else if i2=0 then writeln('В массиве нет двух положительных чисел');
sum:=0;
if i2-i1>1 then
for i:=i1+1 to i2-1 do
sum:=sum+mas[i];
writeln('Сумма элементов между первым и вторым полжительными=',sum:0:2);
k:=0;
for i:=1 to n do
if mas[i]<=1 then//переставим меньшие 1 вперед
  begin
    k:=k+1;
    sum:=mas[i];
    for j:=i downto k+1 do
    mas[j]:=mas[j-1];
    mas[k]:=sum;
  end;
writeln('3) Перестановка больших 1 в конец');
for i:=1 to n do
write(mas[i]:6:2);
writeln;
for i:=2 to k do
for j:=1 to i-1 do
if mas[i]<mas[j] then
 begin
  sum:=mas[i];
  for p:=i-1 downto j do
  mas[p+1]:=mas[p];
  mas[j]:=sum;
 end;
for i:=k+2 to n do
for j:=1 to i-1 do
if mas[i]<mas[j] then
 begin
  sum:=mas[i];
  for p:=i-1 downto j do
  mas[p+1]:=mas[p];
  mas[j]:=sum;
 end;
writeln('4) Сортировка обеих частей');
for i:=1 to n do
write(mas[i]:6:2);
end.
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.


СДЕЛАЙТЕ РЕПОСТ

5   голосов, оценка 4.000 из 5

Источник
Похожие ответы