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

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

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

Используя malloc и realloc, помогите написать программу реальных чисел массив ,,Array" со 100 элементами . Можно заполнить N элементов массива (N>0, вводит пользователь ) . Создать динамический массив , в котором по одному , каждый раз увеличивается размер массива , Переписать элементы массива Array , которые не целые.
Вот применр что у меня есть - но э\то не совсем то , что мне нужно !! Может кто помочь переделать под меня ? Буду миллион раз благодарен ():d
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <stdlib.h>
 
int v[100]; 
int *v1; 
int i, a, b = 0;
char ans;
 
int main() {
    do {
        printf("Array size: ");
        scanf("%d", &a);
        if (a > 100 || a <= 0) {
            printf("\nError! 0 < size < 100!");
        }
        else {
            v1 = NULL;
            b = 0;
            do {
                printf("\nDo you want to fill array by yourself?\nEnter y or n: "
                    );
                flushall();
                scanf("%c", &ans);
                if (ans != 'y' && ans != 'n')
                    printf("\nError! Enter y or n!");
                else
                    break;
            }
            while (ans != 'y' && ans != 'n');
            if (ans == 'n') {
                for (i = 0; i < a; i++) {
                    v[i] = 1 + rand() % 10;
                    printf("Array[%d]:  %d\n", i + 1, v[i]);
                }
            }
            else {
                printf("\nFill the array: \n");
                for (i = 0; i < a; i++) {
                    printf("%d element: ", i + 1);
                    scanf("%d", &v[i]);
                }
            }
            printf("\n");
            for (i = 0; i < a; i++)
                printf("%d ", v[i]);
 
            printf("\n\n");
            for (i = 0; i < a - 1; i++) {
                if (v[i] < v[i + 1]) {
                    b++;
                    if (v1 == NULL) {
                        v1 = (int*)calloc(b, sizeof(int));
                    }
                    else {
                        v1 = (int*)realloc(v1, b*sizeof(int));
                    }
                    v1[b - 1] = v[i];
                    printf("%d ", v1[b - 1]);
                }
            }
        }
        printf("\n\nRepeat? Yes - y ");
        flushall();
        scanf("%c", &ans);
        clrscr();
    }
    while (ans == 'y' || ans == 'Y');
}
ребятааа - помогите )

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

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    float A[10] = {1.0, 2.7, 3.63, 5.2 , 4.0, 7.0, 8.0, 9.35, 10.1, 5.0}, *B;
    int m = 0;
 
    printf("Исходный массив : \n\n");
    for (int i = 0; i < 10; i++)
        printf("%3.1f ", A[i]);
    
    B = (float*)malloc(m*sizeof(float));
    for (int i = 0; i < 10; i++)
    {
        if (A[i] - (int)A[i] != 0)
        {
            m++;
            B = (float*)realloc(B, m*sizeof(float));
            B[m - 1] = A[i];
        }
    }
 
    printf("\n\nКонечный массив : \n\n");
    for (int i = 0; i < m; i++)
        printf("%3.1f ", B[i]);
        
    free(B);
    _getch();
    return 0;
}

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

  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
Похожие ответы