The below program does the following:
- Creates a 2D matrix whose size can be input through Command Line arguments.
- Prints the 2D Matrix.
- Rotates the matrix by right angle (90 degrees) clockwise.
Source Code:
#include<stdio.h> #include<stdlib.h> #define DEFN 6 int** CreateMatrix(int**, int N); void PrintMatrix(int**, int N); int** RotateMatrix(int**,int N); int main(int argc, char *argv[]) { int **matrix = NULL; int N; if(argc==2) N = atoi(argv[1]); else N = DEFN; matrix = CreateMatrix(matrix, N); printf("\nInitialMatrix:\n"); PrintMatrix(matrix,N); printf("\n"); matrix = RotateMatrix(matrix,N); printf("\nRotated Matrix:\n"); PrintMatrix(matrix,N); char c = getchar(); return(0); } int** CreateMatrix(int **matrix, int N) { int i,j; matrix = (int**) calloc(N,sizeof(int*)); for(i=0; i<N; i++) { *(matrix+i) = (int*) calloc(N, sizeof(int)); for(j=0; j<N; j++) *(*(matrix+i)+j) = rand(); } return(matrix); } void PrintMatrix(int **matrix, int N) { int i,j; for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%6d ", *(*(matrix+i)+j)); printf("\n"); } } int** RotateMatrix(int **matrix, int N) { int i,temp,layer; for(layer=0; layer<(N/2); layer++) for(i=layer; i<N-layer-1; i++) { temp = *(*(matrix+N-i-1)+layer); *(*(matrix+N-i-1)+layer) = *(*(matrix+N-layer-1)+N-i-1); *(*(matrix+N-layer-1)+N-i-1) = *(*(matrix+i)+N-layer-1); *(*(matrix+i)+N-layer-1) = *(*(matrix+layer)+i); *(*(matrix+layer)+i) = temp; } return(matrix); }
OUTPUT:
InitialMatrix: 41 18467 6334 26500 19169 15724 11478 29358 26962 24464 5705 28145 23281 16827 9961 491 2995 11942 4827 5436 32391 14604 3902 153 292 12382 17421 18716 19718 19895 5447 21726 14771 11538 1869 19912 Rotated Matrix: 5447 292 4827 23281 11478 41 21726 12382 5436 16827 29358 18467 14771 17421 32391 9961 26962 6334 11538 18716 14604 491 24464 26500 1869 19718 3902 2995 5705 19169 19912 19895 153 11942 28145 15724