Dev - C++ - Cómo razona el compilador?

 
Vista:
sin imagen de perfil

Cómo razona el compilador?

Publicado por anonymous (6 intervenciones) el 16/05/2018 18:09:35
Hola gente, tengo a mano un código muy simple, pero no entiendo como razona el compilador aquí. Para mi punto de vista M[0][0] debería mostrarme el 0, ya que se cumplen los dos ciclos "for" con k y n empezando de 0 y deteniéndose en 1. Ya que con 2 se corta. Evidentemente estoy razonando mal, dado que cuando Ejecuto la compilación, el resultado es 1 y no 0. Creo que el tema corresponde a arreglos unidimensionales/bidimensionales.
Desde ya agradezco alguna orientación.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
 
int main ()
 
{
	double M[][3] = {0,1,2,3,4,5,6,7,8};
	for(int k=0; k<2; k++)
	for(int n=0; n<2; n++)
	M[k][n] = k+n;
 
	for(int k=0; k<2; k++)
	for(int n=0; n<2; n++)
	M[k][k] = M[k][n];
 
	cout << M[0][0];
	}

Resultado: 1.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 25
Ha disminuido su posición en 4 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Cómo razona el compilador?

Publicado por Alejandro (9 intervenciones) el 16/05/2018 18:48:40
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
El resultado es correcto, el proceso es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
k=0, n=0
M[0][0] = 0 + 0 // total 0. Aqui se escribio el valor por primera vez
 
k=0, n=1
M[0][1] = 0 + 1 // total 1
 
k=1, n=0
M[1][0] = 1 + 0 // total 1
 
k=1, n=1
M[1][1] = 1 + 1 // total 2
 
 
k=0, n=0
M[0][0] = M[0][0]  // Aqui se sobreescribe y M[0][0] = 0
 
k=0, n=1
M[0][0] = M[0][1] // Aqui se sobreescribe por ultima vez y M[0][1] = 1
 
k=1, n=0
M[1][1] = M[1][0]  // M[1][0] = 1
 
k=1, n=1
M[1][1] = M[1][1]  // M[1][1] = 1

Un tip de programacion es que uses {...} aunque no sean necesarios. Hacen al codigo mas legible.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
 
int main (){
	double M[][3] = {0,1,2,3,4,5,6,7,8};
	for(int k=0; k<2; k++){
		for(int n=0; n<2; n++){
			M[k][n] = k+n;
		}
	}
 
	for(int k=0; k<2; k++){
		for(int n=0; n<2; n++){
			M[k][k] = M[k][n];
		}
	}
 
	cout << M[0][0];
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar