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

Bài 8./ C : Cấp phát động nhân hai ma trận số nguyên .(Source of KARCHE NEO -- my friend ). )


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

/* Cac chuong trinh con */

/*1. Nhap ma tran */

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 . 

            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");  

    InputMatrix(A, M, N, 'A');


    printf("\nNhap ma tran B:\n"); 

    InputMatrix(B, N, P, 'B');


    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