Практическая работа.
Вставка и удаление элементов массива.
Ход работы.
Удаление элементов из массива.Одномерный массив | Двумерный массив |
Постановка задачи: | |
Дан массив 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). Включить на 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.

