Обработка массивов
Одномерные массивы
Алгоритмы удаления, вставки и перестановки элементов
Задача 1. Дан массив A, состоящий из 12 элементов. Элементы массива - произвольные целые числа. Поменять местами значения 1 и 2 элементов, 3 и 4 и т.д. Измененный массив вывести на экран.
USES Crt;
VAR
A:ARRAY[0..12] OF INTEGER;
I: BYTE; PP:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO 12 DO Begin
A[I]:=Random(20); Write(A[I]:3);
End; WriteLn;
I:=1;
WHILE I<=12 DO Begin
{перестановка элементов местами, используя промежуточную переменную PP }
PP:=A[I]; A[I]:=A[I+1]; A[I+1]:=PP;
I:=I+2;
End;
WriteLn(' Значения элементов измененного массива');
FOR I:=1 TO 12 DO
Write(A[I]:3);
END.
Задача 2. Дан массив целых чисел из 15 элементов, заполненный случайным образом числами из промежутка [-20,50].
1. Удалить из него все элементы, в записи которых есть цифра 5.
2. Вставить число K после всех элементов, кратных своему номеру (К вводится с клавиатуры).
3. Поменять местами первый положительный и последний отрицательный элементы.
USES Crt;
VAR
P,P1:ARRAY[0..15] OF INTEGER; P2:ARRAY[0..30] OF INTEGER;
I,J,E,D,PP,PO,FL: BYTE; K,PRP:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива P');
FOR I:=1 TO 15 DO Begin
P[I]:=Random(70)-20; Write(P[I]:4);
End; WriteLn;
J:=1;
{ 1. Удаление }
FOR I:=1 TO 15 DO Begin
E:=ABS(P[I]) mod 10; {Выделение единиц}
D:=ABS(P[I]) div 10; {Выделение десятков}
{ формирование нового массива }
IF (E<>5) AND (D<>5) THEN Begin P1[J]:=P[I]; J:=J+1; End;
End;
WriteLn(' Массив, в котором нет элементов с цифрой 5');
FOR I:=1 TO J-1 DO
Write(P1[I]:4);
WriteLn;
{ 2. Вставка }
Write(' Введите значение переменной '); ReadLn(K);
J:=1;
FOR I:=1 TO 15 DO Begin
P2[J]:=P[I]; J:=J+1;
IF ABS(P[I]) mod I = 0 THEN Begin P2[J]:=K; J:=J+1; End;
End;
WriteLn(' Массив, в котором после элементов, кратных своему номеру, вставлено число =',K);
For I:=1 TO J-1 DO
Write(P2[I]:4);
WriteLn;
{ 3. Перестановка }
{ Нахождение первого положительного и последнего отрицательного элемента }
FL:=0;
FOR I:=1 TO 15 DO Begin
IF (P[I]>0) AND (FL=0) THEN Begin PP:=I; FL:=1; End;
IF P[I]<0 THEN PO:=I;
End;
{ перестановка местами первого положительного и последнего отрицательного'}
PRP:=P[PP]; P[PP]:=P[PO]; P[PO]:=PRP;
WriteLn(' Массив, в котором первый положительный и последний отрицательный');
WriteLn(' поменяли местами');
FOR I:=1 TO 15 DO
Write(P[I]:4);
END.
.....................................................................................................................................
Практические задания
.....................................................................................................................................
Дан массив целых чисел из 10 элементов, заполненный случайным образом из промежутка [-40, 30].
1. Удалить из него все элементы, которые состоят из одинаковых цифр (включая однозначные числа).
2. Вставить число К перед всеми элементами, в которых есть цифра 1 (К вводится с клавиатуры)
3. Переставить первые три и последние три элемента местами, сохраняя порядок их следования.