Thứ Năm, 8 tháng 3, 2012


#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