Page 32, Exercise 6: Product

a. Counts

void prod(int a[][MAX_SIZE], int b[][MAX_SIZE], int c[][MAX_SIZE],	int rowsA, int colsB, int colsA)
{
   int i, j,k;
  int count = 0;
   for (i = 0; i < rowsA; i++) {
	count ++; /*for i loop */
     for (j = 0; j < colsB; j++) {
	      c[i][j] = 0; count++; /* for assignment */
		  count++; /*for j loop */
	      for (k = 0; k < colsA; k++) {
			  count++; /* for k loop*/
	          c[i][j] += (a[i][k] * b[k][j]); count++; /*for assignment */
		   }
		   count++; /*last time of k */
      }
	count++; /* last time of j */
 }
 count++; /* last time of i */
  printf("Prod Count: %d\n", count);
}

b. Simplified Counts

void prod(int a[][MAX_SIZE], int b[][MAX_SIZE], 
int c[][MAX_SIZE], int rowsA, int colsB, int colsA)
{
  int i, j,k;
  int count = 0;
   for (i = 0; i < rowsA; i++) {
     for (j = 0; j < colsB; j++) {
	      c[i][j] = 0; count++; 
		  count+=3;  /* includes last time of k loop */
	      for (k = 0; k < colsA; k++) {
	          c[i][j] += (a[i][k] * b[k][j]); 
			  count+=2; 
		   }
      }
	count+=2;  /* for i loop and last time of j loop */
 }
 count++; /* last time of i */
  printf("Prod Count: %d\n", count);
}

c. Final Count for 5x5 matrix

void prod(int a[][MAX_SIZE], int b[][MAX_SIZE], int c[][MAX_SIZE],
	  int rowsA, int colsB, int colsA)
{
   int i, j,k;
   for (i = 0; i < rowsA; i++)
     for (j = 0; j < colsB; j++) {
	c[i][j] = 0;
	for (k = 0; k < colsA; k++)
	   c[i][j] += (a[i][k] * b[k][j]);
      }
}

d. Step Count Table : 336

Step Count Table
Statement s/e f (A = rows A, B = rowsB) Total Steps
void prod(int a[][MAX_SIZE], int b[][MAX_SIZE], 
int c[][MAX_SIZE], int rowsA, int colsB, int colsA)
{
   int i, j,k;
   for (i = 0; i < rowsA; i++)
     for (j = 0; j < colsB; j++) 
     {
	     c[i][j] = 0;
	     for (k = 0; k < colsA; k++)
	        c[i][j] += (a[i][k] * b[k][j]);
    }
}
0
0
0
0
1
1
0
1
1
1
0
0
1
1
1
1
A+1
A•B+ B+1
A•B

A•B

A•B•A + A•B+ A+1
A•B•A + A•B+ A
A•B
A
0
0
0
0
A+1
A•B+ B+1
0

A•B

A•B•A + A•B+ A+1
A•B•A + A•B+ A
0
0
Total : 2A•B•A + 3A•B + 2A + B + 3