Quick actions

cmd+k|ctrl+k

Navigation

Languages

lab3 task3

Snippet info

Language

C

Visibility

public

Author

t.m.kozynets

Created

2025-05-06T22:55:51.853728Z

Updated

2025-05-06T22:55:51.853728Z

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 6
#define RAND_LOWER -100.0
#define RAND_UPPER 0.0

// Функція генерації випадкового числа в межах RAND_LOWER...RAND_UPPER
float згенеруватиЧисло() {
    return ((float)rand() / (float)RAND_MAX) * (RAND_UPPER - RAND_LOWER) + RAND_LOWER;
}

// Введення матриці з клавіатури з перевіркою правильності та меж діапазону
void ввестиМатрицю(float матриця[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            float значення;
            int коректно;
            do {
                printf("Елемент [%d][%d] (в межах %.1f до %.1f): ", i, j, RAND_LOWER, RAND_UPPER);
                коректно = scanf("%f", &значення);
                if (!коректно) {
                    printf("❌ Помилка: введено не число. Спробуйте ще раз.\n");
                    while (getchar() != '\n'); // очищення буфера
                } else if (значення < RAND_LOWER || значення > RAND_UPPER) {
                    printf("❌ Помилка: число поза межами діапазону. Введіть число в межах [%.1f; %.1f].\n", RAND_LOWER, RAND_UPPER);
                    коректно = 0;
                } else {
                    матриця[i][j] = значення;
                }
            } while (!коректно);
        }
    }
}

// Заповнення матриці випадковими числами
void випадковаМатриця(float матриця[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; i++)
        for (int j = 0; j < SIZE; j++)
            матриця[i][j] = згенеруватиЧисло();
}

// Виведення матриці
void вивестиМатрицю(float матриця[SIZE][SIZE]) {
    printf("\nМатриця:\n");
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            printf("%8.2f ", матриця[i][j]);
        }
        printf("\n");
    }
}

// Обчислення суми елементів усередині рамки (задача 3.1)
float сумаВиділенихЕлементів(float матриця[SIZE][SIZE]) {
    float сума = 0.0;
    for (int i = 1; i < SIZE - 1; i++)
        for (int j = 1; j < SIZE - 1; j++)
            сума += матриця[i][j];
    return сума;
}

// Визначник 3x3
float визначник3x3(float m[3][3]) {
    return m[0][0]*(m[1][1]*m[2][2] - m[1][2]*m[2][1])
         - m[0][1]*(m[1][0]*m[2][2] - m[1][2]*m[2][0])
         + m[0][2]*(m[1][0]*m[2][1] - m[1][1]*m[2][0]);
}

// Отримати підматрицю 3x3 із центральної частини нижнього правого кута
float визначникПідматриці(float матриця[SIZE][SIZE]) {
    float m[3][3];
    printf("\nВиділена підматриця 3x3:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            m[i][j] = матриця[i + 2][j + 2];
            printf("%8.2f ", m[i][j]);
        }
        printf("\n");
    }
    return визначник3x3(m);
}

int main() {
    float матриця[SIZE][SIZE];
    int вибір;

    srand((unsigned)time(NULL));

    // Вибір способу введення
    printf("Оберіть спосіб заповнення матриці:\n1 — з клавіатури\n2 — випадковими числами в діапазоні [%.1f; %.1f]\nВаш вибір: ", RAND_LOWER, RAND_UPPER);
    while (scanf("%d", &вибір) != 1 || (вибір != 1 && вибір != 2)) {
        printf("❌евірний вибір. Введіть 1 або 2: ");
        while (getchar() != '\n'); // очищення буфера
    }

    if (вибір == 1) {
        ввестиМатрицю(матриця);
    } else {
        випадковаМатриця(матриця);
    }

    вивестиМатрицю(матриця);

    float сума = сумаВиділенихЕлементів(матриця);
    float детермінант = визначникПідматриці(матриця);

    printf("\nЗадача 3.1: Сума виділених елементів = %.2f\n", сума);
    printf("Задача 3.2: Визначник підматриці 3x3 = %.2f\n", детермінант);

    return 0;
}
INFO