Pascal/Turbo Pascal - DUDA

 
Vista:

DUDA

Publicado por zoisa (6 intervenciones) el 19/12/2009 02:09:50
tengo una pequeña duda:

tengo el siguiente codigo realizado(pertenece a una unidad) y esta pues en la zona implementation ( vamos en la zona interface esta la cabecera del procedure y luego en implementation pues su desarrollo, como se hace vaya):

procedure leermatriz(a:matriz);
var f:text;
s:string;
begin
write('Introduzca el nombre del archivo de donde desea leer la matriz: ');
read(s);
assign(f,s);
reset(f);
for i:=1 to n do
for j:=1 to n do
read(f,a[i,j]);
close(f);
end;

el tipo matriz esta declarado antes obviamente y se trata de un array para matrices 3x3!y tambien las variables i,j:word estan declaradas en interface

pero al ejecutar este procedure en un nuevo programa y visualizarlo me visualiza la matriz nula, es como si no la leyese del archivo!

que esta mal?

saludos!
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

RE:DUDA

Publicado por Diego Romero (996 intervenciones) el 19/12/2009 02:57:08
Primero, si f es de tipo text tienes que usar ReadLn() para leer un archivo así. Segundo ¿cómo es la declaración de matriz?, ¿es una matriz de strings?.
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

RE:DUDA

Publicado por zoisa (6 intervenciones) el 19/12/2009 14:10:54
pero read tb se puede usar con tipo text no? no es de reales, pero me han explicado que aunque en el archivo text se guarden como string digamos que los transforma en numeros!

quizas estoy equivocado!

saludos!
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

RE:DUDA

Publicado por Diego Romero (996 intervenciones) el 20/12/2009 00:05:01
Estás equivocado. Si en un archivo tipo text hay strings, seguirán siendo strings para el programa que los lee. Si haces algo como esto:

var
f: text;
a: integer;
...
begin
...
ReadLn(f,a);
...

Conteniendo f algo como esto:

1

En a no tendrás el valor 1. Sino que obtendrás basura. Porque pascal interpreta ese 1, que es un string, como una cadena de bits interpretada como integer. La conversión de un número representado como un string a un número de tipo integer o real corre por cuenta del programador.

En el caso anterior lo correcto es hacer esto:

var
f: text;
a,c: integer;
s: string;
...
begin
...
ReadLn(f,s); { leo una línea del archivo como string }
val(s,a,c); { convierto a integer }
if (c = 0) then writeln('El número leido es: ',a)
else writeln(a', no es un número.');
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

RE:DUDA

Publicado por zoisa (6 intervenciones) el 20/12/2009 00:41:07
haber no tengo ni zorra de programar, pero te puedo asegurar que si que funciona normal, osea si tu creas un archivo con el bloc de notas que tenga solo numeros y haces esto:

var f:text;
var a,b:real;
...
begin
assig(f,'datos.txt');
reset(f);
read(f,a); (con read me funciona y con readln, con ambas)
writeln(a);
read(f,b);
writeln(b);
end.

si tu haces eso por pantalla te salen los 2 numeros bien, como reales y te sale expresados pues como se expresan, con muchos ceros y con e+00, pero el numero lo lee bien siempre que el archivo sea solo de numeros y siempre que estos esten separados por un espacio o por una marca de esas de salto de linea. entonces es ahi donde esta mi duda, si funciona bien porque yo lo he probado y si lees 40 veces te da los 40 numeros que tengo el archivo, porque no se almacenan bien en mi matriz! ya se que si el archivo tiene caracteres dara error, pero hay que suponer que el archivo solo tiene numeros correctamente separados unos de otros! haber si puedes decirme porque no funciona con la matriz!

saludos!
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

RE:DUDA

Publicado por zoisa (6 intervenciones) el 20/12/2009 00:48:21
a no perdon, con readln solo lee bien el primero, pero con read lee todos los numeros del archivo hasta que sale error porque llega hasta el final del archivo, pero los lee bien todos!

saludos!
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

RE:DUDA

Publicado por zoisa (6 intervenciones) el 20/12/2009 13:22:47
nada pero con la matriz no hay forma de guardar los datos, algo estara mal en eso porque si que se puede leer como yo lo hago pero no entiendo porque no va en la matriz, siempre muestra ceros, que cosa mas rara!
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

RE:DUDA

Publicado por edwin (71 intervenciones) el 22/12/2009 18:13:54
procedure leermatriz(a:matriz);
intenta esto
procedure leermatriz(var a:matriz);
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

RE:DUDA

Publicado por zoisa (6 intervenciones) el 23/12/2009 21:16:48
si si ese era el fallo, me di cuenta solo al final!jaja me volvi loco hasta que me di cuenta!
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