#include<stdio.h>#include<stdlib.h>// Hàm để đọc ma trận từ tệpint**readMatrixFromFile(constchar* filename,int* rows,int* columns){
FILE* file =fopen(filename,"r");if(file ==NULL){printf("Không thể mở tệp %s\n", filename);returnNULL;}fscanf(file,"%d %d", rows, columns);int** matrix =(int**)malloc(*rows *sizeof(int*));for(int i =0; i <*rows; i++){
matrix[i]=(int*)malloc(*columns *sizeof(int));for(int j =0; j <*columns; j++){fscanf(file,"%d",&matrix[i][j]);}}fclose(file);return matrix;}// Hàm để tính tích của từng cột của ma trậnvoidcalculateColumnProduct(int** matrix,int rows,int columns){for(int j =0; j < columns; j++){int product =1;for(int i =0; i < rows; i++){
product *= matrix[i][j];}printf("Tích của cột %d: %d\n", j +1, product);}}// Hàm để tìm cột có tích các phần tử nhỏ nhấtintfindColumnWithSmallestProduct(int** matrix,int rows,int columns){int minProduct =1;int minColumn =-1;for(int j =0; j < columns; j++){int product =1;for(int i =0; i < rows; i++){
product *= matrix[i][j];}if(minColumn ==-1|| product < minProduct){
minProduct = product;
minColumn = j;}}return minColumn;}// Hàm để giải phóng bộ nhớ đã cấp phát cho ma trậnvoidfreeMatrix(int** matrix,int rows){for(int i =0; i < rows; i++){free(matrix[i]);}free(matrix);}intmain(){int rows, columns;int** matrix =readMatrixFromFile("matrix.txt",&rows,&columns);if(matrix ==NULL){return0;}calculateColumnProduct(matrix, rows, columns);int smallestProductColumn =findColumnWithSmallestProduct(matrix, rows, columns);printf("Cột có tích các phần tử nhỏ nhất: %d\n", smallestProductColumn +1);freeMatrix(matrix, rows);return0;}