Создать динамический массив, в котором по одному, каждый раз увеличивается размер массива - 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(), т.е. завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д