Работа с динамическим массивом

210
10 декабря 2017, 12:08

Нужно создать массив, который состоит из положительных значений на главной диагонали двухмерной матрицы.

Использую динамический массив, но у меня что-то не получается, выводит одно число - -84663632 - для всех элементов.

Вот код:

#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
int main()
{
        srand(time(NULL));
        int igor[5][5];
        int* ptrIgor = new int[6];
        cout << endl;
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                igor[i][j] = rand() % 41 - 20;
                cout << setw(5) << igor[i][j];
            }
            cout << endl;
        }
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                if (i == j)
                {
                    igor[i][j] = ptrIgor[i];
                }
            }
        }
        for (int k = 0; k < 6; k++)
        {
            cout << setw(5) << ptrIgor[k];
        }
        delete[] ptrIgor;
        cout << endl;
        system("pause");
        return 0;
}
Answer 1

Для начала - может, здесь

igor[i][j] = ptrIgor[i];

нужно поменять операнды местами? Вы же хотите хранить данные в ptrIgor, а не мусорить в igor?

Затем, у вас матрица 5x5, но вы, судя по

    for (int k = 0; k < 6; k++)
    {
        cout << setw(5) << ptrIgor[k];
    }

считаете, что будет шесть положительных элементов на диагонали?

Впрочем, вы в ptrIgor записываете почему-то все диагональные значения, а не только положительные. Да и как-то вы это странно делаете - не проще ли

for (int i = 0; i < 5; i++)
    if (igor[i][i] > 0)  ptrIgor[count++] = igor[i][i];

где count - счетчик. Вот окончательное решение:

#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
int main()
{
    srand(time(nullptr));
    int igor[5][5];
    int* ptrIgor = new int[5];
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            igor[i][j] = rand() % 41 - 20;
            cout << setw(5) << igor[i][j];
        }
        cout << endl;
    }
    cout << endl << endl;
    int count = 0;
    for (int i = 0; i < 5; i++)
        if (igor[i][i] > 0)
        {
            ptrIgor[count++] = igor[i][i];
        }
    for (int k = 0; k < count; k++)
    {
        cout << setw(5) << ptrIgor[k];
    }
    cout << endl;
    delete[] ptrIgor;
}
READ ALSO
Не работает код. Запись файла в список

Не работает код. Запись файла в список

Задача такова: нужно реализовать функцию, которая будет считывать строку с файла и записывать ее поэлементно в списокНе посимвольно, все...

185
Стек вызовов visual studio

Стек вызовов visual studio

Имеется рекурсивный методТак вот, при больших входных значения получаем stack overflow

194
Оценка сложности функции

Оценка сложности функции

Мне необходимо оценить сложность данной функции(код ниже), тк

299
Перегрузка операции &ldquo;&gt;&gt;&rdquo; в с++

Перегрузка операции “>>” в с++

Как можно реализовать перегрузку операции >> так, чтоб выражение a>>b>>c (a,b,c - объекты одного класса) работало следующим образом:

213