почему вывод данной программы выдаёт в ответ большие отрицательные числа?

Рейтинг: 0Ответов: 1Опубликовано: 07.02.2023

Суть задачи: Дана действительная матрица N*N. Построить плоскость действительных чисел a1...an по правилу: если в i-й строке элемент ii < 0, то ai = sum элементов i-й строки до первого элемента < 0, иначе ai = sum последних элементов i-й строки начиная с первого по прядку неотрицательного элемента

    #include <iostream>
    using namespace std;

у меня выводятся большие отрицательные числа, не могу понять с чем это связано

void show_matrix(int** matrix, int n)
{
    cout << "ваша матрица" << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
}

void create_matrix(int** matrix, int n)
{
    for (int i = 0; i < n; i++)
    {
        matrix[i] = new int[n];
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << "Введите элемент матрицы ";
            cin >> matrix[i][j];
        }
    }
    cout << endl;
    show_matrix(matrix, n);
}

void ar_ray(int** matrix, int n)
{
    int* arr = new int[n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (matrix[i][i] < 0)
            {
                for (int k = 0; k < n - 1; k++)
                {
                    while (matrix[i][k] >= 0)
                    {
                        arr[i] = matrix[i][k] + matrix[i][k + 1];
                    }
                }
            }
            else
            {
                for(int k = n - 1; k > 0 ; k--)
                {
                    if (arr[i] >= 0)
                    {
                        arr[i] = matrix[i][k] + matrix[i][k - 1];
                    }
                }  
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
}

   int main()
{
    setlocale(LC_ALL, "RUS");
    int n;
    cout << "введите размер матрицы ";
    cin >> n;`
    int** matrix = new int*[n];
    create_matrix(matrix, n);
    ar_ray(matrix, n);
}

Ответы

▲ 1

Вообще-то ваша функция должна выглядеть примерно так (если я правильно понял вторую часть задания):

int * ar_ray(int** matrix, int n)
{
    int* arr = new int[n];
    for (int i = 0; i < n; i++)
    {
        arr[i] = 0;
        if (matrix[i][i] < 0)
        {
            for(int j = 0; j < n && matrix[i][j] >= 0; ++j)
                arr[i] += matrix[i][j];
        }
        else
        {
            int j = 0;
            for(;matrix[i][j] < 0;++j);
            for(;j < n; ++j) arr[i] += matrix[i][j];
        }
    }

    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    return arr;
}

Что вы у себя делаете — выше моего понимания... Есть полное ощущение, что вы взяли чужой код для решения другой задачи, и выдали за свой...