30/09/2018, 16:28

Bài tập về tích 2 ma trận

em đang học về con trỏ và em nhập được vào 2 ma trận A và B nhưng ma trận tích thì nó không in ra mong anh chị giúp

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

void nhap(int **a,int m,int n)
{
    int i,j;
    int tam;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("a[%d][%d]",i,j);
            scanf("%d",&tam);
            a[i][j]=tam;
        }
    }
}

void in(int **a,int m,int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)printf("%2d",a[i][j]);
        printf("
");
    }
}

int main()
{
    int **a,**b,**c;
    int m,n,p;
    int i,j,k;
    do
    {
        printf("nhap vao so hang cua ma tran a");
        scanf("%d",&m);
        printf("nhap vao so cot cua ma tran a");
        scanf("%d",&n);
    }
    while(m<=0 || n<=0);
    a=(int **)malloc(m*sizeof(int *));
    for(i=0;i<n;i++)a[i]=(int *)malloc(n*sizeof(int));
    nhap(a,m,n);
    printf("ma tran A da nhap vao
");
    in(a,m,n);
    do
    {
        printf("nhap vao so hang cua mtran b");
        scanf("%d",&n);
        printf("nhap vao so cot cua mtran b");
        scanf("%d",&p);
    }
    while(n<=0 || p<=0);
    b=(int **)malloc(n*sizeof(int *));
    for(j=0;j<p;j++)b[j]=(int *)malloc(p*sizeof(int));
    nhap(b,n,p);
    printf("ma tran B da nhap vao
");
    in(b,n,p);
    c=(int **)malloc(m*sizeof(int *));
    for(i=0;i<p;i++)c[i]=(int *)malloc(p*sizeof(int));
    printf("tich 2 ma tran la
");
    for(i=0;i<m;i++)
    {
        for(j=0;j<p;j++)
        {
          c[i][j]=0;
          for(k=0;k<n;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
            }
        }
        printf("%2d",c[i][j]);
    }
    //printf("ma tran tich la
");
   /* for(i=0;i<m;i++)
    {
        for(j=0;j<p;j++) printf("%2d",c[i][j]);
        printf("
");
    }*/
    free(a);
    for(i=0;i<n;i++)free(a[i]);
    free(b);
    for(j=0;j<p;j++)free(b[j]);
    free(c);
    for(i=0;i<p;i++)free(c[i]);
}

Link: http://codepad.org/1aRvUHm3

Trí Hải Dương viết 18:31 ngày 30/09/2018

em lam vay ma nhung n khong ra.mong a giup

Le Dong Thuc viết 18:29 ngày 30/09/2018

Sáng nay dạo ngang mục này, thấy hay hay nên cũng xin đóng góp vài đoạn code C.
Note: mình build trên gcc nhé

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

#define COUNT(x)  (sizeof(x) / sizeof(x[0]))

void initMatrixValues(int numberOfColumns, int numberOfRows, int*** returnValues) {
    int** initedMatrix = (int**) malloc(numberOfRows * sizeof(int*));

    int columnIndex, rowIndex;
    for(rowIndex = 0; rowIndex < numberOfRows; rowIndex++) {
       initedMatrix[rowIndex] = (int*) malloc(numberOfColumns * sizeof(int));
       for(columnIndex = 0; columnIndex < numberOfColumns; columnIndex++) {
           initedMatrix[rowIndex][columnIndex] = 0;
       }
    }

    *returnValues = initedMatrix;
}

void getMatrixValuesFromUser(int numberOfColumns, int numberOfRows, int*** returnValue)
{
    int** inputedValues;
    initMatrixValues(numberOfColumns, numberOfRows, &inputedValues);
    int userInputedValue;
    int columnIndex,rowIndex;

    for(rowIndex = 0; rowIndex < numberOfRows; rowIndex++)
    {
        for(columnIndex = 0; columnIndex < numberOfColumns; columnIndex++)
        {
            printf("matrix[%d][%d] = ", rowIndex, columnIndex);
            scanf("%d", &userInputedValue);
            inputedValues[rowIndex][columnIndex] = userInputedValue;
        }
    }

    *returnValue = inputedValues;
}

void calculateMultipleMatrixes(int*** returnMatrix, int numberOfRows, int numberOfColumns, int **matrixValues1, int numberOfRows1, int numberOfColumns1, int **matrixValues2, int numberOfRows2, int numberOfColumns2) {
    int** calculateMatrix = (int**) malloc(numberOfRows * sizeof(int*));
    int columnIndex, rowIndex;

    for(rowIndex = 0; rowIndex < numberOfRows; rowIndex++)
    {
        calculateMatrix[rowIndex] = (int*) malloc(numberOfColumns * sizeof(int));
        for(columnIndex = 0; columnIndex < numberOfColumns; columnIndex++)
        {
            int matrix1ColumnIndex;
            int matrixCellValue = 0;
            for(matrix1ColumnIndex = 0; matrix1ColumnIndex < numberOfColumns1; matrix1ColumnIndex++) {
                matrixCellValue  += matrixValues1[rowIndex][matrix1ColumnIndex] * matrixValues2[matrix1ColumnIndex][columnIndex];
        }
        calculateMatrix[rowIndex][columnIndex] = matrixCellValue;
        }
    }

    *returnMatrix = calculateMatrix;
}

void printMatrixValues(int **matrixValues, int numberOfRows, int numberOfColumns)
{
    printf("The matrix has values: \n");

    int columnIndex, rowIndex;
    for(rowIndex = 0; rowIndex < numberOfRows; rowIndex++)
    {
        for(columnIndex = 0; columnIndex < numberOfColumns; columnIndex++)
        {
            printf("%5d", matrixValues[rowIndex][columnIndex]);
        }

    printf("\n");
    }
    printf("\n");
}

int main()
{
    int **matrixValues1, **matrixValues2, **matrixValuesResult;
    int numberOfRows1, numberOfColumns1, numberOfRows2, numberOfColumns2;

    // Process Matrix Value 1
    do
    {
        printf("Please input number of rows of Matrix 1: ");
        scanf("%d",&numberOfRows1);
        printf("Please input number of columns of Matrix 1: ");
        scanf("%d",&numberOfColumns1);
    }
    while(numberOfRows1 <= 0 || numberOfColumns1 <= 0);

    getMatrixValuesFromUser(numberOfColumns1, numberOfRows1, &matrixValues1);
    printMatrixValues(matrixValues1, numberOfRows1, numberOfColumns1);

    // Process Matrix Value 2
    do
    {
        numberOfRows2 = numberOfColumns1;
        printf("Please input number of columns of Matrix 2: ");
        scanf("%d",&numberOfColumns2);
    }
    while(numberOfRows2 <= 0 || numberOfColumns2 <= 0);

    getMatrixValuesFromUser(numberOfColumns2, numberOfRows2, &matrixValues2);
    printMatrixValues(matrixValues2, numberOfRows2, numberOfColumns2);

    // Calculate multiple result
    int numberOfRowsResult = numberOfRows1;
    int numberOfColumnsResult = numberOfColumns2;

    calculateMultipleMatrixes(&matrixValuesResult, numberOfRowsResult, numberOfColumnsResult, matrixValues1, numberOfRows1, numberOfColumns1, matrixValues2, numberOfRows2, numberOfColumns2);
    printf("\n\n*********************\nMatrix1 x Matrix2:\n");
    printMatrixValues(matrixValuesResult, numberOfRowsResult, numberOfColumnsResult);
    return 0;
}
Bài liên quan
0