Как мне установить все диагонали в матрице равными нулю? - PullRequest
0 голосов
/ 14 мая 2018

У меня проблема с домашним заданием, которое требует, чтобы компилятор распечатал матрицу, в которой все диагонали выводятся как ноль.Я также должен передать это функции.Однако я понятия не имею, как это сделать ..
Вот мой код:

  #include <iostream>
using namespace std;

int diagonals();

int main()
{
    //problem 1
    int matrix[3][3];
    for (int i = 1; i <= 3; i++)
    {
        for (int j = 1; j <= 3 ; j++)
        {
            cout << "Row " << i << " column " << j<< ": ";
            cin >> matrix[i][j];
        }
    }
    for (int i = 1; i <= 3; i++)
    {
        for (int j = 1; j <= 3; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    cout << "\nReverse of the matrix:" << endl;

    for (int j = 1; j <= 3; j++)
    {
        for (int i = 1; i <= 3; i++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }//end of problem 1

    //problem 2

    cout << "Diagonals changed to 0:\n" << endl;

}

1 Ответ

0 голосов
/ 14 мая 2018

ваша матричная декларация говорит int matrix[3][3];, что в ней есть три 1-D массива, и в каждом 1-D массиве вы можете хранить три элемента.И в C/C++ индекс массива начинается с zero.

Проблемным утверждением является for (int i = 1; i <= 3; i++), так как вы пропускаете matrix[0][0] и пытаетесь сохранить в matrix[3][3], который не существует, что, в свою очередь, вызывает undefined поведение.

Итак, сначала запустите итерацию цикла от 0 до числа rows и столбца соответственно.

for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3 ; j++) {
                cout << "Row " << i << " column " << j<< ": ";
                cin >> matrix[i][j];
        }
}

Приходите к упомянутой вами задаче, распечатать матрицу, в которой все диагонали выводятся как ноль.? записать одно условие так, чтобы, если row value и col value были равны, присвойте его zero, иначе сканирование от пользователя.Вот пример кода

int main(void) {
        int matrix[3][3] = { 0 }; /* initialize it */
        int row  = sizeof(matrix)/sizeof(matrix[0]); /* find no of rows */
        int col  = sizeof(matrix[0])/sizeof(matrix[0][0]);/* find no of columns */

        for (int i = 0; i < row; i++)   {
                for (int j = 0; j < col; j++)   {
                        if( i == j)
                                matrix[i][j] = 0;/* when i and j are equal means thats diagonal and assign it to zero */
                        else /* if its not diagonal then scan from user */
                                std::cin>>matrix[i][j];

                }
        }
        return 0;
}

Во-вторых , Я также должен передать его функции. , чтобы узнать, как передать массив 2d в функцию.Вот пример примера.

void diagonal(int (*mat)[3],int row, int col) { /* mat is pointer to an array */
        std::cout<<"printing matrix "<<std::endl;
        for (int i = 0; i < row; i++)   {
                for (int j = 0; j < col; j++)   {
                        std::cout<<mat[i][j]<<"\t";             
                }
                std::cout<<std::endl;
        }
}

И вызовите diagonal(), как показано ниже, из функции main() как

diagonal(matrix,row,col); /* pass matrix, no of rows, no of columns */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...