Тема урока: «Вставка и удаление элементов массива».
Предмет: Информатика
и ИКТ.
Класс: 10 (профиль).
Ключевые слова: информатика, практическая
работа, программирование, массивы, вставка, удаление элементов.
Тип урока: практическая работа.
Оборудование: Раздаточный материал;
персональные компьютеры.
Литература:
- Попов В.Б. Turbo Pascal для школьников: Учебн. пособие - 3-е доп. изд. – М.: Финансы и
статистика, 2004, - 528 с.: ил.
- Семашко Г.Л.,
Салтыков А.И. «Программирование на языке паскаль», М: «Наука», 1993
г.
- Фаронов В.В. «Turbo Pascal
7.0. Начальный курс», М: «Нолидж», 1997
г.
Цель работы:
-
разобрать принципы вставки и удаления элементов в
одномерных и двумерных массивах,
-
закрепить полученные знания, путем решения задач.
Время выполнения: 2 урока.
Ход урока.
I. Удаление элементов из массива.
Одномерный массив
|
Двумерный массив
|
Постановка задачи:
|
Дан массив 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.
|
Задачи для самостоятельного решения:
1.
В одномерном массиве A(N) найти min элемент и удалить его.
2.
В двумерном массиве B(N,M) удалить строку с номером k. При этом выполнить проверку: не превышает ли значение k количества строк массива B.
II. Вставка (включение)
элементов в массив.
Одномерный массив
|
Двумерный массив
|
Постановка задачи:
|
Дан массив 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.
|
Задачи для самостоятельного решения:
1. В одномерном массиве A(N)
найти max элемент и вставить за ним элемент равный 2*max.
2. В двумерном массиве B(N,M) вставить k-ую строку элементов массива C(M). При этом выполнить проверку: не превышает ли
значение k количества строк массива B.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.