/*
* @file lab3_3.cpp
* @author Гавалян Д.Є, гр. 515i
* @date 5 квітня 2025
* @brief Лабораторна робота № 3, варіант 19
*
* Використання масивів. Завдання 3
*/
#include <stdio.h>
#include <locale.h>
#include "module.h"
int main() {
setlocale(LC_ALL, "Ukr");
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р. Буде використано автоматичне заповнення.\n");
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);
}
}
break;
}
// Виводимо матрицю на екран
printf("\nМатриця:\n");
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
printf("%4d ", matrix[i][j]);
}
printf("\n");
}
// Вибір функції: сума або визначник
printf("\nВиберiть функцiю:\n");
printf("Введіть 1 (3.1) - Обчислити суму видiлених елементiв\n");
printf("Введіть 2 (3.2) - Обчислити визначник пiдматрицi 3x3\n");
printf("Ваш вибiр: ");
int funcChoice;
scanf("%d", &funcChoice);
switch (funcChoice) {
case 1: {
// Обчислити суму видiлених елементiв
int sum = sumSelectedElements(matrix);
printf("\nСума НЕ зафарбованих елементiв: %d\n", sum);
break;
}
case 2: {
// Створення пiдматрицi 3x3, яка починається з елемента [1][2]
int submatrix[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
submatrix[i][j] = matrix[i + 1][j + 2]; // Зміщення рядків і стовпців
}
}
// Виведення пiдматрицi на екран
printf("\nПiдматриця 3x3:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%4d ", submatrix[i][j]);
}
printf("\n");
}
// Обчислення визначника пiдматрицi 3x3
int det = determinant3x3(submatrix);
printf("\nВизначник пiдматрицi 3x3: %d\n", det);
break;
}
default:
printf("Невiрний вибiр функцiї.\n");
break;
}
return 0;
}
#include "module.h"
// Функція для обчислення суми НЕ зафарбованих елементів матриці
int sumSelectedElements(int matrix[SIZE][SIZE]) {
int sum = 0;
// Сума елементів першого ряду з індексами 1 до 5
for (int j = 1; j < SIZE - 1; j++) {
sum += matrix[0][j];
}
// Сума елементів другого ряду з індексами 2 до 4
for (int j = 2; j < SIZE - 2; j++) {
sum += matrix[1][j];
}
// Додаємо центральний елемент третього ряду (рядок 2, стовпець 3)
sum += matrix[2][3];
return sum;
}
// Функція для обчислення визначника матриці 3x3
int determinant3x3(int submatrix[3][3]) {
int term1 = submatrix[0][0] * (submatrix[1][1] * submatrix[2][2] - submatrix[1][2] * submatrix[2][1]);
int term2 = submatrix[0][1] * (submatrix[1][0] * submatrix[2][2] - submatrix[1][2] * submatrix[2][0]);
int term3 = submatrix[0][2] * (submatrix[1][0] * submatrix[2][1] - submatrix[1][1] * submatrix[2][0]);
int det = term1 - term2 + term3;
printf("\nОбчислення визначника:\n");
printf("1: %d\n", term1);
printf("2: %d\n", term2);
printf("3: %d\n", term3);
printf("Визначник: %d\n", det);
return det;
}
#ifndef MODULE_H
#define MODULE_H
#include <stdio.h>
#include <stdlib.h>
// Розмір квадратної матриці 7x7
#define SIZE 7
// Мінімальне значення для rand()
#define MIN_RAND -40
// Максимальне значення для rand()
#define MAX_RAND 120
int sumSelectedElements(int matrix[SIZE][SIZE]);
// Прототип функції для обчислення визначника матриці 3x3
int determinant3x3(int submatrix[3][3]);
#endif