#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
/* Cac chuong trinh con */
/*1. Nhap ma tran */
void InputMatrix(float *A, int M, int N, char Symbol)
{
int i, j;
float temp ;
for (i = 0; i < M; ++i)
for (j = 0; j < N; ++j)
{
printf("\n%c%d%d = ", Symbol, i + 1, j + 1);
scanf("%f",temp);
*(A+i*N+j)=temp ;
}
}
/*-------------------------------------------------------------------------*/
/*2. Hien thi ma tran */
void DisplayMatrix(float *A, int M, int N)
{
int i, j;
for (i = 0; i < M; ++i)
{
for (j = 0; j < N; ++j)
printf(" %p %f ",A+i*N+j ,*(A+i*N+j) );
printf("\n");
}
}
/*-------------------------------------------------------------------------*/
/*3. Tich 2 ma tran */
void MultiMatrix(float *A,float *B, float *C, int M, int N, int P)
{
int i, j, k;
*(C+i*N+j)=0;
for (i = 0; i < M; ++i)
for (j = 0; j < P; ++j)
{
//int temp=0;
for (k = 0; k < N; ++k)
*(C+i*N+j) +=*(A+i*N+k)*(*(B+k*N+j));
}
}
/*-------------------------------------------------------------------------*/
/* 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 */
float *AllocMatrix(int M, int N)
{
int i; float *A;
A = (float *) malloc(M *N* sizeof(float ));
if (A == NULL) return NULL;
/*for (i = 0; i < M; ++i)
{
*(A+i) = (float *) malloc(N * sizeof(float));
if (*(A+i) == NULL) return NULL;
}*/
return A;
}
/*-------------------------------------------------------------------------*/
/*5. Giai phong vung nho */
void FreeMatrix(float *A, int M)
{
int i;
if (A != NULL) free(A);
//for (i = 0; i < M; ++i)
//if (*(A+i*M) != NULL) free(*(A+i*M));
}
/*-------------------------------------------------------------------------*/
/*6. Chuong trinh chinh */
int main()
{
int M, N, P; float *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(N, P);
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"); InputMatrix((float*)A, M, N, 'A');
printf("\nNhap ma tran B:\n"); InputMatrix((float*)B, N, P, 'B');
MultiMatrix((float*)A,(float*) B,(float*) C, M, N, P);
printf("\n Ma tran A cap %d x %d:\n\n", M, N); DisplayMatrix((float*)A, M, N);
printf("\n Ma tran B cap %d x %d:\n\n", N, P); DisplayMatrix((float*)B, N, P);
printf("\n Ma tran C = A * B cap %d x %d:\n\n", M, P);
DisplayMatrix((float*)C, M, P);
/*-------------------------------------------------------------------------*/
/*6.4 Giai phong vung nho cho 3 ma tran */
FreeMatrix((float*)A, M);
FreeMatrix((float*)B, N);
FreeMatrix((float*)C, P);
getch();
return 0;
}
Không có nhận xét nào:
Đăng nhận xét