Перед каждым отрицательным элементом массива вставить нулевой элемент - 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, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д