How to print elements of matrix in circular fashion or rounded snake method for both rectangular and square matrix.
Did it in static way for easy understanding.
void round_print(int matrix[6][5], int l,int m) {
int i,j,n;
if(l>m)
n=l;
else
n=m; //to find biggest of column and row
for (int layer = 0; layer < n / 2; ++layer) { //For printing in layers
int first = layer;
int last_c = m - 1 - layer; //last column
int last_r = l - 1 - layer; //last row
for(i = first,j=first; j < last_c; ++j) { //Printing top row
printf("%d ",matrix[i][j]);
}
for(i = first,j=last_c; i < last_r; ++i) { //right column
printf("%d ",matrix[i][j]);
}
for(i = last_r,j=last_c; j > first; --j) { //bottom row
printf("%d ",matrix[i][j]);
}
for(i = last_r,j=first; i > first; --i) { //left column
printf("%d ",matrix[i][j]);
}
}
if(n%2) // For odd number middle element will be missed
printf("%d",matrix[n/2][n/2]);
}
int main(){
int matrix[6][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25},{26,27,18,19,30}};
for(int i=0;i<6;i++){
for(int j=0;j<5;j++)
printf("%3d ",matrix[i][j]);
printf("\n");
}
round_print(matrix,6,5);
return 0;
}
Did it in static way for easy understanding.
void round_print(int matrix[6][5], int l,int m) {
int i,j,n;
if(l>m)
n=l;
else
n=m; //to find biggest of column and row
for (int layer = 0; layer < n / 2; ++layer) { //For printing in layers
int first = layer;
int last_c = m - 1 - layer; //last column
int last_r = l - 1 - layer; //last row
for(i = first,j=first; j < last_c; ++j) { //Printing top row
printf("%d ",matrix[i][j]);
}
for(i = first,j=last_c; i < last_r; ++i) { //right column
printf("%d ",matrix[i][j]);
}
for(i = last_r,j=last_c; j > first; --j) { //bottom row
printf("%d ",matrix[i][j]);
}
for(i = last_r,j=first; i > first; --i) { //left column
printf("%d ",matrix[i][j]);
}
}
if(n%2) // For odd number middle element will be missed
printf("%d",matrix[n/2][n/2]);
}
int main(){
int matrix[6][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25},{26,27,18,19,30}};
for(int i=0;i<6;i++){
for(int j=0;j<5;j++)
printf("%3d ",matrix[i][j]);
printf("\n");
}
round_print(matrix,6,5);
return 0;
}
No comments:
Post a Comment