Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Изменение положения элементов на некотором отрезке



При решении задач такого типа очень важен контроль за границами диапазона изменения индексов: они должны быть целыми, не выходить за пределы диапазона, кроме того, нижняя граница диапазона должна быть меньше верхней.

Пример. В одномерном массиве 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

Next i

End if





Дата публикования: 2014-12-28; Прочитано: 259 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...