Вставка элемента после элемента
С заданным номером Пример Вставить число 100 после пятого элемента массива. Решение Пусть k − номер элемента, после которого мы должны вставить элемент х (k и х будем вводить с клавиатуры). Вставка осуществляется следующим образом: ¨ первые k элементов массива остаются без изменений; ¨ все элементы, начиная с (k+1)−го необходимо сдвинуть вправо; ¨ элементу с номером (k+1) присваиваем значение х. Рассмотрим конкретный пример. Пусть дан следующий одномерный массив из N (N=10) элементов: 3, -12, 5, 14, 27, -6, 1, -34, 10, -15. Надо вставить элемент со значением 100 после пятого элемента массива. Мы получим следующий массив: 3, -12, 5, 14, 27, 100, -6, 1, -34, 10, -15. Таким образом, после вставки в массиве станет 11 элементов, и это надо учесть при описании типа myarray: Type myarray=Array[1..n+1] Of Integer; Будем выводить массив два раза − до и после вставки нового элемента, используя уже известную процедуру Print1. Составим теперь основную программу с использованием новой процедуры Insert1(k1, x1, m), которой передаются: k1 − номер элемента, после которого надо вставить новый элемент, x1 − значение нового элемента, m − массив. Сдвиг элементов будем начинать с конца массива. Program Example_105; Const n=10; dd=51; Type myarray=Array[1..n+1] Of Integer; Var A: myarray; x, k: Integer; {x - значение нового элемента, k - номер элемента,после которого вставляем} Procedure Init2(Var m: myarray); {Процедура заполнения (инициализации) массива случайными числами} ... Procedure Print1(n1: Integer; m: myarray); {Процедура вывода (распечатки) массива} ... Procedure Insert1(k1, x1: Integer; Var m: myarray); Var i: Integer; Begin {Сдвиг элементов на одну позицию назад} For i:=n Downto k1+1 Do m[i+1]:=m[i]; m[k1+1]:=x1; {Вставка элемента после k1-го} End; Begin Init2(А); Print1(n, А); {Вывод начального массива из n элементов} Writeln('Номер элемента, после которого вставлять, '); Writeln('и значение нового элемента'); Readln(k, x); Insert1(k, x, A); Print1(n+1,A);{Вывод массива после вставки нового элемента} Readln; End. Вставка элемента перед элементом с Данным номером Пример Вставить число 100 перед пятым элементом массива. Решение Эта задача немного отличается от предыдущей: в предыдущей мы сдвигали вправо все элементы, стоящие после k−го, то есть с (k+1)−го, а на его место записывали новый элемент, в этой − сдвигаем все элементы с k−го, а затем на его место записываем новый. Пусть дан следующий одномерный массив из N (N=10) элементов: 3, -12, 5, 14, 27, -6, 1, 34, 10, -15. Надо вставить элемент со значением 100 перед пятым элементом массива. Получим следующий массив: 3, -12, 5, 14, 100, 27, -6, 1, 34, 10, -15. Program Example_106; Const n=10; dd=51; Type myarray=Array[1..n+1] Of Integer; VarA: myarray; x, k: Integer; {x - значение нового элемента, k - номер элемента, после которого вставляем} Procedure Init2(Var m:myarray); {Процедура заполнения (инициализации) массива случайными числами} ... Procedure Print1(n1: Integer; m: myarray); {Процедура вывода (распечатки) массива} ... Procedure Insert2(k1, x1: Integer; Var m: myarray); Var i: Integer; Begin{Сдвиг на одну позицию вправо} For i:=n Downto k1 Do m[i+1]:=m[i]; m[k1]:=x1; {Вставка x1 на место элемента с номером k1} End; Begin Init2(А); Print1(n,А); {вывод начального массива} Writeln('Номер элемента, перед которым вставлять, '); Writeln('и значение нового элемента'); Readln(k,x); Insert2(k, x, A); Print1(n+1, A); {Вывод массива после вставки нового элемента} Readln; End. Вставка нескольких элементов
Предположим, что необходимо вставлять не один элемент, а по одному элементу после всех элементов с заданным свойством. Пример Вставить данное число после всех элементов массива, кратных 3. Решение Первое, на что необходимо обратить внимание, - это описание массива: на сколько элементов может увеличиться массив? Максимальное количество элементов, после которых будет вставлен новый элемент, совпадает с количеством элементов массива, ведь может случиться так, что все элементы массива обладают заданным свойством. Поэтому массив может увеличиться максимум в два раза, а значит, соответствующее описание будет следующим: Type myarray=Array[1..2*n] Of Integer; Если мы будем просматривать элементы массива с начала и вставлять новый элемент после элемента с заданным свойством, то номер последнего элемента каждый раз будет меняться, кроме того, придется пропускать ("перепрыгивать") новый (вставленный) элемент, поэтому решение будет не очень эффективным. Удобнее просматривать массив с конца, тогда вставляемый элемент мешать не будет. Составим программу. Program Example_107; 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(А); 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. Перестановки элементов массива
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему стероиды повышают давление?: Основных причин три... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (782)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |