#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void InputMatrix(int **A, int M, int N, char Symbol)
{
int i, j ;
for (i = 0; i < M; ++i)
for (j = 0; j < N; ++j)
{
printf("\n%c%d%d = ", Symbol, i + 1, j + 1);
scanf("%d", &A[i][j]);
}
}
/*-------------------------------------------------------------------------*/
/*2. Hien thi ma tran */
void DisplayMatrix(int **A, int M, int N)
{
int i, j;
for (i = 0; i < M; ++i)
{
for (j = 0; j < N; ++j)
printf(" %p %d ", &A[i][j], A[i][j]);
printf("\n");
}
}
/*-------------------------------------------------------------------------*/
/*3. Tich 2 ma tran */
void MultiMatrix(int **A, int **B, int **C, int M, int N, int P)
{
int i, j, k;
// int temp = 0 -> để ở đây .
for (i = 0; i < M; ++i)
for (j = 0; j < P; ++j)
{
int temp=0; // lệnh này cần để ngoài vòng lặp, tránh cho
mỗi vòng lặp lại phải gán temp = 0 -> bất kỳ thao tác nào không bị
vòng lặp ảnh hưởng thì để ra ngoài vòng lặp .
mỗi vòng lặp lại phải gán temp = 0 -> bất kỳ thao tác nào không bị
vòng lặp ảnh hưởng thì để ra ngoài vòng lặp .
for (k = 0; k < N; ++k)
temp += A[i][k] * B[k][j];
C[i][j] = temp;
}
}
/*-------------------------------------------------------------------------*/
/* Cap phat vung nho cho ma tran C1 int AllocMatrix(int ***A, int M, int N){
int i;
*A = (int **) malloc(M * sizeof(int *));
if (*A == NULL) return 0;
for (i = 0; i < M; ++i){
(*A)[i] = (int *) malloc(N * sizeof(int));
if ((*A)[i] == NULL) return 0;
}
return 1;
}
*/
/*-------------------------------------------------------------------------*/
/*4. Cap phat vung nho cho ma tran C2 */
int **AllocMatrix(int M, int N)
{
int i, **A;
A = (int **) malloc(M * sizeof(int *));
if (A == NULL) return NULL;
for (i = 0; i < M; ++i)
{
A[i] = (int *) malloc(N * sizeof(int));
if (A[i] == NULL) return NULL;
}
return A;
}
/*-------------------------------------------------------------------------*/
/*5. Giai phong vung nho */
void FreeMatrix(int **A, int M)
{
int i;
if (A != NULL) free(A);
for (i = 0; i < M; ++i)
if (A[i] != NULL) free(A[i]);
}
/*-------------------------------------------------------------------------*/
/*6. Chuong trinh chinh */
int main()
{
int M, N, P, **A = NULL, **B = NULL, **C = NULL;
printf("So hang ma tran A: M = ");
scanf("%d", &M);
printf("\nSo cot ma tran A (bang so hang ma tran B): N = ");
scanf("%d", &N);
printf("\nSo cot ma tran B: P = ");
scanf("%d", &P);
/*-------------------------------------------------------------------------*/
/*6.1 Cap phat vung nho cho ma tran A */
A = AllocMatrix(M, N);
if (!A)
{
printf("Khong con du bo nho!\n");
FreeMatrix(A, M);
return 1;
}
/*-------------------------------------------------------------------------*/
/*6.2 Cap phat vung nho cho ma tran B */
B = AllocMatrix(M, N);
if (!B)
{
printf("Khong con du bo nho!\n");
FreeMatrix(B, N);
return 1;
}
/*-------------------------------------------------------------------------*/
/*6.3 Cap phat vung nho cho ma tran C */
C = AllocMatrix(M, N);
if (!C){
printf("Khong con du bo nho!\n");
FreeMatrix(A, M);
FreeMatrix(B, N);
return 1;
}
printf("\nNhap ma tran A:\n");
printf("\nNhap ma tran B:\n");
MultiMatrix(A, B, C, M, N, P);
printf("\n Ma tran A cap %d x %d:\n\n", M, N);
DisplayMatrix(A, M, N);
printf("\n Ma tran B cap %d x %d:\n\n", N, P);
DisplayMatrix(B, N, P);
printf("\n Ma tran C = A * B cap %d x %d:\n\n", M, P);
DisplayMatrix(C, M, P);
/*-------------------------------------------------------------------------*/
/*6.4 Giai phong vung nho cho 3 ma tran */
FreeMatrix(A, M);
FreeMatrix(B, N);
FreeMatrix(C, P);
getch();
return 0;
}
Không có nhận xét nào:
Đăng nhận xét