No Image

Элементы массива a расположены в обратном порядке

СОДЕРЖАНИЕ
0 просмотров
11 марта 2020

Переставить элементы заданного массива в обратном порядке, то есть произвести реверс массива.

При реверсе массива первый элемент становится последним, а последний первым; второй – предпоследним, а предпоследний – вторым; третий элемент уходит на место третьего с конца, а тот на место третьего и т. д. Таких пар перестановок надо сделать в два раза меньше, чем длина массива, то есть переставлять элементы до тех пор, пока меняющиеся элементы не встретятся в центре массива.

Конечно, переставлять можно также, начиная с середины массива и двигаясь к его началу и концу. Однако вышеописанный способ немного проще.

Если в массиве нечетное количество элементов, то в середине массива находится один элемент, у которого нет пары и который обменивать не надо. Если же в массиве четное количество элементов, то в середине находится пара, которая также должна обменяться. В любом случае количество обменов будет равно количеству элементов массива нацело деленному на 2.

Таким образом, реверс массива происходит в цикле, количество итераций (проходов) которого равно не более половины от количества элементов. В теле цикла происходит обмен элементов. Если индексация (i) массива начинается с единицы, а количество элементов N, то индекс элемента, с которым должен происходить обмен будет находиться по формуле N-i+1. Если же индексация идет с нуля, то противоположный для i элемент находится как N-i-1.

const N = 10 ;
var
a : array [ 1 .. N ] of integer ;
i : byte ;
b : integer ;
begin
for i : = 1 to N do
read ( a [ i ] ) ;

for i : = 1 to N div 2 do begin
b : = a [ i ] ;
a [ i ] : = a [ N – i + 1 ] ;
a [ N – i + 1 ] : = b ;
end ;

for i : = 1 to N do
write ( a [ i ] , ‘ ‘ ) ;

Есть массив из 10 элементов: 1234567890 . Почему такой цикл:

выдает 0987667890 вместо ожидаемого 0987654321 ?
Я пытаюсь переставить элементы в обратном порядке.

Читайте также:  Аудио aac что это

1 ответ 1

Потому что элементы с индексами i и j нужно менять местами, а не просто присваивать элементам с индексом i значения оных с индексом j , безвозвратно теряя при этом i -тые значения.

3. Зачем Вы считаете количество элементов над диагональю и под диагональю? И так очевидно, что это половина элементов (без учета диагонали). Да и по заданию их считать не надо.

Если учишься, то это не означает, что можно отключать мозг и писать любую чушь. Кстати, полезно задать себе вопрос: "зачем мне С++?" и честно на него ответить.

Пока все выглядит, словно получил задание, нашел какой-то код (неважно, что он не относится к этому заданию) и пытаешься выклянчить решение. Так С++ не освоишь и даже пытаться не стоит.

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector