Лабораторна 5 завдання 3

Run Settings
LanguageC
Language Version
Run Command
/** * @file laba5_3.c * @author Нездоймишпка А.О., гр. 515б * @date 27 березня 2024 * @brief Лабораторна робота № 5 * * Застосування вказівників. Завдання 3 */ #include <stdio.h> #include <stdlib.h> #include <time.h> #include <locale.h> // Функція для транспонування матриці nxn void matrix_transpose(int* mat, int n) { int temp; // Ітерація по кожному елементу над діагоналлю for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { // Поміняти місцями елемент у (i, j) елементом у (j, i) temp = *(mat + i * n + j); *(mat + i * n + j) = *(mat + j * n + i); *(mat + j * n + i) = temp; } } } // Функція для виводу матриці nxn void print_matrix(int* mat, int n) { setlocale(LC_ALL, "ukr"); printf("Матриця:\n"); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { printf("%d\t", *(mat + i * n + j)); } printf("\n"); } } // Функція для заповнення матриці nxn введеними користувачем або випадковими значеннями void fill_matrix(int* mat, int n, int option) { setlocale(LC_ALL, "ukr"); if (option == 1) { // Варіант 1: введення користувача printf("Введіть %d x %d елементів матриці:\n", n, n); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { int input; while (scanf("%d", &input) != 1 || input < 0 || input > 100) { printf("Неправильні дані! Введіть дійсне ціле число від 0 до 100: "); while (getchar() != '\n'); // Очистити вхідний буфер } *(mat + i * n + j) = input; } } } else { // Варіант 2: Випадкові значення srand(time(NULL)); // Ініціалізація випадкового початкового числа for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { *(mat + i * n + j) = rand() % 100; // Згенеруйте випадкове число від 0 до 99 } } } } int main() { setlocale(LC_ALL, "ukr"); int n; do { printf("Введіть розмір матриці (n): "); if (scanf("%d", &n) != 1 || n <= 0) { printf("Неправильні дані! Введіть додатне ціле число для розміру матриці.\n"); while (getchar() != '\n'); // Очистити вхідний буфер } } while (n <= 0); // Виділити пам'ять для матриці int* matrix = (int*)malloc(n * n * sizeof(int)); if (matrix == NULL) { printf("Помилка виділення пам'яті!\n"); return 1; } // Заповнення матриці (Варіант 1: введення користувачем або Варіант 2: Випадкове) printf("\nВиберіть спосіб заповнення матриці:\n"); printf("1. Введення користувача\n"); printf("2. Випадкові значення\n"); int option; do { if (scanf("%d", &option) != 1 || (option != 1 && option != 2)) { printf("Неправильні дані! Виберіть 1 (введення користувача) або 2 (випадкові значення): "); while (getchar() != '\n'); // Очистити вхідний буферм } } while (option != 1 && option != 2); fill_matrix(matrix, n, option); // Друк оригінальної матриці printf("\nОригінал "); print_matrix(matrix, n); // Транспонування матриці matrix_transpose(matrix, n); // Друк транспонованої матриці printf("\nПісля транспонування:\n"); print_matrix(matrix, n); // Вільна динамічно розподілена пам'ять free(matrix); return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines