Вставка элемента в произвольное место массива

Задача

Заполнить вводом с клавиатуры численный массив за исключением последнего элемента, вывести его на экран. Запросить еще одно значение и его позицию в в массиве. Вставить указанное число в заданную позицию, подвинув элементы после него.

Пояснение к задаче и алгоритм решения

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

Исходный код на языке программирования Pascal

const n = 6;
 
var
    arr: array[1..n] of integer;
    i, num, id: integer;
 
begin
    writeln('Заполните массив: ');
    for i := 1 to n - 1 do
        readln(arr[i]);
    write('Ваш массив: ');
    for i := 1 to n - 1 do
        write(arr[i]:5);
    writeln;
 
    write('Укажите еще один элемент: ');
    readln(num);
    write('Позиция в массиве: ');
    readln(id);
 
    for i := n - 1 downto id do
        arr[i+1] := arr[i];
    arr[id] := num;
 
    write('Ваш массив: ');
    for i := 1 to n do
        write(arr[i]:5);
    writeln;
end.

Пример(ы) выполнения программы на языке Pascal

2
4
5
7
9
Ваш массив:     2    4    5    7    9
Укажите еще один элемент: 8
Позиция в массиве: 5
Ваш массив:     2    4    5    7    8    9

Исходный код на языке программирования C

#include <stdio.h>
 
main() {
    int a[6], i, j, n;
    for (i=0; i < 5; i++)
        scanf("%d", &a[i]);
    printf("Число: ");
    scanf("%d", &n);
    printf("Позиция: ");
    scanf("%d", &j);
    for (i=4; i >= j-1; i--)
        a[i+1] = a[i];
    a[j-1] = n;
    for (i=0; i<6; i++)
        printf("%d ", a[i]);
    printf("\n");
}

Пример(ы) выполнения программы на языке C

45 3 3 4 22
Число: 45
Позиция: 3
45 3 45 3 4 22

Исходный код на языке программирования Python

# 1-й вариант:

a = []
N = 5
for i in range(N):
    num = int(input())
    a.append(num)
print(a)
num = int(input("Число: "))
j = int(input("Позиция: "))
a.append(num)
while N > j-1:
    a[N], a[N-1] = a[N-1], a[N]
    N -= 1
print(a)

# 2-й вариант:

a = []
N = 5
for i in range(N):
    num = int(input())
    a.append(num)
print(a)
num = int(input("Число: "))
j = int(input("Позиция: "))
 
a.insert(j-1,num)
 
print(a)

# 3-й вариант:

a = []
N = 5
for i in range(N):
    num = int(input())
    a.append(num)
print(a)
num = int(input("Число: "))
j = int(input("Позиция: "))
 
a = a[0:j-1] + [num] + a[j-1:]
 
print(a)

Пример(ы) выполнения программы на языке Python

7
5
4
3
2
[7, 5, 4, 3, 2]
Число: 1
Позиция: 1
[1, 7, 5, 4, 3, 2]

Особенности решения на языке программирования Python

Здесь используется немного иной алгоритм. Сначала в конец добавляется новый элемент, а потом происходит перемещение этого элемента обменом с соседними до указанной позиции.

Во втором способе используется метод insert() списков, а в третьем - создается новый список из срезов.

Исходный код на языке программирования КуМир

алг вставка элемента
нач
  цел N = 6
  цел таб arr[1:N]
  цел i, num, id
  вывод "Заполните массив: ", нс
  нц для i от 1 до N-1
    ввод arr[i]
  кц
  вывод "Ваш массив: "
  нц для i от 1 до N-1
    вывод arr[i], " "
  кц
  вывод нс
  вывод "Число: "
  ввод num
  вывод "Позиция: "
  ввод id
  нц для i от N-1 до id шаг -1
    arr[i+1] := arr[i]
  кц
  arr[id] := num;
  вывод "Ваш массив: "
  нц для i от 1 до N
    вывод arr[i], " "
  кц
кон

Пример(ы) выполнения программы на языке КуМир

Заполните массив:
5
23
12
8
15
Ваш массив: 5 23 12 8 15
Число: 28
Позиция: 3
Ваш массив: 5 23 28 12 8 15

Исходный код на языке программирования Basic

N = 6
dim a(N)
for i=0 to N-2
        input a[i]
next i
for i=0 to N-2
        print a[i] + " ";
next i
print
 
input "Число: ", num
input "Позиция: ", id
for i=N-2 to id-1 step -1
        a[i+1] = a[i]
next i
a[id-1] = num
for i=0 to N-1
        print a[i] + " ";
next i

Пример(ы) выполнения программы на языке Basic

12
16
19
13
11
12 16 19 13 11
Число: 18
Позиция: 3
12 16 18 19 13 11

Тема

Массивы

Уровень сложности

Средний

Дата публикации