Скачать презентацию 1 Программирование на языке Паскаль Часть II Вставка Скачать презентацию 1 Программирование на языке Паскаль Часть II Вставка

вставка элементов.ppt

  • Количество слайдов: 5

1 Программирование на языке Паскаль Часть II Вставка элементов в массив 1 Программирование на языке Паскаль Часть II Вставка элементов в массив

2 Вставка элементов в массив 1. Понятие вставки элемента в массив Пусть дан массив, 2 Вставка элементов в массив 1. Понятие вставки элемента в массив Пусть дан массив, описанный следующим образом: Const n=10; Var a : array[1. . n*2] of integer; Обратите внимание, что массив задается с запасом, т. е. резервируется место для вставки элементов. Если вставляется один элемент, то достаточно задать a : array[1. . n+1] of integer. Для каждой конкретной задачи запас берется по максимуму. 1 2 3 ……………… 23 0 15 6 k……k+1…………. n-1……n 7 7 9 9 34 999 12 18 34 12 18 3 3

3 Вставка элементов в массив Необходимо вставить число X перед k –ым элементом в 3 Вставка элементов в массив Необходимо вставить число X перед k –ым элементом в массиве из n элементов. Под вставкой элемента понимается последовательная перезапись предыдущего элемента на место последующего, начиная с k –ого. После перезаписи нужно в kый элемент массива записать число X. Содержательная часть программы (алгоритм вставки числа X перед k –ым элементом ) for i: = n a[k]: =X; downto k do a[i+1]: =a[i]; алгоритм вставки числа X после k –ого элемента for i: = n downto k+1 do a[i+1]: =a[i]; a[k+1]: =X;

Вставка элементов в массив 2. Вставка в массив нескольких элементов, удовлетворяющих заданному условию Задача Вставка элементов в массив 2. Вставка в массив нескольких элементов, удовлетворяющих заданному условию Задача 2. Предположим, что условие такое: вставить число X перед всеми четными элементами в массиве (массив должен описывается с запасом (n*2). ) (a[i] mod 2 = 0) При множественной вставке элементов в массив экономнее проводить просмотр массива с конца, тогда при вставке не нужно будет «перепрыгивать» через вставленный элемент. Поскольку «текущая» граница массива отодвигается вправо, то необходимо это учитывать при последовательной перезаписи элементов. Для нашего алгоритма обозначим «текущую» границу m. m: =n; For j: =n downto 1 do If a[j] mod 2 = 0 then begin for i: = m downto j do a[i+1]: =a[i]; a[j]: =X; m: =m+1; End; 4

Вставка элементов в массив Перепишем данный алгоритм с учетом «текущей границы» массива (для общности Вставка элементов в массив Перепишем данный алгоритм с учетом «текущей границы» массива (для общности обозначим присутствие условия так: <условие>, на это место помещается конкретное условие). m: =n; kol: =0; for j: =n downto 1 do if <условие> then begin for i: = m downto j do a[i+1]: =a[i]; a[j]: =X; m-это «текущая граница» массива, которая увеличивается на 1 m: =m+1; kol: =kol+1; после каждой вставки элемента. end; kol – количество вставок 5