Помогите исправить ошибки в коде С++ [закрыт]

149
13 октября 2019, 05:00
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
#include <iomanip>
using namespace std;
//алгебраическое дополнение к элементу a[row][col] генерация их
double add(double a[3][3], unsigned row, unsigned col, unsigned N, unsigned M)
{
    double b[2][2];
    unsigned i, j, bi, bj;
    for (i = 0, bi = 0; i<N; i++)
    {
        if (i != row)
        {
            for (j = 0, bj = 0; j<M; j++)
                if (j != col)
                {
                    b[bi][bj] = a[i][j];
                    bj++;
                }
            bi++;
        }
    }
    if ((row + col) % 2)
        return b[0][1] * b[1][0] - b[0][0] * b[1][1];
    else
        return b[0][0] * b[1][1] - b[0][1] * b[1][0];
}
//определитель матрицы
double det(double **a, unsigned N, unsigned M)
{
    int i;
    double sum;
    for (i = 0, sum = 0.; i<N; i++)
        sum += a[i][0] * add(a, i, 0, N, M);
    if (sum < 0)
        cout << "ERROR DETERMINANT NOL'";
    return sum;
}
//обратная матрица
void inverse(double **a, double d, unsigned N, unsigned M)
{
    double a1[N][M], cur;
    unsigned i, j;
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++)
            a1[i][j] = add(a, i, j, N, M) / d;
    for (i = 0; i < N; i++)
        for (j = i + 1; j < M; j++)
        {
            cur = a1[i][j];
            a1[i][j] = a1[j][i];
            a1[j][i] = cur;
        }
    if (d < 0)
        cout << "Error \n";
    else {
        cout << "\nobratnya matrix :\n";
        for (i = 0; i <N; i++)
        {
            for (j = 0; j < M; j++)
                cout << setw(7) << a1[i][j];
            cout << "\n";
        }
    }
}
//основная функция 
int main()
{
    unsigned N, M; //размерность матрицы
    double determinant; // объявление детерминанта(опеределителя)
    unsigned i, j;
    cout << "n "; cin >> N;
    cout << "m "; cin >> M;
    double ** arr = new double*[N];
    for (i = 0; i < N; i++) {
        arr[i] = new double[M];}
    for (j = 0; j<M; j++)
        arr[i][j] = rand() % 10 - 5; //задаем рандом в диапазоне от +10 до -5
    cout << "matrix A:\n";
    for (i = 0; i<N; i++)
    {
        for (j = 0; j<M; j++)
            cout << setw(7) << setprecision(2) << arr[i][j]; //setprecision - сокращение до двух знаков после запятой //setw(7) расстояние между знаками 
        cout << "\n";
    }
    determinant = det(arr, N, M);
    cout << "\ndeterminant: " << determinant << "\n"; //вывод детерминанта 
    if (determinant) inverse(arr, determinant, N, M); //в другом случае
    else cout << "obrantoy matrici net";
    getchar();
    for (i = 0; i<N; i++)
        delete[] arr[i];
    delete[] arr;
    return 0;
}

Answer 1

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

#include<iostream>
#include<stdlib.h>
#include<time.h>
#include <iomanip>
using namespace std;
//алгебраическое дополнение к элементу a[row][col] генерация их
double add(double** a, unsigned row, unsigned col, unsigned N, unsigned M)
{
    double b[2][2];
    unsigned i, j, bi, bj;
    for (i = 0, bi = 0; i<N; i++)
    {
        if (i != row)
        {
            for (j = 0, bj = 0; j<M; j++)
                if (j != col)
                {
                    b[bi][bj] = a[i][j];
                    bj++;
                }
            bi++;
        }
    }
    if ((row + col) % 2)
        return b[0][1] * b[1][0] - b[0][0] * b[1][1];
    else
        return b[0][0] * b[1][1] - b[0][1] * b[1][0];
}
//определитель матрицы
double det(double **a, unsigned N, unsigned M)
{
    int i;
    double sum;
    for (i = 0, sum = 0.; i<N; i++)
        sum += a[i][0] * add(a, i, 0, N, M);
    if (sum < 0)
        cout << "ERROR DETERMINANT NOL'";
    return sum;
}
//обратная матрица
void inverse(double **a, double d, unsigned N, unsigned M)
{
    double **a1 = new double*[N];
    for(int i = 0; i<N; ++i){
       a1[i] = new double[M];    
    }
    double cur;
    unsigned i, j;
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++)
            a1[i][j] = add(a, i, j, N, M) / d;
    for (i = 0; i < N; i++)
        for (j = i + 1; j < M; j++)
        {
            cur = a1[i][j];
            a1[i][j] = a1[j][i];
            a1[j][i] = cur;
        }
    if (d < 0)
        cout << "Error \n";
    else {
        cout << "\nobratnya matrix :\n";
        for (i = 0; i <N; i++)
        {
            for (j = 0; j < M; j++)
                cout << setw(7) << a1[i][j];
            cout << "\n";
        }
    }
}
//основная функция 
int main()
{
    unsigned N, M; //размерность матрицы
    double determinant; // объявление детерминанта(опеределителя)
    unsigned i, j;
    cout << "n "; cin >> N;
    cout << "m "; cin >> M;
    double ** arr = new double*[N];
    for (i = 0; i < N; i++) {
        arr[i] = new double[M];}
    for (j = 0; j<M; j++)
        arr[i][j] = rand() % 10 - 5; //задаем рандом в диапазоне от +10 до -5
    cout << "matrix A:\n";
    for (i = 0; i<N; i++)
    {
        for (j = 0; j<M; j++)
            cout << setw(7) << setprecision(2) << arr[i][j]; //setprecision - сокращение до двух знаков после запятой //setw(7) расстояние между знаками 
        cout << "\n";
    }
    determinant = det(arr, N, M);
    cout << "\ndeterminant: " << determinant << "\n"; //вывод детерминанта 
    if (determinant) inverse(arr, determinant, N, M); //в другом случае
    else cout << "obrantoy matrici net";
    getchar();
    for (i = 0; i<N; i++)
        delete[] arr[i];
    delete[] arr;
    return 0;
}
READ ALSO
Проблема с поиском в глубину

Проблема с поиском в глубину

написал рекурсивную реализацию поиска в глубину, которая отлично работает:

128
Копирование и перемещение

Копирование и перемещение

Когда лучше использовать копирование, а когда перемещение? (Когда большие объекты лучшие копировать(даже если дальше их не используем)?)

138
Компиляция в Eclipse C++ (Linux)

Компиляция в Eclipse C++ (Linux)

подскажите как Вы компилируете в Eclipse?

119
Принцип работы функции getche()

Принцип работы функции getche()

Программа должна посчитать количество символов и слов в введённой строке, считывание осуществляется при помощи функции getche()

124