Из одномерного массива чисел переписать отрицательные числа в новый массив - C (СИ)

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

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

Подскажите как действовать. Ошибка появляется при записи во 2ой массив отрицательные эл-ты из 1го
Листинг программы
  1. #include <stdio.h> // подключение библиотек
  2. #include <locale.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #include <time.h>
  6. #define BORDER_HIGH 100 // константы для рандома чисел
  7. #define BORDER_LOW -100
  8.  
  9. bool arrUnic(float *arr, int countValue, float value) // функция на проверку уникальности элементов
  10. {
  11. for (int i = 0; i < countValue; i++)
  12. {
  13. if (arr[i] == value)
  14. return false;
  15. }
  16. return true;
  17. }
  18. void main()
  19. {
  20. setlocale(LC_ALL, "RUS");
  21. float* arr; // первый массив
  22. float* arr2 ; // второй массив, в который нужно записать отрицательные числа
  23. int length; // кол-во эл-тов массива
  24. int countValue = 0, otrel = 0;
  25. short a;
  26. printf("Введите кол-во эл-тов массива: ");
  27. scanf_s("%d", &length);
  28. arr = (float *)malloc(length * sizeof(float));
  29.  
  30. printf("Как заполнить массив? \n 1) с клавиатуры \n 2) рандомно \n 3)выйти \n ");
  31. scanf_s("%hd", &a);
  32. switch (a)
  33. {
  34. case 1:
  35. {
  36. printf("Заполните массив: \n");
  37. for (int i = 0; i < length; i++)
  38. {
  39. float value;
  40. scanf_s("%f", &value);
  41. while (!arrUnic(arr, countValue, value))
  42. {
  43. printf("Введите значение еще раз: ");
  44. scanf_s("%f", &value);
  45. }
  46. arr[i] = value;
  47. countValue++;
  48. }
  49. } break;
  50. case 2: {
  51. printf("Массив заполняется рандомно! \n");
  52. srand((unsigned)(time(NULL)));
  53. for (int i = 0; i < length; i++)
  54. {
  55. float value;
  56. value = BORDER_LOW + (BORDER_HIGH - BORDER_LOW)*((float)rand() / RAND_MAX);
  57. while (!arrUnic(arr, countValue, value))
  58. {
  59. printf("Рандомим еще раз: ");
  60. value = BORDER_LOW + (BORDER_HIGH - BORDER_LOW)*((float)rand() / RAND_MAX);
  61. }
  62. arr[i] = value;
  63. countValue++;
  64. }
  65. }; break;
  66. case 3: exit(3); break;
  67. default: break;
  68. }
  69. printf("Заполненный массив: \n");
  70. for (int i = 0; i < length; i++) // выводим массив первый, и одновременно подсчитываем кол-во отрицательных эл-тов, чтобы узнать, сколько памяти нужно выделить для 2го массива
  71. {
  72. if (arr[i] < 0)
  73. {
  74. otrel++;
  75. }
  76. printf("a[%d]=%.2f \n", i, arr[i]);
  77. }
  78. printf("\n\n \n");
  79. arr2 = (float *)malloc(otrel * sizeof(float)); // выделение памяти для 2го массива
  80.  
  81. for (int i = 0; i < length; i++){ // ищем отрицательные эл-ты и записываем во 2ой массив ( тут как раз и непонятности появляются )
  82. if (arr[i] < 0)
  83. arr2[i] = arr[i]; }
  84.  
  85. printf("Кол-во отрицательных элеметов: %d \n", otrel);
  86. printf("Массив В, в котором хранятся отрицательные элементы \n");
  87. for (int y= 0; y< otrel;y++) // выводим 2ой массив из отрицательных чисел
  88. {
  89. printf("b[%d]=%.2f \n", y, arr2[y]);
  90. }
  91. delete arr;
  92. delete arr2;
  93. system("pause");
  94. }
На скриншоте видно, что записывается 1 эл-т, а остальные нет ( вместо них- мусор )

Решение задачи: «Из одномерного массива чисел переписать отрицательные числа в новый массив»

textual
Листинг программы
  1. for (int i = 0, j=0; i < length; i++){ // ищем отрицательные эл-ты и записываем во 2ой массив ( тут как раз и непонятности  появляются )
  2.     if (arr[i] < 0)
  3.     arr2[j++] = arr[i];

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

  1. Объявляется два массива arr и arr2
  2. В первой строке цикла i инициализируется нулем, а j - нулем.
  3. Цикл выполняется до тех пор, пока i меньше длины массива arr.
  4. Если значение элемента массива arr с индексом i меньше нуля, то этот элемент копируется в массив arr2 с инкрементом j.
  5. После выполнения цикла, в массиве arr2 будут содержаться все отрицательные числа из массива arr.

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


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

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

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

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

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

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