Выполнить функциями calloc() или malloc() - C (СИ)
Формулировка задачи:
Написать пользовательскую функцию, решающую указанную ниже задачу. Массивы А и В динамические, выделение памяти выполнить функциями calloc() или malloc(), обращение к элементам массива только через указатель.
Предусмотреть реакцию программы на ситуации, при которых задача не имеет решения.
Может помочь свести эту задачу к функциям malloc() и calloc()?
#include <stdio.h> #include <conio.h> #include <stdlib.h> #define N 10 int main (void) { double a = -8.0,b=8.0,t,a1=-11.0,b1=11.0,m1,m2; double arr1[N],arr2[N], *pDop[N]; int i; // Заполнение 1 массива случайными числами for(i = 0; i < N; ++i) arr1[i] = a + (b - a)*(double)rand()/RAND_MAX; //Вывод 1 массива printf("\n\t The initial array of [%1.4f, %1.4f]:\n", a, b); for (i = 0; i < N; ++i) printf("\n\t%2d) %8.4f", i+1, arr1[i]); // Заполнение 2 массива случайными числами for(i = 0; i < N; ++i) arr2[i] = a + (b - a)*(double)rand()/RAND_MAX; //Вывод 2 массива printf("\n\t The initial array of [%1.4f, %1.4f]:\n", a, b); for (i = 0; i < N; ++i) printf("\n\t%2d) %8.4f", i+1, arr2[i]); // Взятие адресов элементов исходного массива for (i = 0; i < N; ++i) pDop[i] = &arr1[i]; //Поиск элемнтов больше t в первом массиве t=-2.0; m1=0.0;m2=0.0; for (i=0; i<N; ++i) { if (arr1[i]>t) m1=m1+1.0; } printf("\nm1=%2.0lf",m1); // Взятие адресов элементов исходного массива for (i = 0; i < N; ++i) pDop[i] = &arr2[i]; //Поиск элемнтов больше t в вторым массиве for (i=0; i<N; ++i) { if (arr2[i]>t) m2=m2+1.0; } printf("\nm2=%2.0lf",m2); if(m1<m2){ for (i = 0; i < N; ++i) printf("\n\t%2d) %8.4f\n", i+1, arr1[i]); for (i = 0; i < N; ++i) printf("\n\t%2d) %8.4f\n", i+1, arr2[i]); } else {for (i = 0; i < N; ++i) printf("\n\t%2d) %8.4f\n", i+1, arr2[i]); for (i = 0; i < N; ++i) printf("\n\t%2d) %8.4f\n", i+1, arr1[i]); }; printf("\n\n Press any key: "); _getch(); }
Решение задачи: «Выполнить функциями calloc() или malloc()»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <locale.h> #include <malloc.h> void Output(int *,int); int Search(int *,int, int); int main() { setlocale(LC_CTYPE,"Russian"); int *A,*B; int n,m,v,y,z,i,j=0,y1,y2; printf("\nВведите v:"); scanf_s("%d", &v); printf("\nВведите n:");//Формирование 1 массива scanf_s("%d", &n); y=n; A = (int *) (malloc(y*sizeof(int))); if(!A) { printf("Предел размерности!"); } printf("\nВведите элементы:"); for (i=0; i<n; i++) { printf("\n A[%d]=",i); scanf_s("%d", A+i); } printf("\nВведите m:");//Формирование 2 массива scanf_s("%d", &m); z=m; B = (int *) (malloc(z*sizeof(int))); if(!B) { printf("Предел размерности!"); } printf("\nВведите элементы:"); for (i=0; i<m; i++) { printf("\n B[%d]=",i); scanf_s("%d", B+i);} y1=Search(A,n,v); y2=Search(B,m,v); if (y1==y2) printf("Количество чисел меньше заданного в обоих массивах одинаково"); else { if (y1<y2) {Output(A,n);Output(B,m);} else {Output(B,m);Output(A,n);}} _getch(); } int Search(int *a1, int n1, int v1){// Функция поиска количества элементов в массиве меньше заданного числа int j=0; for ( int i1=0; i1<n1; i1++) {if (a1[i1]<v1) j++; } return j; } void Output(int *mas, int n1)//Функция вывода массива { for( int i=0; i<n1; i++){ printf("\n\n"); printf(" %d ", *(mas+i)); } }
Объяснение кода листинга программы
- Объявление переменных: n, m, v, y, z, i, j=0, y1, y2;
- Ввод числа v с помощью scanf_s();
- Ввод размера первого массива n с помощью scanf_s();
- Выделение памяти под первый массив с помощью malloc();
- Если память под первый массив не выделена, выводится сообщение об ошибке;
- Ввод элементов первого массива с помощью scanf_s();
- Ввод размера второго массива m с помощью scanf_s();
- Выделение памяти под второй массив с помощью malloc();
- Если память под второй массив не выделена, выводится сообщение об ошибке;
- Ввод элементов второго массива с помощью scanf_s();
- Вызов функции Search(), которая ищет количество чисел меньше заданного в обоих массивах;
- Вызов функции Output(), которая выводит первый массив;
- Вызов функции Output(), которая выводит второй массив;
- Если количество чисел меньше заданного в обоих массивах одинаково, выводится соответствующее сообщение;
- Если количество чисел меньше заданного в обоих массивах не одинаково, выводится сообщение, указывающее, в каком из массивов больше чисел меньше заданного;
- Вывод первого массива;
- Вывод второго массива;
- Возвращение из функции main();
- Вывод сообщения, что программа успешно завершилась;
- Ожидание нажатия клавиши с помощью _getch().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д