Quick actions

cmd+k|ctrl+k

Navigation

Languages

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

Snippet info

Language

C

Visibility

public

Author

liestayalive

Created

2024-05-27T02:59:33.799968Z

Updated

2024-05-27T02:59:33.799968Z

/**
* @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;
}
INFO