ВУЗ:
Составители:
Рубрика:
145
begin {если обработан элемент a[i],
то обработать a[j]; j:=j-2;
иначе обработать a[i]; i:=i+2 }
end.
Случаи 4-6 можно легко обобщить для перебора любых элементов, кратных k.
Рассмотрим схему перебора элементов массива, кратных k, двигаясь от начала
массива к его концу.
i:=k;
while i<=n do
begin {обработка a[i]}
i:=i+k
end.
Перебор элементов массива, кратных k, можно осуществить следующим
образом:
if n mod k = 0 then i:=n
else if n mod k = 1 then i:=n-1
else if n mod k = 2 then i:=n-2
else if n mod k = 3 then i:=n-3
else i:=n-4;
while i>0 do
begin {обработка a[i]}
i:=i-k
end.
Поскольку при формировании начального значения i, из n вычитается
величина
остатка от деления на k, то вложенные условные операторы можно заменить
оператором присваивания: i:=n-n mod k;
Рассмотрим схемы перебора нескольких элементов массива одновременно.
Случай 7. Перебрать соседние элементы массива, двигаясь от начала массива к
концу. Рассмотрим вначале случай двух соседей. Для массива из 5 элементов
нужно последовательно обработать пары: a[1] и a[2] , a[2] и a[3], a[3] и a[4], a[4] и
a[5].
Вариант 1. for i:=1 to n-1 do {обработать a[i] и a[i+1]}.
Вариант 2. for i:=2 to n do {обработать a[i-1] и a[i]}.
Обобщим эту схему на случай k соседей. Для массива из 5 элементов и k=3
нужно последовательно обработать тройки: a[1]-a[2]-a[3], a[2]-a[3]-a[4], a[3]-a[4]-
a[5]. Здесь возможны три варианта реализации в зависимости от того, какой
элемент из тройки выбрать текущим:
1) a[i] - a[i+1] - a[i+2], в этом случае перебор идет от 1 до n-2;
2) a[i-1] - a[i] - a[i+1], в этом случае перебор идет от 2 до n-1;
3) a[i-2] - a[i-1] - a[i], в
этом случае перебор идет от 3 до n.
Для k элементов возможны k вариантов схем перебора в зависимости от выбора
текущего элемента. Пример, когда текущим является первый элемент для каждых k
соседей , приведен ниже:
{n-(k-1) означает, что у последних k-1 элемента нет k соседей }
for i:=1 to n-k+1 do {обработка a[i], a[i+1],...,a[i+k-1}.
145 begin {если обработан элемент a[i], то обработать a[j]; j:=j-2; иначе обработать a[i]; i:=i+2 } end. Случаи 4-6 можно легко обобщить для перебора любых элементов, кратных k. Рассмотрим схему перебора элементов массива, кратных k, двигаясь от начала массива к его концу. i:=k; while i<=n do begin {обработка a[i]} i:=i+k end. Перебор элементов массива, кратных k, можно осуществить следующим образом: if n mod k = 0 then i:=n else if n mod k = 1 then i:=n-1 else if n mod k = 2 then i:=n-2 else if n mod k = 3 then i:=n-3 else i:=n-4; while i>0 do begin {обработка a[i]} i:=i-k end. Поскольку при формировании начального значения i, из n вычитается величина остатка от деления на k, то вложенные условные операторы можно заменить оператором присваивания: i:=n-n mod k; Рассмотрим схемы перебора нескольких элементов массива одновременно. Случай 7. Перебрать соседние элементы массива, двигаясь от начала массива к концу. Рассмотрим вначале случай двух соседей. Для массива из 5 элементов нужно последовательно обработать пары: a[1] и a[2] , a[2] и a[3], a[3] и a[4], a[4] и a[5]. Вариант 1. for i:=1 to n-1 do {обработать a[i] и a[i+1]}. Вариант 2. for i:=2 to n do {обработать a[i-1] и a[i]}. Обобщим эту схему на случай k соседей. Для массива из 5 элементов и k=3 нужно последовательно обработать тройки: a[1]-a[2]-a[3], a[2]-a[3]-a[4], a[3]-a[4]- a[5]. Здесь возможны три варианта реализации в зависимости от того, какой элемент из тройки выбрать текущим: 1) a[i] - a[i+1] - a[i+2], в этом случае перебор идет от 1 до n-2; 2) a[i-1] - a[i] - a[i+1], в этом случае перебор идет от 2 до n-1; 3) a[i-2] - a[i-1] - a[i], в этом случае перебор идет от 3 до n. Для k элементов возможны k вариантов схем перебора в зависимости от выбора текущего элемента. Пример, когда текущим является первый элемент для каждых k соседей , приведен ниже: {n-(k-1) означает, что у последних k-1 элемента нет k соседей } for i:=1 to n-k+1 do {обработка a[i], a[i+1],...,a[i+k-1}.
Страницы
- « первая
- ‹ предыдущая
- …
- 141
- 142
- 143
- 144
- 145
- …
- следующая ›
- последняя »