¿Por qué la segunda fila de mi matriz 2D tomando valores aleatorios de la memoria RAM?

votos
1

así que estoy trabajando en este proyecto durante la clase, y yo estoy tratando de asignar valores a una matriz 2D utilizando un bucle, pero me he topado con un par de problemas. Aquí está mi código:

#include <iostream>
#include <string>
using namespace std;

const int MAX = 10;

int main()
{

    int matrix2[MAX][MAX];
    int matrix1[MAX][MAX];


      int i, j;

      j=0;
    for (i=0; i < MAX; i++){

        matrix1[i][j] = i + 5;

        for (j=1; j < MAX; j++){
            matrix1[i][j] = matrix1[i][j-1] + 4;

            cout << matrix1[i][j] <<  ;
        }
        cout << endl;
    }




}

Y esto es lo que da salida:

9 13 17 21 25 29 33 37 41 
1422620036 1422620040 1422620044 1422620048 1422620052 1422620056 1422620060 1422620064 1422620068 
10 14 18 22 26 30 34 38 42 
11 15 19 23 27 31 35 39 43 
12 16 20 24 28 32 36 40 44 
13 17 21 25 29 33 37 41 45 
14 18 22 26 30 34 38 42 46 
15 19 23 27 31 35 39 43 47 
16 20 24 28 32 36 40 44 48 
17 21 25 29 33 37 41 45 49   

y esta es la salida que estoy tratando de conseguir:

5   9   13  17  21  25  29  33  37  41  
6   10  14  18  22  26  30  34  38  42  
7   11  15  19  23  27  31  35  39  43  
8   12  16  20  24  28  32  36  40  44  
9   13  17  21  25  29  33  37  41  45  
10  14  18  22  26  30  34  38  42  46  
11  15  19  23  27  31  35  39  43  47  
12  16  20  24  28  32  36  40  44  48  
13  17  21  25  29  33  37  41  45  49  
14  18  22  26  30  34  38  42  46  50

Me estoy preguntando si alguien lo que podemos hacer para arreglar la segunda fila, y también por qué la primera columna no está imprimiendo

Publicado el 19/09/2018 a las 12:59
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
4

jes 0sólo para la primera " iiteración"; en todos los demás casos es MAX.
En los casos en que sea MAX, matrix[i][j]ha indefinido comportamiento.

La solución robusta es utilizar sus variables de bucle para recorrer y nada más.
Declarar todo en un ámbito tan pequeño como sea posible.

for (int i = 0; i < MAX; i++){
    matrix1[i][0] = i + 5;
    for (int j = 1; j < MAX; j++){
        matrix1[i][j] = matrix1[i][j-1] + 4;
        cout << matrix1[i][j] << " ";
    }
    cout << endl;
}
Respondida el 19/09/2018 a las 13:09
fuente por usuario

votos
2

el problema es que jno se restablece en el tiempo, por lo que en la línea matrix1[i][j] = i + 5;j es más allá del final de la matriz. Mueva el establecimiento ja cero hacia adelante una línea

for (i=0; i < MAX; i++){
    j = 0;

    matrix1[i][j] = i + 5;

    for (j=1; j < MAX; j++){
        matrix1[i][j] = matrix1[i][j-1] + 4;

        cout << matrix1[i][j] << " ";
    }
    cout << endl;
}

o cambiar matrix1[i][j] = i + 5;a matrix1[i][0] = i + 5;como se sugiere Richard Critten

Respondida el 19/09/2018 a las 13:05
fuente por usuario

votos
0

Su puesta a cero del j debe ser dentro del bucle. En la segunda ronda (i = 1), j comienza como MAX.

for (i=0; i < MAX; i++){
  j=0;
Respondida el 19/09/2018 a las 13:06
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more