Сдвинуть элементы массива в указанном направлении (влево или вправо) и на указанное число шагов. Освободившиеся ячейки заполнить нулями. Выводить массив после каждого шага.
Если массив сдвигается на один шаг влево, то на место элемента с индексом i записывается тот элемент, который находится на месте i+1. То есть на место текущего элемента записывается следующий за ним. В последнюю ячейку массива записывать нечего. По условию задачи туда следует записать число 0.
Таким образом, сдвиг массива на один шаг влево — это цикл от первого элемента до предпоследнего включительно, в теле которого происходит запись значения из следующей ячейки в текущую ячейку (arr[i] := arr[i+1]
). В предпоследнюю ячейку записывается последний элемент. После цикла присваивается 0 в последнюю ячейку массива.
Если массив сдвигается на один шаг вправо, то его следует «перебирать» с конца. На место элемента i присваивается стоящий перед ним (i-1). В освободившуюся первую ячейку записывается ноль.
Сдвиг массива на один шаг вправо — это цикл от последнего элемента до второго включительно, в теле которого происходит запись значения из предыдущей ячейки в текущую (arr[i] := arr[i-1]
). После цикла в первую ячейку массива записывается ноль.
Количество шагов сдвига определяется внешним циклом.
Алгоритм решения данной задачи можно описать так:
- Запросить у пользователя количество шагов сдвига и направление. Условиться, что если вводится отрицательное целое, то сдвиг выполняется влево на указанное абсолютное значение, если вводится положительное число, то сдвиг вправо.
- Заполнить исходный массив и вывести его на экран.
- Выполнять внешний цикл столько раз, сколько шагов было указано.
- Если было введено отрицательное число, то выполнить цикл от первого элемента до предпоследнего, перезаписав в нем значение каждой очередной ячейки на значение последующей. Записать в последнюю ячейку 0.
- Иначе, выполнить цикл от последнего элемента до второго, записывая в каждую текущую ячейку значение предыдущей. В первую ячейку записать 0.
- Вывести на экран текущий массив.
Посмотреть вариант кольцевого сдвига (когда вышедший за границу элемент массива записывается с другой его стороны) можно здесь.
Pascal
сдвиг массива паскаль
const N = 9;
var
arr: array[1..N] of integer;
qty: integer;
i,j: byte;
begin
readln(qty);
for i:=1 to N do begin
arr[i] := i*100 + i*10 + i;
write(arr[i]:4);
end; writeln;
for j:=1 to abs(qty) do begin
if qty > 0 then begin
for i:=N downto 2 do
arr[i] := arr[i-1];
arr[1] := 0;
end
else begin
for i:=1 to N-1 do
arr[i] := arr[i+1];
arr[N] := 0;
end;
for i:=1 to N do
write(arr[i]:4);
writeln;
end;
end.
Пример(ы) выполнения программы:
Сдвиг влево:
-4
111 222 333 444 555 666 777 888 999
222 333 444 555 666 777 888 999 0
333 444 555 666 777 888 999 0 0
444 555 666 777 888 999 0 0 0
555 666 777 888 999 0 0 0 0
Сдвиг вправо:
5
111 222 333 444 555 666 777 888 999
0 111 222 333 444 555 666 777 888
0 0 111 222 333 444 555 666 777
0 0 0 111 222 333 444 555 666
0 0 0 0 111 222 333 444 555
0 0 0 0 0 111 222 333 444
Язык Си
#include < stdio.h>
#define N 9
main() {
int arr[N], qty, i, j;
scanf("%d",&qty);
for (i=0; i< N; i++) {
arr[i] = (i+1)*100 + (i+1)*10 + (i+1);
printf("%4d",arr[i]);
}
printf("\n");
for (j=0; j< abs(qty); j++) {
if (qty < 0) {
for (i=0; i< N-1; i++)
arr[i] = arr[i+1];
arr[N-1] = 0;
} else {
for (i=N-1; i>0; i--)
arr[i] = arr[i-1];
arr[0] = 0;
}
for (i=0; i< N; i++)
printf("%4d",arr[i]);
printf("\n");
}
}
Python
сдвиг массива python (питон)
qty = int(input())
N = 9
a = []
for i in range(1,N+1):
b = 100*i + 10*i + i
a.append(b)
print("%4d" % b, end='')
print()
for j in range(abs(qty)):
if qty < 0:
for i in range(N-1):
a[i] = a[i+1]
a[N-1] = 0
elif qty > 0:
for i in range(N-1,0,-1):
a[i] = a[i-1]
a[0] = 0
for i in a:
print("%4d" % i, end='')
print()
КуМир
алг
нач
цел N=9
цел таб массив[1:N]
цел шаги, i, j
ввод шаги
нц для i от 1 до N
массив[i] := i*100+i*10+i
вывод массив[i]:4
кц
вывод нс
нц для j от 1 до iabs(шаги)
если шаги > 0 то
нц для i от N до 2 шаг -1
массив[i] := массив[i-1]
кц
массив[1] := 0
иначе
нц для i от 1 до N-1
массив[i] := массив[i+1]
кц
массив[N] := 0
все
нц для i от 1 до N
вывод массив[i]:4
кц
вывод нс
кц
кон
В программе используется форматированный вывод, который доступен только в версии 2.x.
Basic-256
input qty
N = 9
dim arr(N)
for i=0 to N-1
arr[i] = (i+1)*100 + (i+1)*10 + (i+1)
print arr[i] + " ";
next i
print
for j=1 to abs(qty)
if qty < 0 then
for i=0 to N-2
arr[i] = arr[i+1]
next i
arr[N-1] = 0
else
for i=N-1 to 1 step -1
arr[i] = arr[i-1]
next i
arr[0] = 0
endif
for i=0 to N-1
print arr[i] + " ";
next i
print
next j
Привет. Всё Ок. Я попытался решить эту задачу на языке 1С. Не получилось. Помоги решить задачу на языке 1С?