Перед каждым отрицательным элементом массива вставить нулевой элемент - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот условие задачи: Задан вещественный массив размера N. Перед каждым отрицательным элементом массива вставить нулевой элемент. Вот что у меня получилось:
Листинг программы
  1. int main(int argc, char *argv[])
  2. {
  3. int n;
  4. printf("Vvedite kolichestvo elementov\n");
  5. scanf("%d",&n);
  6. double a[n];
  7. int d=0;
  8. printf("Vvedite element\n");
  9. for (int i=0;i<n;i++) scanf("%lf",&a[i]);
  10. for (int i=0;i<n;i++) {
  11. if (a[i]<0) a[i-2]=a[i-1], a[i-1]=0,
  12. d=d+1;}
  13. for (int i=0;i<n+d;i++)
  14. printf("%lf\n",a[i]);
  15. return 0;
  16. }
Я понимаю в чём ошибка, нужно создать цикл для перемещения элементов в предыдущую позицию, чтобы ничего не потерять. Но не знаю как это организовать(

Решение задачи: «Перед каждым отрицательным элементом массива вставить нулевой элемент»

textual
Листинг программы
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. int main()
  6. {
  7.     int n, count = 0;
  8.     double *arr, *tmp;
  9.     cin >> n;
  10.    
  11.     arr = new double[n];
  12.     tmp = new double[n];
  13.     for(int i = 0; i < n; i++)
  14.     {
  15.         cin >> arr[i];
  16.         tmp[i] = arr[i];
  17.         if(arr[i] < 0)
  18.             count++;
  19.     }
  20.     delete arr;
  21.     arr = new double[n+count];
  22.     int i = 0, k = 0;
  23.     while(i < n)
  24.     {
  25.         if (tmp[i] < 0)
  26.         {
  27.             arr[k] = 0;
  28.             arr[k+1] = tmp[i];
  29.             k += 2;
  30.             i++;
  31.         }
  32.         else
  33.         {
  34.             arr[k] = tmp[i];
  35.             k++;
  36.             i++;
  37.         }
  38.     }
  39.     delete tmp;
  40.     for (i = 0; i < n + count; i++)
  41.     {
  42.         cout << arr[i] << " ";
  43.     }
  44.     cout << endl;
  45.     return 0;
  46. }

Объяснение кода листинга программы

В этом коде:

  1. Создается массив arr размером n для хранения входных данных.
  2. Вводится количество отрицательных чисел в массиве n.
  3. Создается второй массив tmp размером n, который будет использоваться для обработки входных данных.
  4. В цикле for происходит ввод n чисел во второй массив tmp.
  5. В каждой итерации цикла проверяется, является ли число отрицательным. Если это так, увеличивается счетчик count.
  6. После завершения цикла for первый массив arr удаляется с помощью оператора delete.
  7. Создается новый массив arr размером n + count, где n - это исходный размер массива, а count - количество отрицательных чисел.
  8. Используется два вложенных цикла while, чтобы перебрать исходный массив tmp.
  9. Если число в массиве tmp отрицательное, то в новом массиве arr сначала записывается ноль, а затем само число.
  10. Если число положительное или ноль, оно просто копируется в новый массив arr.
  11. После завершения циклов while, второй массив tmp удаляется с помощью оператора delete.
  12. В цикле for элементы нового массива arr выводятся на экран через пробел.
  13. Программа возвращает 0, что означает успешное завершение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы