Programma C per moltiplicare due matrici usando i puntatori

Programma C per moltiplicare due matrici usando i puntatori

Scrivi un programma C per moltiplicare due matrici usando i puntatori. Come inserire e moltiplicare due matrici usando il puntatore nella programmazione C. Logica per moltiplicare due matrici usando il puntatore in C.

Esempio

Inserimento

Input elements of matrix1:
10 20 30
40 50 60
70 80 90
Input elements of matrix2:
1 2 3
4 5 6
7 8 9

Uscita

Product of matrices is :
300 360 420
660 810 960
1020 1260 1500

Conoscenze richieste

Funzioni, Array, Puntatori, Puntatore e Array

Come si moltiplicano due matrici?

La moltiplicazione di due matrici è definita solo se le colonne della prima matrice sono uguali alle righe della seconda matrice. La moltiplicazione di due matrici è definita da

Come moltiplicare due matrici usando i puntatori?

Nei post precedenti abbiamo imparato ad accedere a un array multidimensionale usando il puntatore. Qui in questo post continueremo ulteriormente il nostro apprendimento e impareremo a moltiplicare due matrici usando i puntatori.

La logica di questo programma non sarà diversa dal programma per moltiplicare due matrici usando la notazione array. In questo post spiegherò come convertire la notazione di matrice della moltiplicazione di matrice in notazione di puntatore. Ciò ti aiuterà a migliorare la tua conoscenza del puntatore.

Nella notazione di matrice per moltiplicare due matrici utilizziamo sum += A[row][i] * B[i][col]; che nella notazione del puntatore equivale a sum += (*(*(A + row) + i)) * (*(*(B + i) + col));

Programma per moltiplicare due matrici usando i puntatori?

/**
 * C program to multiply two matrix using pointers
 */

#include <stdio.h>

#define ROW 3
#define COL 3


/* Function declarations */
void matrixInput(int mat[][COL]);
void matrixPrint(int mat[][COL]);
void matrixMultiply(int mat1[][COL], int mat2[][COL], int res[][COL]);



int main()
{
    int mat1[ROW][COL];
    int mat2[ROW][COL];
    int product[ROW][COL];


    /*
     * Input elements in matrices.
     */
    printf("Enter elements in first matrix of size %dx%d\n", ROW, COL);
    matrixInput(mat1);

    printf("Enter elements in second matrix of size %dx%d\n", ROW, COL);
    matrixInput(mat2);


    // Call function to multiply both matrices
    matrixMultiply(mat1, mat2, product);


    // Print product of both matrix
    printf("Product of both matrices is : \n");
    matrixPrint(product);

    return 0;
}



/**
 * Function to input elements in matrix from user.
 *
 * @mat     Two-dimensional array to store user input.
 */
void matrixInput(int mat[][COL])
{
    int row, col;

    for (row = 0; row < ROW; row++)
    {
        for (col = 0; col < COL; col++)
        {
            scanf("%d", (*(mat + row) + col));
        }
    }
}




/**
 * Function to print elements in a two-dimensional array.
 *
 * @mat     Two-dimensional array to print.
 */
void matrixPrint(int mat[][COL])
{
    int row, col;

    for (row = 0; row < ROW; row++)
    {
        for (col = 0; col < COL; col++)
        {
            printf("%d ", *(*(mat + row) + col));
        }

        printf("\n");
    }
}




/**
 * Function to multiply two matrices.
 *
 * @mat1    First matrix
 * @mat2    Second matrix
 * @res     Resultant matrix to store product of both matrices.
 */
void matrixMultiply(int mat1[][COL], int mat2[][COL], int res[][COL])
{
    int row, col, i;
    int sum;


    for (row = 0; row < ROW; row++)
    {
        for (col = 0; col < COL; col++)
        {
            sum = 0;

            /*
             * Find sum of product of each elements of 
             * rows of first matrix and columns of second 
             * matrix.
             */
            for (i = 0; i < COL; i++)
            {
                sum += (*(*(mat1 + row) + i)) * (*(*(mat2 + i) + col));
            }


            /* 
             * Store sum of product of row of first matrix 
             * and column of second matrix to resultant matrix.
             */
            *(*(res + row) + col) = sum;
        }
    }
}

Uscita

Enter elements in first matrix of size 3x3
10 20 30
40 50 60
70 80 90
Enter elements in second matrix of size 3x3
1 2 3
4 5 6
7 8 9
Product of both matrices is :
300 360 420
660 810 960
1020 1260 1500

Post consigliati

  • Programma C per copiare un array in un altro usando i puntatori.
  • Programma C per scambiare due array usando il puntatore.
  • Programma C per invertire un array usando i puntatori.
  • Programma C per cercare un elemento nell'array usando i puntatori.
  • Programma C per ordinare l'array usando i puntatori.
  • Programma C per aggiungere due matrici usando i puntatori.