
triple punteros
Publicado por Jesus (4 intervenciones) el 17/09/2017 17:39:45
Buenos días.
Mi duda es la siguiente:
Quiero pasar una matriz tipo float, a una función por referencia. Dicha función llenará la matriz desde un archivo de texto suministrado por el usuario. Tanto el código como el archivo de prueba, se muestra abajo.
El código compila correctamente (estoy usando gcc), no obstante, cuando hago las pruebas, no trabaja.
Agradezco mucho si alguien puede explicarme las razones de este mal funcionamiento.
Atentamente,
Jesús David
----------------------------------------------------------
-------------------Código fuente----------------------
--------------------------------------------------
--------------------------------------------------
-------------prueba.txt------------------------
Mi duda es la siguiente:
Quiero pasar una matriz tipo float, a una función por referencia. Dicha función llenará la matriz desde un archivo de texto suministrado por el usuario. Tanto el código como el archivo de prueba, se muestra abajo.
El código compila correctamente (estoy usando gcc), no obstante, cuando hago las pruebas, no trabaja.
Agradezco mucho si alguien puede explicarme las razones de este mal funcionamiento.
Atentamente,
Jesús David
----------------------------------------------------------
-------------------Código fuente----------------------
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void LeerDatos(char stNombre[30], long *iDeep, long *iConst, long *iGen, int *iNivel, float ***dAb);
int main (void)
{
char stNombre[30], stLine[300];
long iDeep,iConst,iGen,i,j;
int iNivel;
float **dAb;
printf("Introduzca el nombre del archivo: \n");
scanf("%s",stNombre);
LeerDatos(stNombre, &iDeep, &iConst, &iGen, &iNivel, &dAb);
printf("iDeep: %ld, iConst: %ld, iGen: %ld, iNivel: %d",iDeep,iConst,iGen,iNivel);
for (i=0;i<iConst;i++)
{
for (j=0;j<(iGen)+1;j++)
{
printf("%1f ",dAb[i][j]);
}
printf("\n");
}
return 0;
}
void LeerDatos(char stNombre[30], long *iDeep, long *iConst, long *iGen, int *iNivel, float ***dAb)
{
FILE *fp;
long i,j;
float dTmp;
char stTmp[40];
fp = fopen (stNombre, "r");
if (fp==NULL)
{
fputs ("File error",stderr);
exit (1);
}
fscanf(fp,"%ld",iDeep);
fgets(stTmp,40,fp); // Lectura temporal
fscanf(fp,"%ld",iConst);
fgets(stTmp,40,fp); // Lectura temporal
fscanf(fp,"%ld",iGen);
fgets(stTmp,40,fp); // Lectura temporal
fscanf(fp,"%d",iNivel);
fgets(stTmp,40,fp); // Lectura temporal
*dAb=(float **) malloc(*iConst*sizeof(float *));
for (i=1;i<*iConst;i++) *dAb[i]=malloc(((*iGen)+1)*sizeof(float));
/* -> Llenado de la matriz */
for (i=0;i<*iConst;i++)
{
for (j=0;j<(*iGen)+1;j++)
{
fscanf(fp,"%1f",&dTmp);
*dAb[i][j]=dTmp;
}
printf("\n");
}
fclose (fp);
}
--------------------------------------------------
-------------prueba.txt------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
600000 Densidad Grid Integración
17 Número de restricciones
7 Número de generadores
2 Niveles
1 2 0 0 0 0 0 1000
-1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 150
0 -1 0 0 0 0 0 0
0 0 1 0 0 0 0 324
0 0 -1 0 0 0 0 0
0 0 0 1 0 0 0 1250
0 0 0 -1 0 0 0 0
0 0 0 0 1 0 0 396
0 0 0 0 -1 0 0 0
0 0 0 0 0 1 0 276
0 0 0 0 0 -1 0 0
0 0 0 0 0 0 1 224
0 0 0 0 0 0 -1 0
-0.012903 -0.078602 -0.031037 -0.022796 -0.005934 -0.03496 0.017291 -5.55323109732788
-0.024644 -0.039737 -0.030382 -0.026945 -0.014107 -0.030527 0.012554 -11.995211073984
-0.064922 -0.081875 -0.052525 -0.069701 -0.01974 -0.055846 0.085246 -98.410734867
Valora esta pregunta


0