Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник программирование 7-9 на печать.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
6.6 Mб
Скачать

§ 20. Замены и перестановки в массиве.

Задачи замены в массивах предполагают изменение значений элементов массива в соответствии с условием (заменить все отрицательные значения их модулями, все четные положительные элементы уменьшить вдвое и т.д.).

Упражнение 36. Дан целочисленный массив, заданный случайными числами на промежутке [-50; 50]. Заменить в массиве все отрицательные элементы им противоположными.

Для решения задачи выполним просмотр массива с начала. Каждый элемент сравним с нулем, при этом отрицательные значения элементов заменим им противоположными ( if (x[i]<0) then x[i]=-x[i] ). Чтобы мы могли увидеть произведенные изменения, надо выполнить вывод массива дважды: до и после замены.

Program Zameny;

Const N=10;

Var x : array [1..N] of integer;

I : integer; {счетчик индексов элементов}

Begin

{цикл заполнения и вывода массива:}

For i:=1 to N do

Begin x[i]:=random(101)-50;

Write (x[i]: 4);

End;

Writeln; {- после вывода элементов массива переходим на новую строку}

{цикл замены отрицательных значений элементов массива на противоположные и вывода элементов:}

For i:=1 to N do

Begin if (x[i]<0) then x[i]:=-x[i];

Write (x[i]: 4);

End;

Writeln; {- после вывода элементов массива переходим на новую строку}

End.

Задачи перестановок в массивах предполагают в первоначально заданном массиве выполнить обмен местами отдельных элементов в соответствии с условием (поменять местами наибольший и наименьший элементы, элементы четных позиций с элементами нечетных позиций и т.д.).

Упражнение 37. Дан целочисленный массив, заданный случайными числами на промежутке [-10; 10]. Сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего.

То есть должна быть реализована схема перестановок:

x[1] -> x[N],

x[2] -> x[1],

x[3] -> x[2],... ,

x[N] -> x[N-1].

Одним из алгоритмов такого циклического сдвига является следующая последовательность действий. Поместим в переменную-буфер первый элемент массива (buf:=x[1] ). Выполним смещение остальных элементов влево на одну позицию (x[i]:=x[i+1] ). При этом важен порядок смещения: на освободившееся место первого элемента перемещается второй, на место второго – третий и т.д. В результате таких перемещений освобождается место последнего элемента, на которое перемещается элемент из буфера. В данной задаче целесообразно выполнить вывод массива дважды: до и после циклического сдвига.

Program Perestanovka;

Const N=15;

Var x : array [1..N] of integer;

I : integer; {счетчик индексов элементов}

Buf : integer; {переменная-буфер}

Begin

{цикл заполнения и вывода массива:}

For i:=1 to N do

Begin x[i]:=random(21)-10;

Write (x[i]: 4);

End;

Writeln; {-после вывода элементов массива перешли на новую строку}

Buf:=x[1]; {-поместили в переменную-буфер первый элемент массива}

{начинаем цикл перестановок (всего N-1 перестановок):}

For i:= 1 to N-1 do x[i]:=x[i+1];

x[N]:=Buf; {-поместили в последнюю ячейку массива значение из переменной-буфера – последняя перестановка }

{цикл вывода массива:}

For i:=1 to N do Write (x[i]: 4);

Writeln; {-после вывода элементов массива перешли на новую строку}

End.

Домашние вопросы и задачи:

50. Целочисленный массив заполняется с клавиатуры. Все четные положительные элементы уменьшить вдвое.

51. Дан целочисленный массив, заданный случайными числами на промежутке [1; 30]. Поменять местами элементы четных позиций с элементами нечетных позиций.