Skip to content

Instantly share code, notes, and snippets.

@tatarsky-v
Last active September 26, 2018 16:35
Show Gist options
  • Save tatarsky-v/73eb00215f003eba8d1e74fceba184bd to your computer and use it in GitHub Desktop.
Save tatarsky-v/73eb00215f003eba8d1e74fceba184bd to your computer and use it in GitHub Desktop.
#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