Нужно немного доработать программу - C (СИ)
Формулировка задачи:
Задание:Вложение 792337
тут не уверен что правильно написал:Вложение 792338
и в самой функции постоянно пишет что new_N пустое:Вложение 792339
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int** func(int **, int *, int *, int **, int, int);
int main() {
int **a; // указатель на указатель на строку
int **a1 = NULL;
int i, j, n, m;
int *nn=0, *nm=0;
system("chcp 1251");
system("cls");
printf("Введите количество строк: ");
scanf("%d", &n);
printf("Введите количество столбцов: ");
scanf("%d", &m);
// Выделение памяти под указатели на строки
a = (int**)malloc(n * sizeof(int*));
// Ввод элементов массива
for (i = 0; i<n; i++) // цикл по строкам
{
// Выделение памяти под хранение строк
a[i] = (int*)malloc(m * sizeof(int));
for (j = 0; j<m; j++) // цикл по столбцам
{
printf("a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}
// Вывод элементов массива
for (i = 0; i<n; i++) // цикл по строкам
{
for (j = 0; j<m; j++) // цикл по столбцам
{
printf("%5d ", a[i][j]); // 5 знакомест под элемент массива
}
printf("\n");
}
int **c = func(a1, nn, nm, a, n, m);
//for (int i = 0; i < *nn; i++);
//free(*(a1 + i));
//free(a1);
if (c)
printf("poluchena novaya matrica: %d*%d \n", nn,nm);
for (int i = 0; i < n; i++);
for (int j = 0; j < m; j++);
printf("%d", c[*nn][*nm] );
printf("\n");
free(c);
free(a);
getchar(); getchar();
return 0;
}
int** func(int ** new_matrix, int *new_N, int *new_M, int**matrix, int N, int M)
{
int ** new_martix = NULL;
int i = 0;
new_matrix = (int**)malloc(N * sizeof(int));
for (int i = 0; i < N; i++);
{ new_matrix[i] = (int*)malloc(M * sizeof(int));
if (i % 2 == 0)
{
for (int j = 0; j < M; j++)
{
if (matrix[i][j] % 5 == 0)
{
new_martix[*new_N][*new_M] = matrix[i][j];
new_M++;
}
}
if (new_N > 0 && new_M > 0)
{
new_N++;
new_M = 0;
}
}
}return new_matrix;
}Решение задачи: «Нужно немного доработать программу»
textual
Листинг программы
int nn, nm; // без звезд!!! .... int **c = func(&nn, &nm, a, n, m);
Объяснение кода листинга программы
- В коде объявлены две переменные типа int -
nnиnm. - Затем происходит вызов функции
func, которая возвращает двумерный массив указателей на int (c). - В качестве аргументов функции
funcвыступаютnn,nm,a,nиm. - Значения переменных
nnиnmпередаются в функциюfuncпо адресам (указателям). - Переменные
a,nиmтакже передаются в функциюfuncпо адресам (указателям). - Результатом работы функции
funcявляется двумерный массив указателей на int (c).