Удалить из последовательности элемент с номером k - C (СИ)
Формулировка задачи:
Добрый вечер, срочно нужна помощь с заданием.
Нужно написать программу на си, в которой: даны действительные числа а1,…, аn, p, натуральное число k (а1 <= а2 <=…<= аk…<= аn, k <= n). Удалить из а1,…, аn элемент с номером k (т.е. аk) и вставить элемент, равный р, так, чтобы не нарушилась упорядоченность.
Так как я на пути изучения си нахожусь на начальном уровне огромная просьба, написать программу не сложно, что бы ее возможно было понять и объяснить преподавателю.
Решение задачи: «Удалить из последовательности элемент с номером k»
textual
Листинг программы
#include <stdio.h>
#define N 10
int main()
{
int A[N] = {1, 3, 4, 4, 5, 7, 8, 9, 9, 9};
int i;
// Вывод
for (i = 0; i < N; ++i)
{
printf("%d ", A[i]);
}
printf("\n");
// Индекс элемента для удаление
int k = 8;
// Удаление
for (i = k; i < N-1; ++i)
{
A[i] = A[i + 1];
}
// Число для добавления
int p = 2;
// Добавление
for (i = N; (i > 0) && (A[i - 1] > p); --i)
{
A[i] = A[i - 1];
}
A[i] = p;
// Вывод
for (i = 0; i < N; ++i)
{
printf("%d ", A[i]);
}
printf("\n");
return 0;
}
Объяснение кода листинга программы
В этом коде определен массив A размером N=10.
- В цикле выводятся все элементы массива A.
- Затем определяется индекс k=8 элемента для удаления.
- Далее в цикле элементы массива A сдвигаются вправо, начиная с элемента с индексом k, до тех пор пока не заполнится вся область, в которой находился удаленный элемент.
- Затем определяется число p=2 для добавления.
- В цикле, пока не будет найден элемент, больший чем p, элементы массива A сдвигаются влево, начиная с последнего элемента, до тех пор пока не будет найден элемент, меньший или равный p.
- Затем элемент p добавляется в массив A в найденную позицию.
- В цикле выводятся все элементы массива A.
- Код завершается возвратом 0, что означает успешное выполнение.