Corsairs
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору vadimnazarenko По первой задаче: пусть n - количество элементов в массиве (т.е. 1..n) Код: t:=n div 2; for i:=1 to t do begin j:=2*i; x:=a[j-1]; a[j-1]:=a[j]; a[j]:=x; end; | По второй задаче: Код: x:=a[n]; for j:=n downto 1 do a[j]:=a[j-1]; a[0]:=x; | По третьей задаче: Так как тут одинаковый код будет использоваться дважды, можно оформить процедурой... Пусть x и y - соответственно начало и конец части последовательности, тогда: Код: n:=(y-x)+1; t:=n div 2; for i:=1 to t do begin z:=a[x]; a[x]:=a[y]; a[y]:=z; inc(x); dec(y); end; | По четвертой задаче: Если я правильно понял условие, то: если мы имеем массив вида {1, 2, 3, 4, 5, 6, 7, 8, 9} и надо сместить на 6 элементов вправо, то мы получим такой массив: {4, 5, 6, 7, 8, 9, 1, 2, 3}, а если влево - то {7, 8, 9, 1, 2, 3, 4, 5, 6}, да? Есть ли ограничения? (т.е. можно ли использовать дополнительный массив) Если можно, тогда: Код: t:=(n-k) mod n; for i:=1 to n do begin j:=(i+t) mod n; b[i]:=a[j]; end; | А если нельзя - тогда можно воспользоваться кодом из второй задачи (т.е. сдвигать массив поэлементно) |