/**
* @file TP.cpp
* @autor Батуріна В. А. 515б
* @date 21.05.2023
* @brief Лабораторна робота №5, варіант 19
*
* Застосування вказівників. Завдання 3
*/
#include <stdio.h>
#include <locale.h>
#include "head.h"
int main(int argc, char* argv[]) {
//підключення підтримки мови
setlocale(LC_ALL, "ukr");
//створення змінних
int f = 0, n, k, mat[SIZE][SIZE] = {0};
//інформація про программу
printf("\tЦя програма зсуває елементи стовпців.\n");
printf("\t\tМатриця буде заповнена починаючи з 1...\n");
//заклик на введення та вадення даних
printf("\n\t\tВведіть розмір масиву від 2 до 25: ");
scanf("%i", &n);
//перевірка на коректність введених данних
if (!(n < 2 || n > 25)) {
for (size_t j = 0; j < n; j++)
for (size_t i = 0; i < n; i++)
mat[j][i] = ++f;
//заклик та введення розміру зсуву
printf("Вкажіть розмір зсуву: ");
scanf("%i", &k);
matrix_shift_bottom(&mat[0][0], n, k);
}
else {
return ERRORTYPE;
}
return 0;
}
#define ERRORTYPE -1
#define SIZE 25
/**
* Заміна цифр від 1-9 на римські цифри від I-IX
*
* @param mat - матриця
* @param n - розмір матриці
* @param k - розмір зміщення
* @return void
*/
void matrix_shift_bottom(int* mat, int n, int k);
#include <stdio.h>
#include "head.h"
void matrix_shift_bottom(int* mat, int n, int k) {
//допоміжний масив
int temp[SIZE][SIZE] = {0};
//виведення матриці
printf("Ваша матриця:\n");
for (size_t j = 0; j < n; j++) {
for (size_t i = 0; i < n; i++) {
printf("\t%i", *(mat + i + (j * SIZE)));
}
printf("\n");
}
//цикл на зсув
while (k != 0) {
for (size_t j = 0; j < n; j++) {
for (size_t i = 0; i < n; i++) {
if (j + 1 == n) {
temp[j][i] = *(mat + i);
}
else
temp[j][i] = *(mat + i + ((j + 1) * SIZE));
}
}
for (size_t j = 0; j < n; j++)
for (size_t i = 0; i < n; i++)
*(mat + i + (j * SIZE)) = temp[j][i];
k--;
}
//цикл на виведення змыненої матриці
printf("\nВаша матриця після зміни:\n");
for (size_t j = 0; j < n; j++) {
for (size_t i = 0; i < n; i++) {
printf("\t%i", *(mat + i + (j * SIZE)));
}
printf("\n");
}
}