Нужно чтоб матрица выводилась через динамический массив - 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;
}
Объяснение кода листинга программы
В этом коде:
- Создается матрица динамическим массивом.
- Задается произвольная матрица.
- Вводится размер матрицы N и M.
- Матрица инициализируется нулями.
- Вводится матрица по одному элементу каждой строки.
- Матрица выводится на экран.
- Создается массив B.
- Инициализируется массив B нулями.
- Перебираются элементы матрицы.
- Если элемент не равен нулю, то увеличивается счетчик нулей в соответствующем столбце массива B.
- Выводится на экран количество нулей в матрице.
- Освобождаются динамические массивы.
- Завершается программа.