КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Изменение положения элементов на некотором отрезке
End if Else For j=i To n-1 'Цикл для удаление из массива элемента кратного 3 a(j)=a(j+1) 'На место элемента aj переписывается элемент aj+1 Next j n=n-1 'Уменьшение на единицу количества элементов массива Loop 'Конец цикла While Вставка элемента в массив Вставка элемента в массив – задача обратная предыдущей. Прием используется тот же – смещение группы элементов на одну позицию. Только при уплотнении сдвиг производится влево, при вставке – вправо. При вставке возникает проблема, что делать с последними элементами? Если в дальнейшей работе с массивом участвуют только заявленные элементы, то «хвост» придется вытеснить, последние значения при этом будут утрачены. Иначе, придется создавать дополнительный массив, размерность которого будет больше исходного или объявить размер массива с учетом количества вставленных элементов. Выбор типа цикла для работы с массивом зависит от конкретного случая. Например, можно использовать цикл с параметром, если хвост подлежит вытеснению, и число элементов в массиве остается неизменным. Пример 1. В заданный упорядоченный по возрастанию массив вставить число k, не нарушая его упорядоченности. Последний элемент вытеснить. Фрагмент программного кода: For i=1 To n 'Цикл для перебора элементов массива If k < a(i) Then 'Поиск места для вставки нового значения k 'Если место найдено, то организуется цикл для смещения элементов на единицу вправо For j=N-1 Downto i+1 a(j)=a(j-1) ' На место элемента aj переписывается элемент aj-1 Next i a(i)=k 'Вставка нового значения на освобожденное место Exit For 'Выход из внешнего цикла i End if Next i Пример 2. В одномерный массив вставить число x после всех элементов, кратных трем. Все элементы массива сохранить. При описании данного массива необходимо учесть, что его размер может увеличиться максимум вдвое. Фрагмент программного кода: kol=0; 'Счетчик количества вставок For i=n To 1 'Цикл для перебора элементов массива c конца If a(i) mod 3=0 Then 'Поиск места для вставки нового значения k. 'Если место найдено, то организуется цикл для смещения элементов на единицу вправо 'с учетом вставленных элементов For j=n+kol To i+1 a(j+1)=a(j) 'На место j+1-го элемента переписывается j-ый элемент Next j a(i+1)=x 'Вставка нового значения на освобожденное место kol=kol+1 'Счетчик количества вставок увеличивается на 1 End if Next i При решении задач такого типа очень важен контроль за границами диапазона изменения индексов: они должны быть целыми, не выходить за пределы диапазона, кроме того, нижняя граница диапазона должна быть меньше верхней. Пример. В одномерном массиве a 1, a 2, a 3, …, an, состоящем из n элементов, изменить порядок следования значений элементов на обратный от позиции n 1 до позиции n 2 (n 1< n 2< n). Алгоритм изменения порядка следования элементов в массиве на обратный состоит в следующем: n 1-ый элемент меняется местами с n 2-ым, (n 1+1)-ый элемент меняется местами с (n 2-1)-ым, ……………………………………………………. (n 1+ i)-ый элемент меняется местами с (n 2- i)-ым, Цикл выполняется лишь до половины диапазона от n 1 до (n 1+ n 2) div 2, иначе в массиве ничего не изменится. Фрагмент программного кода:
For i=n1 To (n1 + n2) div 2 'Цикл по количеству перестановок tmp=a[i] 'Обмен местами элементов ai и an1+n2-i a(i)=a(n1+n2-i) a(n1+n2-i)=tmp Next i Кольцевой сдвиг элементов массива Кольцевой сдвиг – это смещение элементов массива вправо либо влево, причем вытесненные элементы занимают освободившиеся в результате смещения позиции в противоположном конце массива – так, словно массив представляет собой кольцо (первый и последний элементы смыкаются). Порядок следования элементов при этом сохраняется. Пример. В одномерном массиве, состоящем из n элементов произвести кольцевой сдвиг элементов на k позиций. Значение k задается, оно может быть как положительным, так и отрицательным, но должно быть целым. Фрагмент программного кода: 'Анализ числа k, сдвиг будет происходить только если k отлично от 0 If k <> 0 Then 'Формирование переменной sdvig If k >0 Then sdvig=k Else sdvig=n+k 'Кольцевое смещение осуществляется на 1 позицию sdvig раз For i=1 To sdvig 'Смещение начинается с последнего элемента, который помещают во вспомогательную 'переменную tmp, чтобы его значение не потерялось, откуда его затем извлекают и 'отправляют в первую позицию после выхода из внутреннего цикла. tmp=a(n); For j=n-1 To 1 Do a(j+1)=a(j) a(1)=tmp
Дата добавления: 2014-11-16; Просмотров: 493; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |