Консультация № 138016
27.05.2008, 10:34
0.00 руб.
0 1 1
Дан массив отрицательных и положительных чисел с именем Х. Написать программу переноса отрицательных чисел в начало массива, а положительных в конец, сохраняя исходное взаимное расположение, как среди положительных чисел, так и среди отрицательных. При написании текста программ рекомендуется воспользоваться массивом У, как вспомогательным.

Обсуждение

Неизвестный
28.05.2008, 23:16
общий
это ответ

<i>Здравствуйте, <b>Хорост Андрей Викторович</b>!</i>

В приложении приведен пример решения с комментариями. Массив <i>Y</i> в применяется для хранения положительных (>=0) чисел. Размерность массивов <i>X</i> и <i>Y</i> одинаковая (на самом деле, размерность массива <i>Y</i> в данном примере можно взять на один меньше).
Переменная <i>с</i> применяется для того, чтобы запоминать количество сохраненных в массиве <i>Y</i> положительных чисел.

<em>Удачи!</em>

Приложение:
program q138016;uses Crt;const {Размер массива} N = 50;type TNArr = array[0..N-1] of Integer;var X, Y: TNArr; i, firstPos, c: Integer;begin {Очищаем экран} ClrScr; {Инициализируем генератор случайных чисел} Randomize; writeln(‘Before:‘); {Случайным образом заполняем массив Х} for i:= 0 to N-1 do begin {Диапазон [-500..500]} X[i]:= Random(1001) - 500; {Выводим массив} write(X[i]:5); end; {Позиция первого положительного числа в массиве Х} firstPos:= -1; {Количество положительных чисел в массиве Y} c:= 0; for i:= 0 to N-1 do begin if (X[i] >= 0) then begin {Если позиция не определена, запоминаем ее} if (firstPos < 0) then firstPos:= i; end else {Нашли отрицательное число} if (firstPos >= 0) then begin {Копируем положительные числа в массив Y} move(X[firstPos + c], Y[c], (i - firstPos - c)*sizeof(Integer)); {Запоминаем количество элементов в массиве Y} c:= i - firstPos; {Перемещаем отрицательное число ближе к началу} X[firstPos]:= X[i]; {Запоминаем новую позицию для положительных чисел} Inc(firstPos); end; end; {Перемещаем положительные числа} if (c > 0) then move(Y[0], X[firstPos], c*sizeof(Integer)); writeln; writeln; writeln(‘After:‘); {Выводим результат} for i:= 0 to N-1 do write(X[i]:5); writeln;end.
Форма ответа