#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;
}