Нужно чтоб матрица выводилась через динамический массив - C (СИ)

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

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

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    /*int A[N][M] = { { 0, 1, 0 },
                    { 0, 2, 0 },
                    { 0, 4, 0 },
                    { 1, 5, 0 }};// Задаем произвольную матрицу*/

    int i,j,M,N;
    int** matrix;
    printf("Vvedite N\n");
    scanf("%d", &N);
    printf("Vvedite M\n");
    scanf("%d", &M);
 
    for (i = 0; i<N; i++)
{

        for (j = 0; j<M; j++)
            printf("%d", matrix [i][j]);
            printf("\n");}
 
    matrix = (int **)malloc(N*sizeof (int*));
 
    matrix = (int **)malloc(M*sizeof (int*));

    int B[M]; // Иницилизируем количество нулём
    for (j = 0; j < M; j++) // Инициализируем массив
    {
        int i, fzero = 0;
        for (i = 0; i < N && !fzero; i++)
            if (matrix[i][j] != 0) fzero = 1; // Если элемент не ноль "признак нуля" ложь
 
        if (fzero == 0) {  B[i] = j; i++; } // Если "признак нуля" истина
    }
    int t;
    for (t = 0; t < i; t++)
        printf("%d", B[t]); // Вывод номера столбца
    printf("\nKolichestvo nulevih stolbcov = %d\n"); // Печать результата
    return 0;
}
Нужно чтоб матрица выводилась через динамический массив, подскажите где тут ошибка?

Решение задачи: «Нужно чтоб матрица выводилась через динамический массив»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
    /*int A[N][M] = { { 0, 1, 0 },
                    { 0, 2, 0 },
                    { 0, 4, 0 },
                    { 1, 5, 0 }};// Задаем произвольную матрицу*/
    int i,j,M,N;
    int * matrix;
    int *B;
    printf("Vvedite N\n");
    scanf("%d", &N);
    printf("Vvedite M\n");
    scanf("%d", &M);
    matrix = (int *)malloc(N*M*sizeof (int));
    //?? а где ввод матрицы ????
    for (i = 0; i<N; i++) {
        for (j = 0; j<M; j++) {
            printf("a[%d][%d]: ", i,j);
            scanf ("%d", &matrix[i*N+j]); ///!!!!!
        }
        printf("\n");
    }
    
    for (i = 0; i<N; i++) {
        for (j = 0; j<M; j++) {
            printf("%4d ", matrix[i*N+j]);
        }
        printf("\n");
    }
    
    B=(int*)calloc(M, sizeof(int));
    // Иницилизируем количество нулём
    for (j = 0; j < M; j++) { // Инициализируем массив
        int fzero = 0;
        for (i = 0; i < N && !fzero; i++)
            if (matrix[i*N+j] != 0) fzero = 1; // Если элемент не ноль "признак нуля" ложь
        if (fzero == 0)
            B[j] = j;    // Если "признак нуля" истина
    }
    int t;
    for (t = 0; t < i; t++)
        printf("%4d", B[t]); // Вывод номера столбца
    printf("\nKolichestvo nulevih stolbcov = %d\n", t); // Печать результата
free(matrix)    ;
free(B);
return 0;
}

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

В этом коде:

  1. Создается матрица динамическим массивом.
  2. Задается произвольная матрица.
  3. Вводится размер матрицы N и M.
  4. Матрица инициализируется нулями.
  5. Вводится матрица по одному элементу каждой строки.
  6. Матрица выводится на экран.
  7. Создается массив B.
  8. Инициализируется массив B нулями.
  9. Перебираются элементы матрицы.
  10. Если элемент не равен нулю, то увеличивается счетчик нулей в соответствующем столбце массива B.
  11. Выводится на экран количество нулей в матрице.
  12. Освобождаются динамические массивы.
  13. Завершается программа.

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


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

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

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