Print(n,A); { первый вывод начального массива из n элементов }
Writeln(‘Введите номер элемента, после которого вставлять, ’);
Writeln(‘и вставляемое число’);
Readln(k,x); {ввод номера и вставляемого элемента}
Insert(k,x,A);
Print1(n+1,A); {вывод массива после вставки в него}
Readkey;
End.
Пример 5. Вставить число после всех элементов массива, кратных 3.
Решение. Первое, на что необходимо обратить внимание — это описание массива: на сколько элементов может увеличиться массив? Максимальное число элементов, после которых будет вставлен новый элемент, совпадает с числом элементов массива, так как может случиться так, что все элементы массива отвечают заданному свойству. Поэтому массив может увеличиться в два раза (это его самая большая размерность).
Второе. Если мы будем просматривать элементы массива с начала и вставлять новый после элемента с заданным свойством, то номер последнего элемента каждый раз может меняться, кроме того, будет просматриваться и новый (вставленный) элемент и его необходимо будет пропускать («перепрыгивать»), поэтому решение будет не очень эффективным.
Лучше всего просматривать массив, начиная с конца, тогда вставляемый элемент мешать не будет. Кроме того, номер последнего элемента можно будет знать (если знать, сколько элементов вставлено на данный момент), при этом просмотр будет последовательным от N-го до 1-го.
Program Example_5;
Uses crt;
Const n=10; dd=51;
Type myarray=Array[1.. 2*n] Of Integer;
VarA: myarray;
x, k, i :Integer; {x – вставляемое число, k – число вставленных элементов}
Procedure Input( Var m:myarray); {процедура заполнения (инициализации) массива случайными числами}
Print(n+k,A); {вывод массива после вставки в него всех элементов}
Readkey;
End.
Пример 6. Вставить строку из нулей после строки с номером k.
Решение. Для решения этой задачи необходимо:
· Первые k строк оставить без изменения.
· Все строки после k-ой сдвинуть на одну назад, это лучше начать с последней строки и идти до (k+1)-ой.
· Элементам строки k+1 присвоить заданное значение.
Кроме того, необходимо изменить размерность массива. Так как мы вставляем строку, то число строк будет на одну больше.
Пример 7. Удалить строку с номером k.
Решение. Для того, чтобы удалить строку с номером k, необходимо:
· Сдвинуть все строки, начиная с данной, на одну вверх.
· Последнюю строку «обнулить», то есть всем элементам последней строки присвоить значение 0.
Кроме того, необходимо изменить размерность массива. Так как мы удаляем строку, то число строк будет на одну меньше.
7. Сортировка методом простого обмена («Пузырька»)
Пример 8. Упорядочить члены числовой последовательности по возрастанию
Решение. Рассматриваем массив слева направо и обмениваем местами соседние элементы расположенные «неправильно», т. е. для i<j , a[i]>a[j].
Например, дана последовательность 3 9 6 8 1 из пяти элементов (n=5)
1-й просмотр 3 6 8 1 9
2-й просмотр 3 6 1 8 9
3-й просмотр 3 1 6 8 9
4-й просмотр 1 3 6 8 9
Всего n-1 просмотр. За каждый просмотр количество просматриваемых элементов уменьшается на 1, т. к. каждый раз отсортировывается один (больший) элемент.
Для упорядочения воспользуемся вложенными циклами: 1-й цикл по номеру просмотра, 2-й - по номеру элементов
For i:=1 to n-1 do
For j:=1 to n-i do
If a[j+1]<a[j] then
begin
m:=a[j+1]; a[j+1]:=a[j]; a[j]:=m;
end;
Ниже приведена программа полностью
program sort;
uses crt;
var i,j,n,m:integer; a: array [1..100] of integer;
Begin
clrscr;
writeln('input n< =100'); readln(n); - ввод количества элементов массива