Advanced C Programming Spring 2004 Excercise 4 (Fully dynamic 2-dimensional arrays) Now we want to write a matrix calculation program, where we can during run time freely select the number of rows and number of columns. The program first reads the dimensions of the input matrix (number of rows and number of columns) from the keyboard, then it allocates space for that matrix and after that reads matrix elements from the keyboard. When this is done, the program allocates space for the transposed matrix (now the number of rows and the number of columns is changed) and then calls the function transpose which makes the transposed matrix. Finally the program displays the both matrices. You have to use functions in the program and pass these matrices as parameters. The functions you have to write are allocate_matrix, read_matrix, transpose_matrix, print_matrix. Because both dimensions are determined during runtime, our matrix manipulation functions need to be independent of both dimensions. We only pass the number of rows and number of columns as parameters for these functions. You should test your program with matrices of different sizes. See one simple test material below. Remark 1. It is still required that you have to refer to the items in an array using natural index notation array[i][j], where i is row number and j is column number. Example of the program output: Dimensions for input matrix : Number of rows 2, number of columns 3 Entered matrix : 1 2 3 4 5 6 Output : Original matrix is 1 2 3 4 5 6 Transposed matrix is 1 4 2 5 3 6