Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как удалить элемент массива паскаль

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

Тема: Удаление элементов из одномерного массива.

Задача. Удалить из массива максимальный элемент, если все элементы разные.

Для того, чтобы решить задачу нужно:

  • найти номер максимального элемента k;
  • сдвинуть все элементы, начиная с k-го, на один элемент влево;
  • последнему элементу присвоить значение 0;
  • уменьшить количество элементов массива на единицу.

Рассмотрим задачу на конкретном примере. Пусть дан одномерный массив из целых чисел, состоящий из 10 элементов:

6, 3, 4, 7, 11, 2, 13, 8, 1, 5.

Номер максимального элемента равен 7 (k=7), то есть, начиная с 7-го элемента, будем сдвигать элементы на один влево: 7-му присвоим значение 8-го, 8-му присвоим значение 9-го, 9-му присвоим значение 10-го, на этом сдвиг заканчивается. Таким образом, сдвиг начинается с k-го элемента и идет по (n-1)-й (где n — количество элементов в массиве). После этого последнему элементу присвоим значение, равное 0, и тогда массив будет следующим:

6, 3, 4, 7, 11, 2, 8, 1, 5, 0.

Примечание. При удалении элемента размерность массива не изменяется.

Составим программу, удаляющую максимальный элемент из одномерного массива. В программе опустим уже знакомые Вам процедуры заполнения массива и вывода элементов массива на экран. Чтобы последний элемент не выводился, модифицируйте соответствующую процедуру таким образом, чтобы ей передавать не только массив, но и количество элементов, которые надо вывести, начиная с первого.

Program DeleteK;
Const
n=30; dd=51;
Type
MyArray = Array [1..n] of Integer;
Var
A : MyArray;
k : Integer;

Procedure InsertMas1(Var m : MyArray; n : integer);
. . .

Procedure InsertMas2(Var m : MyArray; n : integer);
. . .

Procedure PrintMas(m : MyArray; n : integer);
. . .

Procedure Delete(Var m : MyArray; Var n:integer; k1 : integer);
Var
i : integer;
Begin
for i := 1 to n-1 do
m[i] := m[i+1];
m[n]:=0;
Dec(n);
End;

Begin
. . .
k:=Maximum(A,m);
Delete(A,m,k);
. . .
End.

Задание. На основе имеющегося шаблона программы и рассмотренного алгоритма решения задачи, закончите составление работающей программы. Результат покажите учителю для оценки.

Изменим условие задачи. Пусть максимальный элемент встречается несколько раз.

Для решения этой задачи необходимо удалять несколько элементов. Это лучше сделать с конца массива, так как, иначе, нужно будет снова возвращаться к элементу с номером, который только что удаляли для предупреждения частного случая, когда подряд идут два максимальных элемента (при удалении первого на его месте будет стоять второй снова максимальный элемент. Это можно сделать при помощи цикла с параметром (downto). Кроме того, номер максимального элемента запоминать не нужно. При прохождении массива с конца, если элемент имеет максимальное значение, то удалим его, при этом значение счетчика k будем увеличивать на 1.

Задание. С учетом выше изложенного составьте программу, решающую поставленную задачу или дополните предыдущую. Результат покажите учителю для оценки.

Внимание! Любая Ваша программа должна сопровождаться комментариями.

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

  1. Удалить первый отрицательный элемент, если таковой имеется.

Удалить все отрицательные элементы.

Удалить все элементы, большие данного числа А (А вводить с клавиатуры).

Удалить все четные элементы, стоящие на нечетных местах.

Удалить все повторяющиеся элементы, оставив только их первые вхождения, то есть получить массив различных элементов.

Удалить последний четный элемент.

Удалить все элементы, кратные 3 или 5.

Удалить все элементы, начиная с k1-го по k2-ой. Сделать проверку корректности ввода значений k1 и k2, если ввод некорректный, то вывести сообщение об ошибке и закончить работу.

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

Урок из серии: «Язык программирования Паскаль»

На этом уроке мы поговорим о том, как можно удалить элементы из массива. В языке Паскаль нет стандартных процедур для обслуживания массивов. Поэтому мы напишем свою процедуру.

Рассмотрим два случая: удаление одного элемента из массива и удаление нескольких элементов. Для решения этих задач используются разные подходы.

Знакомство с алгоритмом удаления элемента из массива начнем со следующей задачи.

Задача 1. Необходимо удалить k-ый элемент из массива m, состоящего из n элементов.

Пусть дан одномерный массив, состоящий из 10 элементов:

9, 6, 7, 10, 14, 16, 5, 11, 4, 8.

Нужно удалить элемент с номером 6 (n=10, k=6).
Алгоритм удаления шестого элемента заключается в следующем:

  1. Сместить все элементы, начиная с 6-го, на один элемент влево: 6-му присвоить значение 7-го, 7-му присвоить значение 8-го, 8-му присвоить значение 9-го, 9-му присвоить значение 10-го: m[6]:=m[7]; m[7]:=m[8]; m[8]:=m[9]; m[9]:=m[10]. На этом сдвиг заканчивается.
    Таким образом, сдвиг начинается с k-го элемента и идет по (n-1)-й элемент:
    m[i]:=m[i+1], i=k..n-1
  2. Последнему элементу массива присвоить значение, равное 0: m[n]:=0.
  3. При дальнейшей работе с этим массивом использовать n-1 элемент.

После удаления элемента из массива, изменится количество элементов в массиве (уменьшается на один) и у части элементов изменится индекс.

После выполнения алгоритма, массив будет следующим:

9, 6,7, 10, 14, 5, 11, 4, 8, 0.

Для реализации этого алгоритма напишем процедуру с именем Delete. В качестве входных параметров передадим ей номер удаляемого элемента и массив, на выходе получим тот же массив, только измененный. Программный код процедуры будет следующим:

Рассмотрим следующую задачу.

Задача 2 . Удалить из одномерного массива максимальный элемент, если все элементы разные.

Для решения этой задачи, необходимо:

  1. Найти номер(индекс) максимального элемента — k.
  2. Удалить из массива элемент с найденным номером.

Составим программу с использованием новой процедуры. Кроме неё в программе будем использовать уже знакомые нам процедуры: Init2, Print, Maximum. В тексте программы описания процедур опущены.

Вы познакомились алгоритм удаления элемента массива. Теперь давайте рассмотрим случай, когда нужно удалить из массива несколько подряд идущих элементов.
Задача 3. Удалить из массива все максимальные элементы.

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

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

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

Для организации просмотра массива с конца, можно воспользоваться оператором цикла For с убывающей переменной цикла:

For i := n Downto 1 Do , где значение переменной i уменьшается от n до 1.

Для решения задачи делаем два просмотра массива.

Первый просмотр массива делаем с начала для того, чтобы найти значение максимального элемента (на этот раз нужно определить значение элемента, а не его индекс). Для этого можно использовать процедуру Maximum. У неё два выходных параметра: значение максимального элемента и его индекс.

Второй просмотр производится с конца массива для того, чтобы удалить максимальные элементы. Перебираем все элементы, если текущий элемент массива имеет максимальное значение, то удаляем его, значение счётчика удаленных элементов k увеличим на 1. Подсчитываем количество удаленных элементов для того, чтобы знать, сколько элементов выводить на экран.

Ниже представлен текст программы:

Вы познакомились с алгоритмом удаления элементов из одномерного массива.

На следующем уроке продолжим изучение алгоритмов обработки одномерных массивов, рассмотрим алгоритм добавления элементов в массив.

TURBO PASCAL

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

Удаление элемента

Пример:

Удалить из массива максимальный элемент, если все элементы разные.

Для того чтобы решить данную задачу, необходимо:

найти номер максимального элемента — k;

сдвинуть все элементы, начиная с k-го, на один элемент влево;

последнему элементу присвоить значение 0.

Рассмотрим на конкретном примере. Пусть дан одномерный массив из целых чисел, состоящих из 10 элементов: 6, 3, 4, 7, 11, 2, 13, 8, 1, 5. Номер максимального элемента равен 7 (k = 7), то есть, начиная с 7-го элемента, будем сдвигать элементы на один влево: 7-му элементу присвоим значение 8-го, 8-му присвоим значение 9-го, а 9-му присвоим значение 10-го, на этом сдвиг заканчивается. Таким образом, сдвиг начинается с k-го элемента и идёт по (n-1)-й (где n — это количество элементов в массиве ). После этого последнему элементу присвоим значение, равное 0, а тогда массив будет следующим: 6, 3, 4, 7, 11, 2, 8, 1, 5, 0.

Примечание. При удалении элемента размерность массива не изменяется.

Составим программу, удаляющую максимальный элемент из одномерного массива, в ней воспользуемся уже двумя знакомыми процедурами — Init2 и Print1, которые: первая — заполняет массив случайными числами, а вторая — выводит на печать этот массив. Чтобы последний 0 не выводился, мы модифицируем процедуру вывода Print и будем ей передавать не только массив, но и количество элементов, которые надо вывести, начиная с первого.

Program Example-40;
Const n = 30; dd = 51;
Type myarray = Array [1..n] Of Integer;
Var A : myarray;
k : Integer;

Procedure Init2(Var m : myarray );

Procedure Print1(n1: Integer; m: myarray ); <процедура вывода (распечатка) массива >
Var i : Integer;
Begin
For i:=1 To n1 Do Write(m[i]:5);
Writeln;

End;

Рассмотрим удаление максимального элемента из массива целых чисел для n = 10 в пошаговом режиме. Пусть заполнение и первый вывод массива уже сделаны. Трассировка этой программы для нашего примера приведена в таблице 1.

IA[i]>maxmaxmaxiмассив А
-327676, 3, 4, 7, 11, 2, 13, 8, 1, 5
16>-32768 да* 61
23>6 нет61
34>6 нет61
47>6 да* 74
511>7 да* 115
62>11 нет115
713>11 да* 137
88>13 нет137
91>13 нет137
105>13 нет137
76, 3, 4, 7, 11, 2, 8, 8, 1, 5
86, 3, 4, 7, 11, 2, 8, 1, 1, 5
96, 3, 4, 7, 11, 2, 8, 1, 5, 5
А[n]:=06, 3, 4, 7, 11, 2, 8, 1, 5, 0

Сейчас осталось только вывести на экран изменённый массив.

Таким образом, на экране появятся следующие строки:

6 3 4 7 11 2 13 8 1 5 — это начальный массив.

6 3 4 7 11 2 8 1 5 — это массив после удаления максимального элемента.

Пример:

Предположим, что максимальный элемент встречается несколько раз.

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

For i := B Downto A Do , где значение переменной i будут уменьшаться на единицу, начиная от В до А (значение В должно быть меньше значения А ).

Кроме того, номер максимального элемента запоминать не будем, а просмотрим массив с конца, и если элемент имеет максимальное значение, то удалим его, при этом значение счётчика k будем увеличивать на 1. Для решения этой задачи надо изменить функцию Maximum, сейчас нам нужен не номер, а значение максимального элемента. В программе это будет выглядеть так:

Program Example-41;
Const n = 30; dd = 51;
Type myarray = Array [1..n] Of Integer;
Var A : myarray;
m, k, i : Integer;

Procedure Init2 (Var m : myarray);

Function Maximum (m : myarray): Integer;
Var i, max : Integer;
Begin
max:=-maxint;
For i:=1 To n Do <просмотр всех элементов массива>
If m[i]>max Then
max:=A[i];<новое значение максимального элемента>
Maximum:=max;
End;

Procedure Delete(k1 : Integer; Var m : myarray);

Рассмотрим удаление нескольких максимальных элементов из массива целых чисел для n = 10. Пусть заполнение и первый вывод массива уже сделан. Дан такой массив:

6 3 4 7 11 2 13 8 13 5

Проследим за ним дальше по шагам выполнения программы, результат такой трассировки приведён в таблице 2:

iA[i]>maxmaxмассив А
-327676 3 4 7 11 2 13 8 13 5
16>-32768 да* 6
23>6 нет6
34>6 нет6
47>6 да* 7
511>7 да* 11
62>11 нет11
713>11 да* 13
88>13 нет13
913>13 нет13
105>13 нет13
105=13 нет136 3 4 7 11 2 13 8 13 5
913=13 да6 3 4 7 11 2 13 8 5 0
88=13 нет6 3 4 7 11 2 13 8 5 0
713=13 да6 3 4 7 11 2 8 5 0 0
62=13 нет6 3 4 7 11 2 8 5 0 0
511=13 нет6 3 4 7 11 2 8 5 0 0
47=13 нет6 3 4 7 11 2 8 5 0 0
34=13 нет6 3 4 7 11 2 8 5 0 0
23=13 нет6 3 4 7 11 2 8 5 0 0
16=13 нет6 3 4 7 11 2 8 5 0 0

После выполнения k равно 2, поэтому на экране будет выведено n-k элементов. Сейчас осталось вывести на экран изменённый массив. Таким образом, появятся следующие строки:

6 3 4 7 11 2 13 8 13 5 — это начальный массив.

6 3 4 7 11 2 8 5 — это массив после удаления максимальных элементов.

На главную страницу
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Конспект урока на тему «Вставка и удаление элементов массива» 10 класс

V Международный дистанционный конкурс «Старт»

Низкий оргвзнос 30р

Идёт приём заявок

Для учеников 1-11 классов и дошкольников

Наградные и подарки

Документы в архиве:

Название документа Kyldasheva_pismo.doc

Автор: Кулдашева Елена Викторовна.

Должность: учитель информатики и ИКТ.

Квалификационная категория: первая.

Образовательное учреждение: МАОУ «СОШ № 33 с УИОП»

Белгородская обл., г. Старый Оскол.

Название документа Kyldasheva_yrok.doc

Тема урока: «Вставка и удаление элементов массива».

Предмет: Информатика и ИКТ.

Класс: 10 (профиль).

Ключевые слова: информатика, практическая работа, программирование, массивы, вставка, удаление элементов.

Тип урока: практическая работа.

Оборудование: Раздаточный материал; персональные компьютеры.

Попов В.Б. Turbo Pascal для школьников: Учебн. пособие — 3-е доп. изд. – М.: Финансы и статистика, 2004, — 528 с.: ил.

Семашко Г.Л., Салтыков А.И. «Программирование на языке паскаль», М: «Наука», 1993 г.

Фаронов В . В . « Turbo Pascal 7.0. Начальный курс», М: «Нолидж», 1997 г.

разобрать принципы вставки и удаления элементов в одномерных и двумерных массивах,

закрепить полученные знания, путем решения задач.

Время выполнения: 2 урока.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

For i:=1 to n do begin

For i:=k to n-1 do

For i:=1 to n-1 do

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

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

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

for i:=1 to n do begin

for j:=1 to m do begin

for j:=k to m-1 do

for i:=1 to n do begin

for j:=1 to m-1 do begin

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

В одномерном массиве A ( N ) найти min элемент и удалить его.

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

II . Вставка (включение) элементов в массив.

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

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

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

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

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

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

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

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

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

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

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

Итог : 3 4 8 7 6 5

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

Читать еще:  Ошибка error report
Ссылка на основную публикацию
Adblock
detector