Вернуть массивы и их размеры из void-функции - C (СИ)

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

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

Всем привет, я в этом деле новичок.
void func(int num,int *arr1, int *arr2)
{
int size=1
arr1=(int*)malloc(size* sizeof(int));
arr2=(int*)malloc(size* sizeof(int));
//разные изменения над массивами.
size++;
arr1=(int*)realloc(arr1, size*sizeof(int));
arr2=(int*)realloc(arr2, size*sizeof(int));
}
int main()
{
int num, *bigarr=NULL, *smallarr=NULL;
printf("input num: ",num);
scanf("%d",&num);
func(num,smallarr,bigarr);
printf("%d%d%d",smallarr[0],smallarr[1],bigarr[0]);
программа вылетает посредине. в задании попрасили распечатать 2 массива в main, как мне передать в него 2 массива и 2 их размера. и функция должна выглядеть именно так. void func(int num,int *arr1, int *arr2) заранее спасибо за помощь.

Решение задачи: «Вернуть массивы и их размеры из void-функции»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
 
void split(const int num, int** const smallDigitsPtr, int* const smallDigitsLengthPtr,
    int** const bigDigitsPtr, int* const bigDigitsLengthPtr)
{
  int temp = num;
  int bigLength = 0;
  int smallLength = 0;
  int i = 0;
  int j = 0;
 
  int* big = NULL;
  int* small = NULL;
 
  /* counting digits */
  while (temp > 0)
  {
    if ((temp % 10) >= 5)
    {
      bigLength++;
    }
    else
    {
      smallLength++;
    }
 
    temp = temp / 10;
  }
 
  /* special cases */
  if (bigLength == 0)
  {
    bigLength = 1;
  }
 
  if (smallLength == 0)
  {
    smallLength = 1;
  }
 
  /* allocating memory */
  big = malloc(bigLength * sizeof(*big));
  small = malloc(smallLength * sizeof(*small));
 
  memset(big, 0, bigLength * sizeof(*big));
  memset(small, 0, smallLength * sizeof(*small));
 
  /* writing digits into arrays */
  i = bigLength - 1;
  j = smallLength - 1;
  temp = num;
  while (temp > 0)
  {
    if ((temp % 10) >= 5)
    {
      big[i] = temp % 10;
      i--;
    }
    else
    {
      small[j] = temp % 10;
      j--;
    }
    temp = temp / 10;
  }
 
  /* exporting results */
  (*bigDigitsPtr) = big;
  (*smallDigitsPtr) = small;
  (*bigDigitsLengthPtr) = bigLength;
  (*smallDigitsLengthPtr) = smallLength;
}
 
int main(void)
{
  int* big = NULL;
  int* small = NULL;
 
  int M = 0;
  int N = 0;
  int i = 0;
 
  const int num = 380512;
 
  split(num, &small, &M, &big, &N);
 
  printf("%d --> big = ", num);
  for (i = 0; i < N; i++)
  {
    printf("%d", big[i]);
  }
  printf(", small = ");
  for (i = 0; i < M; i++)
  {
    printf("%d", small[i]);
  }
 
  printf("\n");
 
  free(big);
  free(small);
 
  return 0;
}

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

  1. В функции split(), код разделяет число на две части: большие цифры и маленькие цифры.
  2. Переменная temp инициализируется значением входного числа num.
  3. Переменные bigLength и smallLength используются для отслеживания количества больших и маленьких цифр соответственно.
  4. Переменные big и small используются для хранения больших и маленьких цифр соответственно.
  5. Код проверяет каждую цифру числа num, и если она больше или равна 5, то она считается большой цифрой и увеличивается значение переменной bigLength. В противном случае, она считается маленькой цифрой и увеличивается значение переменной smallLength.
  6. После прохождения всего числа num, код проверяет, были ли найдены большие или маленькие цифры. Если нет, то переменным bigLength и smallLength присваивается значение 1.
  7. Код выделяет память для массивов big и small с помощью функции malloc().
  8. Затем, с помощью функции memset(), код очищает выделенную память, заполняя ее нулями.
  9. Код записывает цифры в массивы big и small, начиная с самых больших и заканчивая самыми маленькими.
  10. Наконец, результаты работы функции split() экспортируются в функцию main().
  11. В функции main(), код вызывает функцию split() с входным числом num.
  12. Затем, код выводит на экран массивы big и small.
  13. После вывода, память, выделенная для массивов big и small, освобождается с помощью функции free().
  14. Функция main() возвращает 0, что означает успешное выполнение программы.

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


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

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

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