Quick actions

cmd+k|ctrl+k

Navigation

Languages

лабораторна 3 завдання 3

Snippet info

Language

C

Visibility

public

Author

liestayalive

Created

2024-05-26T12:10:28.048784Z

Updated

2024-05-26T12:10:33.378595Z

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

#define MAX_N 100

int sum_H_shape_elements(int matrix[][MAX_N], int rows, int cols, int highlighted_elements[][2], int n_elements) {
    int sum = 0;

    for (int i = 0; i < n_elements; ++i) {
        int row = highlighted_elements[i][0];
        int col = highlighted_elements[i][1];

        // Check if the element is part of the "H" shape
        if (row >= 0 && row < rows && col >= 0 && col < cols) {
            if (matrix[row][col] != 0) {
                sum += matrix[row][col];
            }
        }
    }

    return sum;
}

// Підрахунок визначника 3x3 матриці
int determinant(int submatrix[][3]) {
    int det = submatrix[0][0] * (submatrix[1][1] * submatrix[2][2] - submatrix[1][2] * submatrix[2][1])
        - submatrix[0][1] * (submatrix[1][0] * submatrix[2][2] - submatrix[1][2] * submatrix[2][0])
        + submatrix[0][2] * (submatrix[1][0] * submatrix[2][1] - submatrix[1][1] * submatrix[2][0]);
    return det;
}

// Обчислення визначника виділеної підматриці 3x3
int determinant_of_submatrix(int matrix[][MAX_N], int center_row, int center_col) {
    int submatrix[3][3];

    // Заповнення підматриці
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            submatrix[i][j] = matrix[center_row - 1 + i][center_col - 1 + j];
        }
    }

    // Обчислення визначника підматриці
    int det = determinant(submatrix);
    return det;
}

int main() {
    int matrix[MAX_N][MAX_N];
    int rows, cols;

    setlocale(LC_ALL, "ukr");

    printf("Введіть розміри матриці (рядки, стовпці): ");
    scanf("%d %d", &rows, &cols);

    if (rows <= 0 || cols <= 0 || rows > MAX_N || cols > MAX_N) {
        printf("Некоректні розміри матриці\n");
        return 1;
    }

    printf("1. Ввести з клавіатури\n2. Заповнити випадковими числами\n");
    printf("Ваш вибір: ");
    int choice;
    scanf("%d", &choice);

    switch (choice) {
    case 1:
        printf("Введіть елементи матриці:\n");
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                scanf("%d", &matrix[i][j]);
            }
        }
        break;
    case 2: {
        int min = -30, max = 30;
        printf("Введіть діапазон випадкових чисел (мінімальне, максимальне): ");
        scanf("%d %d", &min, &max);
        srand((unsigned int)time(NULL));
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                matrix[i][j] = rand() % (max - min + 1) + min;
            }
        }
        break;
    }
    default:
        printf("Неправильний вибір!\n");
        return 1;
    }

    printf("Введена матриця:\n");
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    int n_elements = 5;
    int highlighted_elements[5][2] = {
        {0, 0}, {0, cols - 1}, {rows / 2, 0}, {rows - 1, 0}, {rows - 1, cols - 1}
    };

    int sum = sum_H_shape_elements(matrix, rows, cols, highlighted_elements, n_elements);
    printf("Сума елементів, які утворюють H: %d\n", sum);

    return 0;

    // Обчислення визначника підматриці 3x3
    int center_row = rows - 2; // індекс рядка центрального елемента підматриці
    int center_col = cols / 2 - 1; // індекс стовпця центрального елемента підматриці

    if (center_row >= 0 && center_row + 2 < rows && center_col >= 0 && center_col + 2 < cols) {
        int det = determinant_of_submatrix(matrix, center_row, center_col);
        printf("Визначник підматриці 3x3: %d\n", det);
    }
    else {
        printf("Підматриця 3x3 не вміщується у межах матриці.\n");
    }

    return 0;
}
INFO