Частина тексту файла (без зображень, графіків і формул):
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
До модульної контрольної роботи №1
Варіант 5
Дата «1» грудня 2021
Завдання на Модульну контрольну роботу:
Матриця 3 на 3
Значення від 0 0 до 2 2 як додаткові- початкові параметри (9 повинно бути, після імені програми)
Алгоритм оберненої матриці
Перед цим перевірка на не рівність визначника нулю
Вивести на екран початкову та А-1 матрицю
За бажанням виконати перевірку (множ. початкової та оберненої матриці= Е)
Хід роботи:
Введення матрицю було зроблене за допомогою додаткових параметрів консолі, Далі було виведено початкову матрицю, знайдено її визначник, перевірно на його рівність 0, якщо він не рівний нулю було обраховано та виведено обернену матрицю. Після виконання основних завдань було зроблено перевірку на те чи правильно виконане завдання, множення двух матриць.( Якщо у результаті виходить одинична матриця, то її знайдено правильно). У моєму випадку перевірка встановила що обернену матрицю знайдено правильно.
Силка на Repl.it:
https://replit.com/join/tkxkwycogz-tr-15fundamient
Код програми:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 3
int main(int argc, char *argv[]) {
double mat[SIZE][SIZE];
if(argc == 10) {
//введення матриці
for (int i = 0; i < SIZE; i++){
for (int j = 0; j < SIZE; j++) {
mat[i][j] = atoi(argv[i*SIZE + j + 1]);
}
}
printf("Початкова матриця: \n");
for (int i = 0; i < SIZE; i++){
for (int j = 0; j < SIZE; j++) {
printf("%f ", mat[i][j]);
}
printf("\n");
}
// Оголошуємо визначник і знаходимо його
double det = 0;
for(int i = 0; i < SIZE; i++) {
det = det + (mat[0][i] * (mat[1][(i+1)%SIZE] * mat[2][(i+2)%SIZE] - mat[1][(i+2)%SIZE] * mat[2][(i+1)%SIZE]));
}
printf("\n");
if(det == 0) {
printf("EROR");
return 0;
} else {
printf("Визначник матриці: %f\n",det);
}
// Обрахунок оберненої матриці
double obertMat[SIZE][SIZE];
printf("\n");
printf("Обернена матриця: \n");
for(int i = 0; i < SIZE; i++){
for(int j = 0; j < SIZE; j++) {
obertMat[i][j] = ((mat[(j+1)%SIZE][(i+1)%SIZE] * mat[(j+2)%SIZE][(i+2)%SIZE]) - (mat[(j+1)%SIZE][(i+2)%SIZE] * mat[(j+2)%SIZE][(i+1)%SIZE])) / det;
}
}
for(int i = 0; i < SIZE; i++){
for(int j = 0; j < SIZE; j++) {
printf("%f ",obertMat[i][j]);
}
printf("\n");
}
// Перевірка матриці на те чи вона обернена, у результаті множення має вийти одининчна матриця
double resultMat[SIZE][SIZE];
for(int i = 0; i < SIZE; i++) {
for( int j =0; j < SIZE; j++) {
for(int k = 0; k < SIZE; k++) {
resultMat[i][j] += mat[i][k]*obertMat[k][j];
}
}
}
printf("\n");
printf("Результат перевірки(множення оберненої на початкову матрицю): \n");
for(int i = 0; i < SIZE; i++){
for(int j = 0; j < SIZE; j++) {
printf("%f ",resultMat[i][j]);
}
printf("\n");
}
printf("\nЯкщо унаслідок множення вийшла одинична матриця, то оберенена знайдена правильно!");
} else {
printf("EROR");
return 0;
}
}
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!