Помогите убогому, что то сломалось в программе, решающей СЛАУ методом Краммера

103
24 декабря 2020, 14:50

При выполнении вылетает ошибка

Необработанное исключение по адресу 0x0025731B в ConsoleApplication8.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xDDDDDDDD.

Происходит это на шаге вычисления u

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

class Matrix {
public:
    double** MATRIX;
    int M, N;
    void CreateByHand() {   // заполнение вручную
        int i, j;
        MATRIX = new double* [M];
        for (i = 0; i < M; i++) {
            MATRIX[i] = new double[N];
            for (j = 0; j < N; j++) {
                cout << "[" << i << "][" << j << "]= ";
                cin >> MATRIX[i][j];
            }
        }
    }
    void CreateRandom() {  // рандомное заполнение
        MATRIX = new double* [M];
        int i, j;
        for (i = 0; i < M; i++) {
            MATRIX[i] = new double[M];
            for (j = 0; j < N; j++) {
                MATRIX[i][j] = rand();
            }
        }
    }
    double Element(int j, int m)  // элемент с номером j, m
    {
        return MATRIX[j][m];
    }
    ~Matrix() // деструктор
    {
        for (int z = 0; z < M; z++)
            delete[] MATRIX[z];
        delete[] MATRIX;
    }
};
// Функция вывода матрицы
void PrintMatr(Matrix V) {
    int i, j; // счетчики
    for (i = 0; i < V.M; i++) {
        for (j = 0; j < V.N; j++)
            cout << V.Element(i, j) << " ";
        cout << endl;
    }
}
// Получение матрицы без i-й строки и j-го столбца
Matrix GetMatr(Matrix G, int i, int j) {
    G.M = G.M - 1;
    G.M = G.N - 1;
    int ki, kj, di, dj;
    di = 0;
    for (ki = 0; ki < G.M - 1; ki++) { // проверка индекса строки
        if (ki == i) di = 1;
        dj = 0;
        for (kj = 0; kj < G.N - 1; kj++) { // проверка индекса столбца
            if (kj == j) dj = 1;
            G.MATRIX[ki][kj] = G.Element(ki + di, kj + dj);
        }
    }
    return G;
}
// Рекурсивное вычисление определителя
double Determinant(Matrix L) {
    int i, k;
    double d;
    d = 0;
    k = 1; //(-1) в степени i
    if (L.M == 1) {
        d = L.Element(0, 0);
        return(d);
    }
    if (L.M == 2) {
        d = L.Element(0, 0) * L.Element(1, 1) - (L.Element(1, 0) * L.Element(0, 1));
        return(d);
    }
    if (L.M > 2) {
        for (i = 0; i < L.M; i++) {
            Matrix J = GetMatr(L, i, 0);
            d = d + k * L.Element(i, 1) * Determinant(J);
            k = -k;
        }
    }
    return(d);
}
Matrix PartialMatrix(Matrix U, Matrix K, int m)   // промежуточные матрицы с замененными стобцами
{
    int z;
    Matrix F = U;
    for (z = 0; z < U.M; z++) {
        F.MATRIX[z][m] = K.Element(0, z);
    }
    return F;
}

// Основная функция
int main() {
    int m;
    cout << "Enter the size of the system matrix: ";
    cin >> m;
    Matrix A; // матрица системы
    A.M = m;
    A.N = m;
    Matrix B; // вектор свободных членов
    B.M = m;
    B.N = 1;
    cout << "Type in system matrix: "<< endl;
    A.CreateByHand();
    cout << "Type in constant terms: "<< endl;
    B.CreateByHand();
    PrintMatr(A);
    PrintMatr(B);
> Вот отсюда все плохо
    double u = Determinant(A); 
    cout << "Determinant of the system matrix equals " << u << endl;
    int e;
    Matrix D; // вектор решения
    D.M = m;
    D.N = 1;
    for (e = 0; e < A.M; e++) {
        Matrix C = PartialMatrix(A, B, e);
        cout << "Partial matrix " << e << " is" << endl;
        PrintMatr(C);
        double Y = Determinant(C);
        cout << " Determinant of partial matrix " << e << " is  " << Y << endl;
        D.MATRIX[0][e] = Y / u;
    }
    for (e = 0; e < A.M; e++) {
        cout << "Solution x" << e << " :" << D.Element(0, e) << endl;
    }
    return 0;
}
READ ALSO
Вызвать функцию из dll

Вызвать функцию из dll

Пытаюсь вызвать message box из dll, учебное задание

127
Появилась Uncaught Error: Syntax error, unrecognized expression: # при использования выпадающего меню Bootstrap 4

Появилась Uncaught Error: Syntax error, unrecognized expression: # при использования выпадающего меню Bootstrap 4

Пилю сайт, сначала был HTML шаблон, сейчас в процессе натяжки на WPВо время натяжки на CMS появилась промежуточная задача от заказчика, один из пунктов...

112
Перемножить элементы таблицы jquery

Перемножить элементы таблицы jquery

Есть корзина интернет магазина, в которой стараюсь сделать перерасчет по клику ценыВ случае 1 товара проблем особых нет, но в случае 2х и более...

142
Проблема с анимацией в select

Проблема с анимацией в select

пытаюсь стилизовать select, хочу сделать анимацию, что при клике на select и выборе нужного option, border-bottom будет менять цвет, а еще лучше это будет...

130