Перед каждым отрицательным элементом массива вставить нулевой элемент - C (СИ)
Формулировка задачи:
Вот условие задачи:
Задан вещественный массив размера N. Перед каждым отрицательным элементом массива вставить нулевой элемент.
Вот что у меня получилось:
Я понимаю в чём ошибка, нужно создать цикл для перемещения элементов в предыдущую позицию, чтобы ничего не потерять. Но не знаю как это организовать(
int main(int argc, char *argv[]) { int n; printf("Vvedite kolichestvo elementov\n"); scanf("%d",&n); double a[n]; int d=0; printf("Vvedite element\n"); for (int i=0;i<n;i++) scanf("%lf",&a[i]); for (int i=0;i<n;i++) { if (a[i]<0) a[i-2]=a[i-1], a[i-1]=0, d=d+1;} for (int i=0;i<n+d;i++) printf("%lf\n",a[i]); return 0; }
Решение задачи: «Перед каждым отрицательным элементом массива вставить нулевой элемент»
textual
Листинг программы
#include <iostream> using namespace std; int main() { int n, count = 0; double *arr, *tmp; cin >> n; arr = new double[n]; tmp = new double[n]; for(int i = 0; i < n; i++) { cin >> arr[i]; tmp[i] = arr[i]; if(arr[i] < 0) count++; } delete arr; arr = new double[n+count]; int i = 0, k = 0; while(i < n) { if (tmp[i] < 0) { arr[k] = 0; arr[k+1] = tmp[i]; k += 2; i++; } else { arr[k] = tmp[i]; k++; i++; } } delete tmp; for (i = 0; i < n + count; i++) { cout << arr[i] << " "; } cout << endl; return 0; }
Объяснение кода листинга программы
В этом коде:
- Создается массив
arr
размеромn
для хранения входных данных. - Вводится количество отрицательных чисел в массиве
n
. - Создается второй массив
tmp
размеромn
, который будет использоваться для обработки входных данных. - В цикле
for
происходит вводn
чисел во второй массивtmp
. - В каждой итерации цикла проверяется, является ли число отрицательным. Если это так, увеличивается счетчик
count
. - После завершения цикла
for
первый массивarr
удаляется с помощью оператораdelete
. - Создается новый массив
arr
размеромn + count
, гдеn
- это исходный размер массива, аcount
- количество отрицательных чисел. - Используется два вложенных цикла
while
, чтобы перебрать исходный массивtmp
. - Если число в массиве
tmp
отрицательное, то в новом массивеarr
сначала записывается ноль, а затем само число. - Если число положительное или ноль, оно просто копируется в новый массив
arr
. - После завершения циклов
while
, второй массивtmp
удаляется с помощью оператораdelete
. - В цикле
for
элементы нового массиваarr
выводятся на экран через пробел. - Программа возвращает 0, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д