Нужно немного доработать программу - C (СИ)

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

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

Задание:Вложение 792337
#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;
}
тут не уверен что правильно написал:Вложение 792338 и в самой функции постоянно пишет что new_N пустое:Вложение 792339

Решение задачи: «Нужно немного доработать программу»

textual
Листинг программы
int nn, nm; // без звезд!!!
....
int **c = func(&nn, &nm, a, n, m);

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

  1. В коде объявлены две переменные типа int - nn и nm.
  2. Затем происходит вызов функции func, которая возвращает двумерный массив указателей на int (c).
  3. В качестве аргументов функции func выступают nn, nm, a, n и m.
  4. Значения переменных nn и nm передаются в функцию func по адресам (указателям).
  5. Переменные a, n и m также передаются в функцию func по адресам (указателям).
  6. Результатом работы функции func является двумерный массив указателей на int (c).

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


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

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

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