{Random выбирает случайное число из отрезка от 0 до dd–1, тогда i-му элементу массива будет присвоена сумма выбранного случайного числа и –25, таким образом, массив будет заполняться случайными числами от –25 до –25+(dd–1), то есть до –26+dd=25}
{-------Функция возвращающая номер максимального элемента массива --------}
Function Maximum(m: myarray): Integer;
Var max, maxi: Integer;
max:=–maxint; { –maxint – это целая константа, имеющая минимальное значение среди целых чисел, равное – 32 768 }
For i:=1 To n Do {просмотр всех элементов массива}
If m[i]>max Then {если данный элемент больше максимального элемента, найденного среди первых i–1 элементов, то}
Begin
max:=A[i]; {новое значение максимального элемента }
maxi:=i; {номер максимального элемента в массиве}
End;
Maximum:=maxi;
{------Процедура удаления элемента массива c номером k1-------}
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}
Clrscr; {очистка экрана}
Randomize; {включение генератора случайных чисел}
Input(A); {заполнения массива A}
Print(n,A); {вывод заполненного массива A}
k:=Maximum(A); {поиск номера максимального элемента}
Delete(k, A); {удаление элемента с номером k}
Print(n–1,A); {вывод нового массива A}
Readkey;
Таким образом, на экране появятся следующие строки:
6 3 4 7 11 2 13 8 1 5 — это начальный массив,
6 3 4 7 11 2 8 1 5 — это массив после удаления максимального элемента.
Пример 3. Предположим, что максимальный элемент встречается несколько раз.
Решение. Когда необходимо удалять несколько элементов, то это лучше всего делать с конца массива, так как иначе надо будет снова возвращаться к элементу с номером, который только что удаляли (это возникает тогда, когда подряд идут два максимальных элемента, если первый удалим, то на его месте будет стоять снова максимальный элемент). Это можно сделать при помощи цикла с параметром, который имеет следующий вид:
For i:=B Downto A Do <тело цикла>,
где значение переменной i будут уменьшаться на единицу, начиная от B до A (значение B должно быть меньше значения A).
Кроме того, номер максимального элемента запоминать не будем, а просмотрим массив с конца и если элемент имеет максимальное значение, то удалим его, при этом значение счетчика k будем увеличивать на 1. Для решения этой задачи надо изменить функцию Maximum, сейчас нам нужен не номер, а значение максимального элемента.
Program Example_3;
Uses crt;
Const n=30; dd=51;
Type myarray = Array [1..n] Of Integer;
Var A: myarray;
m, k, i:Integer; {m – значение максимального элемента
For i:=1 To n Do {просмотр всех элементов массива}
If m[i]>max Then max:=A[i];
{новое значение максимального элемента }
Maximum:=max;
End;
Procedure Delete(k1: Integer; Var m: myarray);
{процедура удаления элемента с данным номером}
...
Clrscr;
Randomize; {включение генератора случайных чисел}
Input(A); {заполнение массива A}
Print(n,A); {вывод заполненного массива A}
{поиск значения максимального элемента}
m:=Maximum(A); k:=0;
{просмотр всех элементов, начиная с последнего}
For i:=n Downto 1 Do
If A[i]=m Then {если данный элемент имеет максимальное значение, то }
Begin{удаляем элемент с номером i}
Delete(i,A);
Inc(k);
End;
Print1(n–k,A); {вывод нового массива A}
Readkey;
End.
Пример 4. Вставка элемента после элемента с заданным номером. Вставить число 100 после пятого элемента массива.
Решение. Пусть k — это номер элемента, после которого мы должны вставить элемент x (k и x будем вводить с клавиатуры). Тогда вставка осуществляется следующим образом:
· первые k элементов массива остаются без изменений;
· все элементы, начиная с (k+1)-го, необходимо сдвинуть на один назад;
· на место (k+1)-го элемента записываем значение х, то есть после k-го элемента массива.
Program Example_4;
Uses crt;
Const n=10; dd=51;
Type myarray=Array[1.. n+1] Of Integer;
VarA: myarray;
x, k:Integer; {x – вставляемое число, k – номер элемента, после которого вставляем}