Помощь - Поиск - Пользователи - Календарь
Полная версия: Одномерный массив Need Help
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
lermontoff
Вообщем сама задача...
(Если не решу до среду то мне mega_chok.gif )

Составить Алгоритм и программу ( мне или то или то smile.gif ) , которые в массиве из N действительных чисел (N не превышает 25)упорядочивают по убыванию отрицательные числа и по возрастанию положительные.
Взаимное расположение отрицательных и положительных чисел сохраняется.Вывести на экран исходный и модифицированный массивы. (Дополнительный массив создавать нельзя smile.gif )

особую сложность составил сабж выделенный красным .

ЗАРАНЕЕ СПАСИБО smile.gif
GoodWind
храни в двух дополнительных переменных индексы предыдущего отрицательного и предыдущего положительного эл-та массива...
volvo
GoodWind, а пошаманить? smile.gif

lermontoff, в принципе, можно ЧУТЬ-ЧУТЬ подправить процедуру Bubble из нашего FAQ-а, чтобы она делала то, что тебе нужно... Hint: для этого нужно передать в процедуру еще один дополнительный параметр... yes2.gif

const
  n = 10;
type
  arrType = array[1 .. n] of integer;

procedure Bubble(var ar: arrType; const n: integer;
          positive: boolean);
var i, j, pred_j, T: Integer;
begin
  for i := 1 to n do begin
    if (ar[i] < 0) = positive then continue;


    for j := n downto i+1 do begin
      if (ar[j] < 0) = positive then continue;

      pred_j := pred(j);
      while (pred_j > 0) and ((ar[pred_j] < 0) = positive) do dec(pred_j);
      if pred_j = 0 then break;

      if (ar[Pred_j] > ar[j]) = positive then begin
        T := ar[Pred_j]; ar[Pred_j] := ar[j]; ar[j] := T
      end
    end;
  end
end;


const
  arr: arrType =
    (1, 42, 33, -14, 5, -6, 7, -8, 9, 10);
var
  i: integer;
begin
  for i := 1 to n do
    write(arr[i]:4);
  writeln;

  bubble(arr, n, true);
  bubble(arr, n, false);

  for i := 1 to n do
    write(arr[i]:4);
  writeln;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.