Вставка нескольких элементов
Задача. Вставить число после всех элементов массива, кратных трем.
Первое, на что необходимо обратить внимание – это описание массива: на сколько элементов может увеличиться массив? Максимальное количество элементов, после которых будет вставлен новый элемент, совпадает с количеством элементов массива, так как может случиться, что все элементы массива отвечают заданному свойству. Поэтому массив может увеличиться в два раза, а значит, соответствующее ему описание будет следующим:
Type
MyArray[1..2*n] of Integer;
Второе. Если мы будем просматривать массив с начала и вставлять новый после элемента с заданным свойством, то номер последнего элемента каждый раз может меняться, кроме того, будет просматриваться и новый (вставленный) элемент и его необходимо будет пропускать, поэтому решение будет не очень эффективным. Лучше всего просматривать массив, начиная с конца, тогда вставляемый элемент мешать не будет. Кроме того, номер последнего элемента можно будет знать (если знать, сколько элементов вставлено на данный момент), при этом просмотр будет последовательным от N-го до 1-го.
Program VstavkaN;
Const
n=10; dd=51;
Type
MyArray = Array [1..2*n] of Integer;
Var
A : MyArray;
k, x, i : Integer;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
Procedure InsertMas1(Var m : MyArray; n : integer);
. . .
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
Procedure InsertMas2(Var m : MyArray; n : integer);
. . .
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
Procedure PrintMas(m : MyArray; n : integer);
. . .
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
Procedure InsertN(Var m : MyArray; Var n : integer; Mesto, Element : Integer;);
Var
i : Integer;
Begin
for i := n downto Mesto+1 do
m[i+1] := m[i];
m[Mesto+1]:= Element;
Inc[n];
End;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
Begin
. . .
Writeln('Вставляемое число > ');
Readln(x);
k:=0;
for i:=n downto 1 do
if A[i] mod 3=0
then
InsertN(A, n, i, x);
. . .
End.
Задание. Дополните программу необходимыми операторами и комментариями и добейтесь работоспособности программы. Покажите результат работы учителю для оценки.
Дата добавления: 2015-05-16; просмотров: 756;