
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


0