Передача массива в функцию для заполнения - C (СИ)
Формулировка задачи:
Доброго времени вопрос касательно функций. Суть программы в том,что бы из исходного массива сформировать 3 новых по заданному диапазону значений. То есть я должен вызывать функцию 3 раза и с каждым разом должен формироваться новый массив. Как это реализовать? Пока что функция заполняет вспомогательный массив,а в теле программы нужному массиву присваиваются элементы вспомогательного. Но в связи с этим смысл функции пропадает.
Часть программы:
Функция:
P.S если будет нужно, предоставлю полный листинг программы
int main()
{
int a[N][M], i, a_mas[Q], c_mas[Q], d_mas[Q],tmp_mas[Q];
int f,k,n;
input(a);
printf("Исходный массив\n");
output(a);
printf("\n");
k=-5;n=5;
f=find_mas(a,tmp_mas,k,n);
printf("Massiv A: ");
for (i = 0; i<f; i++)
{
a_mas[i]=tmp_mas[i];
printf("%4d", a_mas[i] );
}
k=10;n=20;
f=find_mas(a,tmp_mas,k,n);
printf("\nMassiv C: ");
for (i = 0; i<f; i++)
{
c_mas[i]=tmp_mas[i];
printf("%4d", c_mas[i] );
}int find_mas(int a[N][M],int tmp_mas[Q],int k,int n)
{
int i, j,f=0;
for (i = 0; i<N; i++)
{
for (j = 0; j <M; j++)
if (a[i][j] >= k && a[i][j] <= n)
{
tmp_mas[f]=a[i][j]; f++;
}
}
return f;
}Решение задачи: «Передача массива в функцию для заполнения»
textual
Листинг программы
int * CreaArr(int n, int c)
{
int *r;
int i;
r=calloc(n,sizeof(int)); // создаем массив
if (c==0)
{
for (i=0; i<n; i++) r[i]=2*i-1; // при с=0 заполняем нечетными
return r;
}
else if (c==1)
{
for (i=0; i<n; i++) r[i]=2*i; // при с=1 заполняем четными
return r;
}
else
return r; // иначе оставляем нули
}
Объяснение кода листинга программы
В данном коде функция CreaArr() принимает два аргумента: n и c. Значение n указывает на количество элементов, которые необходимо создать в массиве, а значение c определяет тип заполнения массива. Внутри функции происходит следующее:
- Выделяется память под массив r с помощью функции calloc(). Размер массива определяется значением n, а тип данных - int.
- Затем, в зависимости от значения c, выполняется заполнение массива.
- Если c равно 0, то в массив r записываются нечетные числа от 1 до n.
- Если c равно 1, то в массив r записываются четные числа от 2 до n.
- Если c не равно 0 и не равно 1, то массив r остается пустым.
- После заполнения массива, функция возвращает указатель на начало массива r. Таким образом, функция CreaArr() создает массив заданного размера и заполняет его либо нечетными, либо четными числами в зависимости от значения аргумента c.