Dev - C++ - cout<<"texto" cambia el resultado de una funcion

   
Vista:

cout<<"texto" cambia el resultado de una funcion

Publicado por Andres Felipe (2 intervenciones) el 20/11/2015 17:02:23
Hola a todos. Tengo un problema bastante estresante que encuentro sin sentido que ocurra. Estoy calculando el determinante de una matriz por el teorema de Laplace, solo por mencionar lo que hace el código porque en realidad puede ser cualquier función. El código funciona bien cuando escribo dentro del for de la función "fun_det_Laplace" cout<<"cualquier cosa"... pero si quito esta instrucción, la función arroja otro valor(incorrecto)...esto no debe suceder ya que esa instrucción no afecta ninguna operación...solo es imprimir un texto en pantalla. A continuación les dejo el código para que quien desee pueda hacer la prueba en su computador (el resultado del determinante debe ser -42). Soy nuevo en la programación con C++, pero he programado en otros lenguaje y hasta ahora no me había sucedido algo tan ilógico como esto... Espero contar con alguna ayuda. Gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <cmath>//biblioteca matematica
 
using namespace std;
 
template <typename T,typename D>
T fun_det_Laplace (T** &matriz, const D &n, bool* &col, const D &Ncol)
{
	D i;
	if(Ncol == 1)// Si la matriz es de (1x1), el determinante es él mismo.
	{
		for(i == 0; i < n; i++){
			if(col[i])
				return matriz[n-1][i];
		}
	}
	else
	{
		T det = 0.0;
		D j, Ncol2, col_ok = 0;
		bool* col2 = new bool[n];
		for(i == 0; i < n; i++){
			if(col[i]){
				for(j = 0; j < n; j++)
					col2[j] = col[j];
				col2[i] = false;
				Ncol2 = Ncol - 1;
				det += pow(-1,col_ok)*matriz[n-Ncol][i]*fun_det_Laplace(matriz, n, col2, Ncol2);//RECURSIVIDAD
				//cout<<"Hola mundo"<<endl;// ¡¡¡ QUITEN EL COMENTARIO Y EL RESULTADO SERÁ DIFERENTE !!!
				col_ok += 1;
			}
		}
		delete[] col2;
		return det;
	}
}
 
int main()
{
	double det;
	unsigned int f = 3,i,j;
	double** datos = new double*[f];
	for(i = 0; i < f; i++)
		datos[i] = new double[f];
 
	datos[0][0] = 15.0;
	datos[0][1] = 2.0;
	datos[0][2] = 3.0;
	datos[1][0] = 4.0;
	datos[1][1] = 5.0;
	datos[1][2] = 6.0;
	datos[2][0] = 7.0;
	datos[2][1] = 8.0;
	datos[2][2] = 9.0;
 
	for(i = 0;i<f;i++){
		for(j = 0; j<f;j++)
			cout<<datos[i][j]<<"	";
		cout<<endl;
	}
 
	bool* col_true = new bool[f];
	for(i = 0; i < f; i++)
		col_true[i] = true;
 
	det = fun_det_Laplace(datos, f,col_true,f);
	cout<<"Determinante: " <<det<<endl;
	delete[] col_true;
 
	for(i=0;i<f;i++)
		delete[] datos[i];
	delete[] datos;
 
	system("pause");
	return 0;
}
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

cout<<"texto" cambia el resultado de una funcion

Publicado por Thanatos (72 intervenciones) el 21/11/2015 05:56:01
Utilizaste el operador relacional ==, en lugar del operador de asignación, al inicializar los contadores de las sentencias for en las líneas 12 y 22 de tu código.
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

cout<<"texto" cambia el resultado de una funcion

Publicado por Andres Felipe (2 intervenciones) el 21/11/2015 20:27:42
Realmente muchas gracias, problemas resuelto. El compilador no me aviso y en tiempo de ejecución todo parecía estar bien. Muchas gracias !!
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