¨ сдвинуть все элементы начиная с 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.
Примечание. При удалении элемента размерность массива не изменяется.
Составим программу для удаления максимального элемента из одномерного массива, в ней воспользуемся двумя уже знакомыми процедурами инициализации массива и вывода его на печать. Первая заполняет массив случайными числами, а вторая выводит на печать этот массив. Чтобы последний 0 не выводился на экран, мы модифицируем процедуру вывода Print и будем ей передавать не только массив, но и количество элементов, которые надо вывести, начиная с первого.
Program Example_103;
Const n=30; dd=51;
Type myarray = Array[l..n] Of Integer;
Var A: myarray;
k:Integer; {k - номер максимального
элемента}
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;
Function Maximum (m: myarray): Integer;
Var i, max, maxi: Integer;
Begin
max:=-32768;
{Минимальное значение типа Integer
равно -32 768}
For i:=1 To n Do
{Просмотр всех элементов массива}
If m[i]>max Then
{Если данный элемент больше максимального
элемента, найденного среди первых
i-1 элементов, то}
Begin
max:=m[i];
{Новое значение максимального элемента}
maxi:=i;
{Номер максимального элемента в массиве} End;
Maximum:=maxi;
End;
Procedure Delete (k1: Integer;
Var m: myarray);
Var i: Integer;
Begin{Сдвиг элементов на один влево}
For i:=k1 To n-1 Do m[i]:=m[i+1];
{i-му элементу присваиваем значение
(i+1)-го}
m[n]:=0;
{Последний элемент равен 0}
End;
Begin
Randomize;
{Инициализация генератора случайных
чисел}
Init2(A);
{Заполнение массива А}
Print1(n, A);
{Вывод заполненного массива А}
k:=Maximum(A);
{Поиск номера максимального элемента}
Delete(k, A);
{Удаление элемента с номером k}
Print1(n-1, А);
{Вывод нового массива А}
Readln;
End.
Пример 2
Решить предыдущую задачу, считая, что максимальный элемент может встречаться несколько раз.