русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-09-15; просмотров: 873; Нарушение авторских прав


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

Пример

Вставить число после всех элементов массива, кратных 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


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


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.