Пожалуйста найти ошибку. По возможности дорешать задачу

210
22 апреля 2022, 00:50

Дана квадратная матрица. Если в i-ой строке матрицы элемент принадлежащий главной диагонали отрицателен, то заменить этот элемент суммой элементов i-ой строки; в противном случае-произведением элементов i-ой строки. Элементы главной диагонали (измененные)вывести в одномерный массив в порядке возрастания. Вывести исходную и преобразованную матрицы, полученный массив.Вот собственно задача, я написал такой вот код, но выводит какие-то космические числа. Еще когда пытаюсь вывести преобразованную матрицу, она почему то выводится в столбик. Пожалуйста помогите.

#include "stdafx.h"
#include <cmath>
#include <iomanip>
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
    setlocale(0, "");
    srand(unsigned(time(NULL)));
    double sum = 0, proizv = 1;
    int N, M, fv, lv;
    cout << "_________________________________________________________________________"<< endl;
    cout << "Введите размер матрицы: ";
    cin >> N >> M;
    cout << "Введите нижний предел рандомных чисел" << endl;
    cin >> fv;
    cout << "Введите верхний предел рандомных чисел" << endl;
    cin >> lv;
    int** A = new int*[N];
    for (int i = 0; i < N; i++)
        A [i] = new int[M];
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            A[i][j] = fv + rand() % (lv - fv + 1);;
                    
    
    cout << "Вот матрица:" << endl;
    for (int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
            cout << A[i][j] << " ";
        cout << endl;
     }
    cout << endl;
    for (int i = 0; i < N; i++)   
    {
        for (int j = 0; j < M; j++)
        {
            if (A[i][i] < 0)
            {
                A[i][i] = sum + A[i][j];
            }
        }
    }
    for (int i = 0; i < N; i++)   
    {
        for (int j = 0; j < M; j++)
        {
            if (A[i][i] >= 0);
            {
                proizv *= A[i][j];
                A[i][i] = proizv * A[i][j];
            }   
        }
    }
    cout << "Преобразованная матрица:" << endl;
    for (int i = 0; i < N; i++)
    {
       for (int j = 0; j < M; j++)
       {
           cout << A[i][j] << "\t";
           cout << "\n";
       }
    }
    system("pause");
    return 0;
}
Answer 1

Вот эту часть кода:

for (int i = 0; i < N; i++)   
    {
        for (int j = 0; j < M; j++)
        {
            if (A[i][i] < 0)
            {
                A[i][i] = sum + A[i][j];
            }
        }
    }
    for (int i = 0; i < N; i++)   
    {
        for (int j = 0; j < M; j++)
        {
            if (A[i][i] >= 0);
            {
                proizv *= A[i][j];
                A[i][i] = proizv * A[i][j];
            }   
        }
    }

можно заменить на:

for (int i = 0; i < N; i++)
{
    if (A[i][i] < 0)
    {
        int sum = 0;
        for (int j = 0; j < N; j++)
        {
            sum += A[i][j];
        }
        A[i][i] = sum;
    }
    else if (A[i][i] > 0)
    {
        int product = 1;
        for (int j = 0; j < N; j++)
        {
            product *= A[i][j];
        }
        A[i][i] = product;
    }
    else
    {
        A[i][i] = 0;
    }
}
READ ALSO
Подключение библиотек boost к visual studio code

Подключение библиотек boost к visual studio code

Я установил себе на компьютер boostПрошел все этапы установки по гайду из интернета,подключил скомпилированные библиотеки в cpp-properties

137
Явный вызов деструктора в классе

Явный вызов деструктора в классе

У меня есть класс Function и Hyperbola, который наследует FunctionПоскольку формула гиперболы k / x, то делаю проверку x == 0 и в случае, если х==0 удаляю этот...

153
Почему меняется тип объекта? (виртуальная функция)

Почему меняется тип объекта? (виртуальная функция)

Есть родительский класс command и два дочерних - movement и rootЗаголовочный файл:

99
Ряды в C++, помогите с задачкой, пожалуйста

Ряды в C++, помогите с задачкой, пожалуйста

Не могу понять, как можно реализовать это (если можно, попробуйте объяснить мне, как все нужно делать):

123