ГАВАЛЯН 515-і lab5_3

Run Settings
LanguageC
Language Version
Run Command
/* * @file lab5_3.cpp * @author Гавалян Д.Є, гр. 515i * @date 8 травня 2025 * @brief Лабораторна робота № 5, варіант 19 * * Застосування вказiвникiв. Завдання 3 */ #include <stdio.h> #include <locale.h> #include <stdlib.h> #include <time.h> #include "module.h" int main() { setlocale(LC_ALL, "Ukr"); srand((unsigned int)time(NULL)); int matrix[SIZE][SIZE]; int choice; // Запит користувача про спосіб заповнення матриці printf("Виберiть спосiб заповнення матрицi:\n"); printf("1 - введення з клавiатури\n"); printf("2 - автоматичне заповнення (rand)\n"); printf("Ваш вибiр: "); scanf("%d", &choice); // Використовую switch для обробки вибору користувача switch (choice) { case 1: // Ручне введення елементiв матрицi printf("Введiть елементи матрицi розмiром %dx%d:\n", SIZE, SIZE); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { printf("Елемент [%d][%d]: ", i, j); scanf("%d", &matrix[i][j]); } } break; case 2: // Автоматичне заповнення матрицi випадковими числами for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { matrix[i][j] = MIN_RAND + rand() % (MAX_RAND - MIN_RAND + 1); } } printf("Матриця заповнена випадковими числами.\n"); break; default: // Якщо користувач ввiв невiрне значення printf("Невiрний вибiр: Такої функцiї не iснує!\n"); return 1; } // Виводимо початкову матрицю на екран printf("\nПочаткова матриця:\n"); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { printf("%4d ", matrix[i][j]); } printf("\n"); } // Запит на кількість позицій для зсуву int k; printf("\nВведiть кiлькiсть позицiй для зсуву: "); scanf("%d", &k); // Викликаємо функцію зсуву matrix_shift_bottom(&matrix[0][0], SIZE, k); // Виводимо змінену матрицю на екран printf("\nМатриця пiсля зсуву на %d позицiй вниз:\n", k); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { printf("%4d ", matrix[i][j]); } printf("\n"); } return 0; }
#include "module.h" // Функція для циклічного зсуву стовпців матриці вниз на k позицій void matrix_shift_bottom(int* mat, int n, int k) { // Якщо k більше за розмір матриці, беремо модуль k = k % n; if (k == 0) return; // Якщо зсув на 0, нічого не робимо // Використовуємо статичний масив максимального розміру int temp[SIZE]; // SIZE визначено в module.h як 4 // Обробляємо кожен стовпець окремо for (int col = 0; col < n; col++) { // Копіюємо елементи стовпця у тимчасовий масив for (int i = 0; i < n; i++) { temp[i] = mat[i * n + col]; } // Виконуємо зсув for (int i = 0; i < n; i++) { int new_pos = (i + k) % n; mat[i * n + col] = temp[new_pos]; } } }
#ifndef MODULE_H #define MODULE_H #include <stdio.h> #include <stdlib.h> // Розмір квадратної матриці 4x4 #define SIZE 4 // Мінімальне значення для rand() #define MIN_RAND -20 // Максимальне значення для rand() #define MAX_RAND 20 /** * @brief Циклічно зсуває елементи стовпців матриці вниз на k позицій * @param mat Вказівник на початок матриці (як одномірного масиву) * @param n Розмір квадратної матриці (n x n) * @param k Кількість позицій для зсуву (додатнє значення - вниз) * @details Функція виконує циклічний зсув елементів кожного стовпця матриці. * * @note Функція модифікує вхідну матрицю без повернення нового масиву. * Якщо k більше за розмір матриці, використовується k % n. */ void matrix_shift_bottom(int* mat, int n, int k); #endif
Editor Settings
Theme
Key bindings
Full width
Lines