Практическая работа.

Вставка и удаление элементов массива.

Ход работы.

Удаление элементов из массива.

Одномерный массив

Двумерный массив

Постановка задачи:

Дан массив A(N). Удалить элемент, расположенный на месте k.

Дан массив B(N, M). Удалить столбец с номером k. (аналогично для удаления строки)

Описание способа удаления:

Сдвинуть весь «хвост» массива, начиная с элемента с номером k+1, на одну позицию влево, т.е. выполняя операцию: ai=ai+1, где i = k, k+1, …, N-1

Полученный массив будет содержать N-1 элемент.

Сдвинуть все столбцы, начиная с k+1 по m на одну позицию влево, выполнив операции:

Для j от 1 до m-1 делать

  Перебрать все строки с 1 по n, выполнив

ai, j=ai, j+1

В новом массиве будет M-1 столбец.

Пример:

Дано: 3 5 7 8 9  N=5,  k=2

Операции:  a2:=a3;  a3:=a4;  a4:=a5

Итог: 3 7 8 9

Дано: N=3, M=4, k=2  Операции:  Результат:

1 5 2 7  a1,2:=a1,3;  a1,3:=a1,4; 

1 2 7

8 4 3 5  a2,2:=a2,3;  a2,3:=a2,4;

8 3 5

0 9 1 4  a3,2:=a3,3;  a3,3:=a3,4;

  0 1 4

Программа

Program pr1;

Uses crt;

Var a:array [1..100] of integer;

n, k, i:byte;

Begin

Clrscr;

Randomize;

Writeln(‘Введите количество элементов’);

Readln(n);

Writeln(‘Введите № удаляемого элемента’);

Readln(k);

{формирование массива случайным образом}

For i:=1 to n do begin

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

write(a[i]:4)

end;

writeln;

{удаление заданного элемента}

For i:=k to n-1 do

a[i]:=a[i+1];

{вывод итогового массива}

For i:=1 to n-1 do

write(a[i]:4);

readln

end.


program pr2;

uses crt;

var b:array[1..100,1..100] of real;  i, j,m, n,k:byte;

begin

clrscr; randomize;

writeln('Введите кол-во строк и столбцов');

readln(n, m);

writeln('Введите № удаляемого столбца');

readln(k);

for i:=1 to n do begin  {формируем  массив}

for j:=1 to m do begin

b[i, j]:=51*random-25;

write(b[i, j]:8:2)

end; writeln

end;

for j:=k to m-1 do  {удаляем k-ыйстолбец}

for i:=1 to n do

b[i, j]:=b[i, j+1];

writeln;

{выводим полученный массив}

for i:=1 to n do begin 

for j:=1 to m-1 do begin

write(b[i, j]:8:2)

end;

writeln

end;

readln end.

Задачи для самостоятельного решения:

НЕ нашли? Не то? Что вы ищете?
В одномерном массиве A(N) найти min элемент и удалить его. В двумерном массиве B(N, M) удалить строку с номером k. При этом выполнить проверку: не превышает ли значение k количества строк массива B. Вставка (включение) элементов в массив.

Одномерный массив

Двумерный массив

Постановка задачи:

Дан массив A(N). Включить на k место в этом массиве элемент, равный m.

Дан массив B(N, M). Добавить столбец с номером k. Элементы нового столбца равны элементам массива C(N).(аналогично для добавления строки)

Описание способа удаления:

Перед включением заданного элемента  в массив, необходимо раздвинуть этот массив, т.е. передвинуть «хвост» массива вправо на одну позицию, т.е. выполняя операцию: ai+1=ai, где i = N, N-1, …, k. Перемещение элементов массива начинаем с конца, в противном случае весь хвост массива заполнится k-ым элементом.

Размер массива увеличится до N+1 элемента.

Сдвинуть все столбцы, начиная с m по k на одну позицию вправо, выполнив операции:

для j от m до k делать

  Перебрать все строки с 1 по n, выполнив

ai, j+1=ai, j

Затем в i=1-ой по n строках ai, k:=ci

В новом массиве будет M-1 столбец.

Важно: при добавлении столбца (строки) в двумерный массив, элементы этого столбца (строки) берутся из дополнительного одномерного массива размером=кол-ву строк двумерного массива (=кол-ву столбцов) либо вводятся с клавиатуры.

Пример:

Дано: 3 8 7 6 5  N=5,  k=2,  m=4

Операции: a6:=a5=5;  a5:=a4=6; a4:=a3=7;  a3:=a2=8

a2:=m=4

Итог: 3 4 8 7 6 5

Дано: N=3, M=4, k=3  Операции:  Результат:

C(N)={6,8,2}  a1,5:=a1,4;  a1,4:=a1,3;  1 5 6 2 7

1 5 2 7  a2,5:=a2,4;  a2,4:=a2,3;  8 4 8 3 5

8 4 3 5  a3,5:=a3,4;  a3,4:=a3,3;  0 9 2 1 4

0 9 1 4 

Программа

Program pr3;

Uses crt;

Var a:array [1..100] of integer;

n, k,i:byte; m:integer;

Begin

Clrscr;

Randomize;

Writeln('Введите количество элементов');

Readln(n);

Writeln('Введите № включаемого элемента');

Readln(k);

Writeln('Введите значение включаемого эл-та');

Readln(m);

{формируем массив}

For i:=1 to n do begin

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

write(a[i]:4)

end; writeln;

{раздвигаем эл-ты массива}

For i:=n downto k do

a[i+1]:=a[i];

{заносим новый эл-т на k-ую позицию}

a[k]:=m;

{выводим получившийся массив}

For i:=1 to n+1 do

write(a[i]:4);

readln

end.

program pr4;

uses crt;

var b:array[1..100,1..100] of real;  i, j,m, n,k:byte;

c:array[1..100] of real;

begin

clrscr; randomize;

writeln('Введите кол-во строк и столбцов');

readln(n, m);

writeln('Введите № добавляемого столбца');

readln(k);

for i:=1 to n do begin  {формируем исходный массив}

for j:=1 to m do begin

b[i, j]:=51*random-25;

write(b[i, j]:8:2) 

end;writeln;end;writeln;

for i:=1 to n do begin  {форм. массив доб-го столбца}

c[i]:=51*random-25; write(c[i]:8:2)

end; writeln; writeln;

for j:=m downto k do  {раздвигаем столбцы}

for i:=1 to n do

b[i, j+1]:=b[i, j];

for i:=1 to n do  {добавляем столбец}

b[i, k]:=c[i];

writeln;

for i:=1 to n do begin  {выводим полученный массив}

for j:=1 to m+1 do begin

write(b[i, j]:8:2)

end; writeln

end; readln end.

Задачи для самостоятельного решения:

В одномерном массиве A(N) найти max элемент и вставить за ним элемент равный 2*max. В двумерном массиве B(N, M)  вставить k-ую строку элементов массива C(M). При этом выполнить проверку: не превышает ли значение k количества строк массива B.