Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 13.05.2022
Сообщений: 12

Метод обратной матрицы, упростить пограмму

29.05.2022, 13:20. Показов 2586. Ответов 21

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне нужно упростить данную программу, а именно убрать template и заменить на int, чтобы программа сохранила работоспособность. Я заменяю, но у меня не получается, видимо, что-то неправильно делаю. Готовая программа нужна срочна буду очень благодарна, если исправите.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <ctime>
#include <cmath>
 
using namespace std;
 
template <typename T> void FreeMem(T **matr, int n);
template <typename T> void PrintMtx(T **matr, int n);
template <typename T> void SetMtx(T **matr, int n);
template <typename T> void TransponMtx(T **matr, T **tMatr, int n);
void Get_matr(int **matr, int n, int **temp_matr, int indRow, int indCol);
int Det(int **matr, int n);
 
int main()
{
srand((unsigned)time(NULL));
setlocale(0, "");
int n, det;
cout << "Введите размер матрицы: ";
cin >> n;
cout << "Введите матрицу коэфициеэнтов" << endl;
cout << "Вводите в строчку коэффициенты, разделяя пробелами." << endl;
int **matr = new int * [n];
double **obr_matr = new double * [n];
double **tobr_matr = new double * [n];
for(int i = 0; i < n; i++){
matr[i] = new int[n];
obr_matr[i] = new double[n];
tobr_matr[i] = new double[n];
}
SetMtx(matr, n);
PrintMtx(matr, n);
det = Det(matr, n);
cout << "Определитель матрицы = " << det << endl;
if(det){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
int m = n - 1;
int **temp_matr = new int * [m];
for(int k = 0; k < m; k++)
temp_matr[k] = new int[m];
Get_matr(matr, n, temp_matr, i, j);
obr_matr[i][j] = pow(-1.0, i + j + 2) * Det(temp_matr, m) / det;
FreeMem(temp_matr, m);
}
}
}
else
cout << "Т.к. определитель матрицы = 0,\nто матрица вырожденная и обратной не имеет!!!" << endl;
//Транспонирование матрицы
TransponMtx(obr_matr, tobr_matr, n);
//Печать обратной матрицы после транспонирования
PrintMtx(tobr_matr, n);
FreeMem(tobr_matr, n);
FreeMem(matr, n);
FreeMem(obr_matr, n);
}
//Функция транспонирования матрицы
template <typename T> void TransponMtx(T **matr, T **tMatr, int n){//
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
tMatr[j][i] = matr[i][j];
}
//Функция освобождения памяти
template <typename T> void FreeMem(T **matr, int n)
{
for(int i = 0; i < n; i++)
delete [] matr[i];
delete [] matr;
}
 
//функция заполнения матрицы
template <typename T> void SetMtx(T **matr, int n)
{
for (int i = 0; i < n; i++)
 
for (int j = 0; j < n; j++)
cin>>matr[i][j];
}
 
//функция печати матрицы
template <typename T> void PrintMtx(T **matr, int n)
{
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++)
cout << matr[i][j] << " ";
cout << endl;
}
}
//функция вычеркивания строки и столбца
void Get_matr(int **matr, int n, int **temp_matr, int indRow, int indCol)
{
int ki = 0;
for (int i = 0; i < n; i++){
if(i != indRow){
for (int j = 0, kj = 0; j < n; j++){
if (j != indCol){
temp_matr[ki][kj] = matr[i][j];
kj++;
}
}
ki++;
}
}
}
 
//============================================================ ==================================================
// вычисление определителя
//============================================================ ==================================================
//функция вычисления определителя матрицы
int Det(int **matr, int n)
{
int temp = 0; //временная переменная для хранения определителя
int k = 1; //степень
if(n < 1){
cout<<"Не верный размер матрицы!!!" << endl;
return 0;
}
else if (n == 1)
temp = matr[0][0];
else if (n == 2)
temp = matr[0][0] * matr[1][1] - matr[1][0] * matr[0][1];
else{
for(int i = 0; i < n; i++){
int m = n - 1;
int **temp_matr = new int * [m];
for(int j = 0; j < m; j++)
temp_matr[j] = new int [m];
Get_matr(matr, n, temp_matr, 0, i);
temp = temp + k * matr[0][i] * Det(temp_matr, m);
k = -k;
FreeMem(temp_matr, m);
}
}
return temp;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.05.2022, 13:20
Ответы с готовыми решениями:

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод обратной матрицы
Необходимо добавить метод нахождения обратной матрицы #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int...

Метод обратной матрицы
Я писал свою программу давно на Паскале.. щас же мне она нужна на языке С++... може кто поможет перевести на С? заранее спасибо...всех с...

21
404 / 261 / 168
Регистрация: 13.01.2021
Сообщений: 1,162
05.06.2022, 18:40
Студворк — интернет-сервис помощи студентам
lemegeton, преподователи просто добрые. Не мучают с кодом.
Цитата Сообщение от lemegeton Посмотреть сообщение
А объяснить, да так, чтоб он понял, каждую строчку, не смотря на то, что для достижения нулевого результата понадобился целый курс вуза... Это нереалистичные ожидания.
Тут главное чтобы, не человек понял, а чтобы преподователь понял что это он делал и что-то да как-то знает.
0
 Аватар для lemegeton
4904 / 2697 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
05.06.2022, 18:57
Цитата Сообщение от kirigaua Посмотреть сообщение
преподователи просто добрые. Не мучают с кодом
Преподаватель с уже минимальным опытом просто по глазам догадывается, сам ли человек писал.
Кроме шуток. Реально заметно просто по тому, как человек смотрит на код, сам ли он его писал.
(Вернее, сможет ли он написать так же или лучше, но в данном контексте разница несущественна.)

Цитата Сообщение от kirigaua Посмотреть сообщение
главное чтобы, не человек понял, а чтобы преподователь понял что это он делал и что-то да как-то знает
Да-да. Всё верно. Я об этом и говорю.

Ты, как препод, смотришь на человека, который смотрит на код, который он сам принёс, и моментально угадываешь, его ли это код. )))
А потом он открывает рот... И твоя догадка превращается в стопудовую уверенность.
Дальше -- вопрос личности препода.
Пофиг -- зачтёт, не пофиг -- в один-два вопроса незачёт влепит.

А нулёвого человека довести до состояния, когда он сможет ответить на вопрос типа "предложите улучшение вот в этой функции" за пару дней нереально.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2022, 18:57

Метод Крамера и обратной матрицы
Помогите, пожалуйста! Как в одной программе реализовать метод Крамера и метод обратной матрицы? Ввод матрицы должен происходить через...

Метод итераций для нахождения обратной матрицы
Люди, подскажите как написать программу нахождения обратной матрицы методом итераций, или хотя бы решения системы уравнений

Метод обратной матрицы (MFC)
Люди, подскажите как написать программу нахождения обратной матрицы в приложении MFC

График функции.Метод Крамера,Гаусса,метод обратной матрицы
Помогите пожалуйста решить в MS Excel:cry:

Подскажите метод нахождения обратной матрицы и определителя матрицы
Подскажите метод нахождения обратной матрицы и определителя матрицы на С#


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru