Создать динамический массив, в котором по одному, каждый раз увеличивается размер массива - 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;
- }
Объяснение кода листинга программы
- #include
, #include , #include , #include - подключают необходимые для работы программы библиотеки - int main() - функция main(), с которой начинается выполнение любой программы на языке C
- 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} - инициализация исходного массива A 10 элементами
- int m = 0; - инициализация переменной m, которая будет использоваться для контроля размера динамического массива
- printf(
Исходный массив : \n\n
); - вывод заголовка цикла для отображения исходного массива - for (int i = 0; i < 10; i++) - цикл, выполняющийся 10 раз для каждого элемента исходного массива
- printf(
%3.1f
, A[i]); - вывод значения элемента исходного массива с отступом в 3 позиции - B = (float)malloc(msizeof(float)); - выделение динамической памяти под массив B, размером m
- for (int i = 0; i < 10; i++) - цикл, выполняющийся 10 раз для каждого элемента исходного массива
- if (A[i] - (int)A[i] != 0) - проверка, является ли дробная часть числа A[i] отличной от нуля
- { - начало блока кода, выполняющегося только если условие истинно
- m++; - увеличение значения переменной m на 1
- B = (float)realloc(B, msizeof(float)); - изменение размера динамического массива B до нового значения m
- B[m — 1] = A[i]; - копирование значения элемента A[i] в динамический массив B
- } - конец блока кода
- printf(
\n\nКонечный массив : \n\n
); - вывод заголовка цикла для отображения конечного массива - for (int i = 0; i < m; i++) - цикл, выполняющийся m раз для каждого элемента динамического массива B
- printf(
%3.1f
, B[i]); - вывод значения элемента динамического массива B с отступом в 3 позиции - free(B); - освобождение динамической памяти, выделенной под массив B
- _getch(); - ожидание нажатия клавиши для завершения работы программы
- return 0; - завершение функции main(), т.е. завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д