Алгоритм удаления из массива максимального элемента найти номер максимального элемента k; сдвинуть все элементы, начиная с k-го, на один элемент влево; последнему элементу присвоить значение 0; уменьшить количество элементов массива на единицу.
Пример работы алгоритма Пусть дан одномерный массив из целых чисел, состоящий из 10 элементов: 6, 3, 4, 7, 11, 2, 13, 8, 1, 5. После преобразования массив станет следующим: 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);...
Продолжение программы Function Maximum (m : MyArray; n:integer) : Integer; Var i, max, maxi : integer; Begin max:=-maxint; {начальным значением переменной будет наименьшее значение данного типа} for i := 1 to n do {просматриваем все элементы массива} if m[i] > max {если найден элемент больше, чем мы считаем максимальным} then begin max:=A[i]; {то запомним найденное значение} maxi:=i; {а также место, на котором он стоит в массиве} end; Maximum := maxi; {имени функции присвоим найденный результат} End;
Продолжение программы Procedure Delete(Var m : MyArray; Var n:integer; k1 : integer); Var i : integer; Begin for i := k1 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.
Решение задач Удалить первый отрицательный элемент, если таковой имеется. Удалить все отрицательные элементы. Удалить все элементы, большие данного числа А (А вводить с клавиатуры).