Last active
September 26, 2018 16:35
-
-
Save tatarsky-v/73eb00215f003eba8d1e74fceba184bd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> | |
#define MATRIX_DIMENSION_X 4 | |
#define MATRIX_DIMENSION_Y 3 | |
#define SHIFT_RIGHT_TIMES 1 | |
#define SHIFT_DOWN_TIMES 1 | |
void fillMatrixWithRandValues(); | |
void printMatrixData(); | |
void shiftRight(int steps); | |
void shiftDown(int steps); | |
struct SuperMatrix{ int data[MATRIX_DIMENSION_X][MATRIX_DIMENSION_Y]; }; | |
SuperMatrix matrix; | |
int main() { | |
// Add pseudo random based on time | |
srand(time(0)); | |
fillMatrixWithRandValues(); | |
printf("Original matrix with side %dx%d\n", MATRIX_DIMENSION_X, MATRIX_DIMENSION_Y); | |
printMatrixData(); | |
printf("\n"); | |
shiftRight(SHIFT_RIGHT_TIMES); | |
printf("Shifted matrix to Right %d times\n", SHIFT_RIGHT_TIMES); | |
printMatrixData(); | |
printf("\n"); | |
shiftDown(SHIFT_DOWN_TIMES); | |
printf("Shifted matrix to Down %d times\n", SHIFT_DOWN_TIMES); | |
printMatrixData(); | |
printf("\n"); | |
return 0; | |
} | |
void fillMatrixWithRandValues() { | |
for(int x_iter = 0; x_iter < MATRIX_DIMENSION_X; x_iter++) { | |
for(int y_iter = 0; y_iter < MATRIX_DIMENSION_Y; y_iter++) { | |
matrix.data[x_iter][y_iter] = rand() % 20 + 1; | |
} | |
} | |
} | |
void printMatrixData() { | |
for(int x_iter = 0; x_iter < MATRIX_DIMENSION_X; x_iter++) { | |
for(int y_iter = 0; y_iter < MATRIX_DIMENSION_Y; y_iter++) { | |
printf("%6d", matrix.data[x_iter][y_iter]); | |
} | |
printf("\n"); | |
} | |
} | |
void shiftRight(int steps) { | |
int next_item; | |
if (steps < 0) return; | |
steps = steps % MATRIX_DIMENSION_Y; | |
for (int step = 0; step < steps; ++step) { | |
for(int x_iter = 0; x_iter < MATRIX_DIMENSION_X; x_iter++) { | |
int temp = matrix.data[x_iter][MATRIX_DIMENSION_Y - 1]; | |
for (int y_iter = MATRIX_DIMENSION_Y - 1; y_iter > 0; y_iter--) | |
matrix.data[x_iter][y_iter] = matrix.data[x_iter][y_iter-1]; | |
matrix.data[x_iter][0] = temp; | |
} | |
} | |
} | |
void shiftDown(int steps) { | |
int next_item; | |
if (steps < 0) return; | |
steps = steps % MATRIX_DIMENSION_X; | |
for (int step = 0; step < steps; ++step) { | |
for(int y_iter = 0; y_iter < MATRIX_DIMENSION_Y; y_iter++) { | |
int temp = matrix.data[MATRIX_DIMENSION_X - 1][y_iter]; | |
for (int x_iter = MATRIX_DIMENSION_X - 1; x_iter > 0; x_iter--) | |
matrix.data[x_iter][y_iter] = matrix.data[x_iter - 1][y_iter]; | |
matrix.data[0][y_iter] = temp; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment