Учу классы и решил реализовать старую программу через классы. Но возникла ошибка и не могу разобраться в чем дело.
#include <iostream>
#include <Windows.h>
#include "Copyright.h"
class Matrica {
public:
int calculate(size_t length) {
enter_matrica(length);
return detnum;
}
private:
long long detnum=0;size_t i, j;
void Minor(int **mas, int **p, int i, int j, size_t length) //Получения матрицы без i-cтолбцы и j-строки
{
size_t a, b, c, d;
c = 0;
for (a = 0; a<length; a++) { // проверка индекса столбца
if (a == i) c = 1;d = 0;
for (b = 0; b<length; b++) { // проверка индекса строки
if (b == j) d = 1;
p[a][b] = mas[a + c][b + d];
/*Вот здесь возникает ошибка.Exception thrown at 0x00C92A11 in
Опредилитель.exe: 0xC0000005: Access violation reading location
0xFDFDFE01.*/
}
}
}
void enter_matrica(size_t length) // Function to help users can enter elements matrica
{
int **massive;massive = new int *[length];
for (i=0; i < length; i++)//Cycle enter matrica
{
if (i > 0) {
std::cout << "Теперь вводите элементы следущего стопчика\n";
}
massive[i] = new int[length];
for (j=0; j < length; j++)
{
std::cout << "Введите элементы строки:\n";
std::cin >> massive[i][j];
}
}
det(massive, length);
}
int det(int** mas, size_t length) //Function to find determinant
{
switch (length)
{
case 2:
return detnum = mas[0][0] * mas[1][1] - mas[1][0] * mas[0][1];// If matrica 2 to 2.
break;
case 3:
return detnum = (mas[0][0] * mas[1][1] * mas[2][2]) + (mas[1][0] * mas[2][1] * mas[0][2]) + (mas[0][1] * mas[1][2] * mas[2][0])
- (mas[2][0] * mas[1][1] * mas[0][2]) - (mas[1][0] * mas[0][1] * mas[2][2]) - (mas[0][0] * mas[1][2] * mas[2][1]);//If matrica 3 to 3.
break;
default: // if matrica n to n.
int **mas_two;
mas_two = new int*[length];
for (i = 0; i < length; i++) {
mas_two[i] = new int[length];
}
j = 0;
size_t length_two = length - 1;int k = 1;
for (i = 0; i < length; i++) {
Minor(mas, mas_two, i, j, length);
detnum += k * mas[i][0] * det(mas_two, length_two);
k = -k;
}
return detnum;
}
}
};
int main(){
SetConsoleOutputCP(1251);
Copyright();
std::cout << "\nЭта программа вычисляет определитель\n";
std::cout << "Пожалуйста введите размер определителя: ";
size_t length;std::cin >> length;// Размер матрицы
Matrica deter;
long long res = deter.calculate(length);
std::cout<<"Опредилитель матрицы равен: "<<res<<'\n';
system("pause");
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите запустить (то есть собрать (build) и отладить) код с++ в vsCode на windows 10У меня уже установлен VS Community 2017 и расширение С/С++
Недавно узнал что такое сокет но не могу о них понять некоторы моментыГуглил но все что нашел не расчитано для новичков