Создать динамический массив, в котором по одному, каждый раз увеличивается размер массива - C (СИ)

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

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

Используя malloc и realloc, помогите написать программу реальных чисел массив ,,Array" со 100 элементами . Можно заполнить N элементов массива (N>0, вводит пользователь ) . Создать динамический массив , в котором по одному , каждый раз увеличивается размер массива , Переписать элементы массива Array , которые не целые.
Вот применр что у меня есть - но э\то не совсем то , что мне нужно !! Может кто помочь переделать под меня ? Буду миллион раз благодарен ():d
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <tchar.h>
  4. #include <stdlib.h>
  5. int v[100];
  6. int *v1;
  7. int i, a, b = 0;
  8. char ans;
  9. int main() {
  10. do {
  11. printf("Array size: ");
  12. scanf("%d", &a);
  13. if (a > 100 || a <= 0) {
  14. printf("\nError! 0 < size < 100!");
  15. }
  16. else {
  17. v1 = NULL;
  18. b = 0;
  19. do {
  20. printf("\nDo you want to fill array by yourself?\nEnter y or n: "
  21. );
  22. flushall();
  23. scanf("%c", &ans);
  24. if (ans != 'y' && ans != 'n')
  25. printf("\nError! Enter y or n!");
  26. else
  27. break;
  28. }
  29. while (ans != 'y' && ans != 'n');
  30. if (ans == 'n') {
  31. for (i = 0; i < a; i++) {
  32. v[i] = 1 + rand() % 10;
  33. printf("Array[%d]: %d\n", i + 1, v[i]);
  34. }
  35. }
  36. else {
  37. printf("\nFill the array: \n");
  38. for (i = 0; i < a; i++) {
  39. printf("%d element: ", i + 1);
  40. scanf("%d", &v[i]);
  41. }
  42. }
  43. printf("\n");
  44. for (i = 0; i < a; i++)
  45. printf("%d ", v[i]);
  46. printf("\n\n");
  47. for (i = 0; i < a - 1; i++) {
  48. if (v[i] < v[i + 1]) {
  49. b++;
  50. if (v1 == NULL) {
  51. v1 = (int*)calloc(b, sizeof(int));
  52. }
  53. else {
  54. v1 = (int*)realloc(v1, b*sizeof(int));
  55. }
  56. v1[b - 1] = v[i];
  57. printf("%d ", v1[b - 1]);
  58. }
  59. }
  60. }
  61. printf("\n\nRepeat? Yes - y ");
  62. flushall();
  63. scanf("%c", &ans);
  64. clrscr();
  65. }
  66. while (ans == 'y' || ans == 'Y');
  67. }
ребятааа - помогите )

Решение задачи: «Создать динамический массив, в котором по одному, каждый раз увеличивается размер массива»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <locale.h>
  4. #include <stdlib.h>
  5.  
  6. int main()
  7. {
  8.     setlocale(LC_ALL, "Russian");
  9.  
  10.     float A[10] = {1.0, 2.7, 3.63, 5.2 , 4.0, 7.0, 8.0, 9.35, 10.1, 5.0}, *B;
  11.     int m = 0;
  12.  
  13.     printf("Исходный массив : \n\n");
  14.     for (int i = 0; i < 10; i++)
  15.         printf("%3.1f ", A[i]);
  16.    
  17.     B = (float*)malloc(m*sizeof(float));
  18.     for (int i = 0; i < 10; i++)
  19.     {
  20.         if (A[i] - (int)A[i] != 0)
  21.         {
  22.             m++;
  23.             B = (float*)realloc(B, m*sizeof(float));
  24.             B[m - 1] = A[i];
  25.         }
  26.     }
  27.  
  28.     printf("\n\nКонечный массив : \n\n");
  29.     for (int i = 0; i < m; i++)
  30.         printf("%3.1f ", B[i]);
  31.        
  32.     free(B);
  33.     _getch();
  34.     return 0;
  35. }

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

  1. #include , #include , #include , #include - подключают необходимые для работы программы библиотеки
  2. int main() - функция main(), с которой начинается выполнение любой программы на языке C
  3. setlocale(LC_ALL, Russian); - установка русской локали для вывода информации на экран
  4. float A[10] = {1.0, 2.7, 3.63, 5.2 , 4.0, 7.0, 8.0, 9.35, 10.1, 5.0} - инициализация исходного массива A 10 элементами
  5. int m = 0; - инициализация переменной m, которая будет использоваться для контроля размера динамического массива
  6. printf(Исходный массив : \n\n); - вывод заголовка цикла для отображения исходного массива
  7. for (int i = 0; i < 10; i++) - цикл, выполняющийся 10 раз для каждого элемента исходного массива
  8. printf(%3.1f, A[i]); - вывод значения элемента исходного массива с отступом в 3 позиции
  9. B = (float)malloc(msizeof(float)); - выделение динамической памяти под массив B, размером m
  10. for (int i = 0; i < 10; i++) - цикл, выполняющийся 10 раз для каждого элемента исходного массива
  11. if (A[i] - (int)A[i] != 0) - проверка, является ли дробная часть числа A[i] отличной от нуля
  12. { - начало блока кода, выполняющегося только если условие истинно
  13. m++; - увеличение значения переменной m на 1
  14. B = (float)realloc(B, msizeof(float)); - изменение размера динамического массива B до нового значения m
  15. B[m — 1] = A[i]; - копирование значения элемента A[i] в динамический массив B
  16. } - конец блока кода
  17. printf(\n\nКонечный массив : \n\n); - вывод заголовка цикла для отображения конечного массива
  18. for (int i = 0; i < m; i++) - цикл, выполняющийся m раз для каждого элемента динамического массива B
  19. printf(%3.1f, B[i]); - вывод значения элемента динамического массива B с отступом в 3 позиции
  20. free(B); - освобождение динамической памяти, выделенной под массив B
  21. _getch(); - ожидание нажатия клавиши для завершения работы программы
  22. return 0; - завершение функции main(), т.е. завершение работы программы

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


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

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

14   голосов , оценка 4.214 из 5

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

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

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