Проблема реализации класса матрицы C++

179
10 января 2018, 18:42

Учу классы и решил реализовать старую программу через классы. Но возникла ошибка и не могу разобраться в чем дело.

#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");    
}

READ ALSO
как перевести vector&lt;int&gt; в string?

как перевести vector<int> в string?

Решаю задачку по c++Почти решил,но появилась проблема

175
VS Code в связке с С++ (windows)

VS Code в связке с С++ (windows)

Помогите запустить (то есть собрать (build) и отладить) код с++ в vsCode на windows 10У меня уже установлен VS Community 2017 и расширение С/С++

208
Проблема с потоком android

Проблема с потоком android

Есть следующий код:

215
Простой пример Сокета. Андроид

Простой пример Сокета. Андроид

Недавно узнал что такое сокет но не могу о них понять некоторы моментыГуглил но все что нашел не расчитано для новичков

209