Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Вставка нескольких элементов

Читайте также:
  1. А. соединение элементов и комплексов между собой
  2. Боевой порядок мпб (тб) Германии в наступлении (состав, назначение его элементов, боевые задачи).
  3. Боевой порядок мпб (тб) США в наступлении (состав, назначении его элементов, боевые задачи).
  4. В рамках сферы денежного обращения деньги группируются в четыре агрегата, различающихся между собой по степени ликвидности входящих в них элементов.
  5. В чем сущность усадки железобетона и каково его влияние на напряженное состояние элементов?
  6. В чём сущность ползучести железобетона и каково её влияние на напряжённое состояние элементов?
  7. В) нейтральная вставка

Предположим, что необходимо вставлять не один элемент в массив, а по одному элементу после всех элементов с заданным свойством. Рассмотрим эту вставку на примере вставки после всех элементов с заданным свойством.

Пример

Вставить число после всех элементов массива, кратных 3.

Решение

Первое, на что необходимо обратить внимание - это описание массива: на сколько элементов может увеличиться массив? Максимальное количество элементов, после которых будет вставлен новый элемент, совпадает с количеством элементов массива, так как может случиться, что все элементы массива отвечают заданному свойству. Поэтому массив может увеличиться в два раза (это его самая большая размерность), а значит, соответствующее ему описание будет следующим:

Type myarray = Array[1..2*n] Of Integer;

Второе. Если мы будем просматривать элементы массива с начала и вставлять новый после элемента заданным свойством, то номер последнего элемента каждый раз может меняться, кроме того, будем просматриваться и новый (вставленный) элемент и его необходимо будет пропускать ("перепрыгивать"), поэтому решение будет не очень эффективным.

Лучше всего просматривать массив, начиная с конца, тогда вставляемый элемент мешать не будет. Кроме того, номер последнего элемента можно будет знать (если знать, сколько элементов вставлено на данный момент), при этом просмотр будет последовательным от N-го до 1-го.

Составим программу.

Program Example-44;

Const n = 10; dd = 51;

Type myarray = Array[1.. 2*n] Of Integer;

Var A: myarray;

x, k, i:Integer; {x - вставляемое число, k - количество вставленных элементов}

Procedure Init2(Var m: myarray); {процедура заполнения (инициализации) массива случайными числами}

...

Procedure Print1(n1: Integer; m: myarray); {процедура вывода (распечатки) массива }

...

Procedure Insert3(k1, x1: Integer; Var m: myarray);

Var i: Integer;

Begin {сдвиг элементов на одну позицию назад, n+k- это номер последнего элемента в данный момент}

For i:= n+k Downto k1+1 Do

m[i+1]:= m[i];

m[k1+1]: = x1; {вставка элемента на место - после k1-го}

Inc(k); {увеличение счётчика вставленных элементов }

End;

Begin

Init2 (A) Print1(n,A);

Writeln(' Введите вставляемое число');

Readln(x);

k: = 0;

For i:= n Downto 1 Do

If A[i] Mod 3=0 Then Insert3 (i,x,A);

Print1 (n+k,A); {вывод массива после вставки в него всех элементов}

Readln;

End.

Рассмотрим выполнение программы в пошаговом режиме. Будем вставлять после всех элементов, кратных 3, число 100, то есть х = 100. Пусть дан массив из 10-ти элементов:

3, -12, 5, 14, 27, -6, 1, 34, 10, -15.

Пусть так же первый вывод массива сделан. Трассировка примера приведена в таблице 5.

Таким образом, массив увеличился на k элементов.

На экране всё это будет выглядеть следующим образом:

3 -12 5 14 27 -6 1 -34 10 -15

3 100 -12 100 5 14 27 100 -6 100 1 -34 10 -15 100

 

Таблица 5

Просмотр элементов массива
A[i] mod 3 = 0 k i массив
да     3, -12, 5, 14, 27, -6, 1, 34, 10, -15
вставляем 100 после i-го (десятого)
      3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
нет     3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
нет     3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
нет     3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
да     3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
вставляем 100 после i-го (шестого)
      3, -12, 5, 14, 27, -6, 100, 1, 34, 10, -15, -15, 100
да     3, -12, 5, 14, 27, -6, 100, 1, 34, 10, 10, -15, 100
вставляем 100 после i-го (пятого)
      3, -12, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
нет     3, -12, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
нет     3, -12, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
да     3, -12, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
вставляем 100 после i-го (второго)
      3, -12, 100, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
да     3, -12, 100, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
вставляем 100 после i-го (первого) элемента
да     3, 100, -12, 100, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100

 

 


Дата добавления: 2015-08-17; просмотров: 54 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Вставка элементов в одномерный массив| Технология кулинарного производства.

mybiblioteka.su - 2015-2024 год. (0.01 сек.)