Выполнить функциями calloc() или malloc() - C (СИ)

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

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

Написать пользовательскую функцию, решающую указанную ниже задачу. Массивы А и В динамические, выделение памяти выполнить функциями calloc() или malloc(), обращение к элементам массива только через указатель. Предусмотреть реакцию программы на ситуации, при которых задача не имеет решения.
#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();
    
  }
Может помочь свести эту задачу к функциям malloc() и calloc()?

Решение задачи: «Выполнить функциями 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));
}
}

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

  1. Объявление переменных: n, m, v, y, z, i, j=0, y1, y2;
  2. Ввод числа v с помощью scanf_s();
  3. Ввод размера первого массива n с помощью scanf_s();
  4. Выделение памяти под первый массив с помощью malloc();
  5. Если память под первый массив не выделена, выводится сообщение об ошибке;
  6. Ввод элементов первого массива с помощью scanf_s();
  7. Ввод размера второго массива m с помощью scanf_s();
  8. Выделение памяти под второй массив с помощью malloc();
  9. Если память под второй массив не выделена, выводится сообщение об ошибке;
  10. Ввод элементов второго массива с помощью scanf_s();
  11. Вызов функции Search(), которая ищет количество чисел меньше заданного в обоих массивах;
  12. Вызов функции Output(), которая выводит первый массив;
  13. Вызов функции Output(), которая выводит второй массив;
  14. Если количество чисел меньше заданного в обоих массивах одинаково, выводится соответствующее сообщение;
  15. Если количество чисел меньше заданного в обоих массивах не одинаково, выводится сообщение, указывающее, в каком из массивов больше чисел меньше заданного;
  16. Вывод первого массива;
  17. Вывод второго массива;
  18. Возвращение из функции main();
  19. Вывод сообщения, что программа успешно завершилась;
  20. Ожидание нажатия клавиши с помощью _getch().

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы