/* hw5p1b.c */

#include <stdio.h>
#include "simpio.h"

# define MAXSIZE 100

int DotProduct (int A[], int B[], int n);
void MatrixMult (int A[][], int B[][], int n);

void main()
{
  int n, i, j;
  int A[MAXSIZE][MAXSIZE], B[MAXSIZE][MAXSIZE];
  printf("enter an integer n: ");
  n = GetInteger();
  /* get input matrices */
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++) {
      printf("enter A[%d][%d] of matrix A: ", i, j);
      A[i][j] = GetInteger();
    }
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++) {
      printf("enter B[%d][%d] of matrix B: ", i, j);
      B[i][j] = GetInteger();
    }
  MatrixMult(A, B, n);
}

int DotProduct (int A[], int B[], int n)
{
  int i, tmp = 0;
  for (i = 0; i < n; i++)
    tmp += A[i] * B[i];
  return tmp;
}

void MatrixMult (int A[][MAXSIZE], int B[][MAXSIZE], int n)
{
  int row, col, i;
  int rowA[MAXSIZE];
  int colB[MAXSIZE];
  for (row = 0; row < n; row++) {   /* iterate over each row */
    printf("\n");                   /* newline for each new row */
    for (i = 0; i < n; i++)         /* copy row i of A into a tmp array */
      rowA[i] = A[row][i];
    for (col = 0; col < n; col++) { /* iterate over each column in each row */
      for (i = 0; i < n; i++)       /* copy column j of B into a tmp array */
	colB[i] = B[i][col];
      printf("%d ", DotProduct(rowA, colB, n));
    }
  }
}
