• Sábado 21 de Diciembre de 2024, 15:15

Autor Tema:  Problema con array  (Leído 2492 veces)

Juan Ramon

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Problema con array
« en: Jueves 29 de Enero de 2009, 01:04 »
0
Como puedo leer de un archivo de texto y guardar cada linea en dos array de diferente tamaño.

Son array dinamicos y la funcion para calcular los elementos de cada array seria asi:

Function numero_valores_linea(var fich: text):integer;
(*Funcion que devuelve el numero de elementos de una linea*)

  Var

        contador:integer;
       aux:integer;
  begin
        contador:=0;

        while not eoln(fich) do
        begin
                read(fich,aux); //sino se pone na no lee hay k asignarle var aunk no la guardemos
                contador:=contador+1;

        end;

        readln(fich); //indica el salto de linea
        numero_valores_linea :=contador;
  end;

Pero ahora tengo que hacer un procedimiento

que Lea los datos del fichero 'valores.txt', y almacene la primera línea leida en el array dinámico VALORES_X y la segunda línea del fichero en el array dinámico VALORES_Y.

Este procedimiento no me sale ¿alguien sabe como sería?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema con array
« Respuesta #1 en: Jueves 29 de Enero de 2009, 08:36 »
0
¡Bienvenido al foro Juan Ramon!

Cita de: "Juan Ramon"
que Lea los datos del fichero 'valores.txt'
Esto supongo que te resultará fácil puesto que ya lo haces en esta función con ReadLn().

Cita de: "Juan Ramon"
almacene la primera línea leida en el array dinámico VALORES_X y la segunda línea del fichero en el array dinámico VALORES_Y
¿Puedes poner la declaración de tipo de los arrays dinámicos?

Salud

Juan Ramon

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problema con array
« Respuesta #2 en: Viernes 30 de Enero de 2009, 11:40 »
0
Tengo que hacer un programa que me lea de un archivo de texto y guarde cada linea en un array dinamico.
Este es mi código:

Program lee_array;
Uses crt;

TYPE

        vector= array of integer;

Var

        x:vector;
        y:vector;
        fichero:text;
        numero_elementos_x,numero_elementos_y,i:integer;

Function numero_valores_linea(var fich: text):integer;
(*Funcion que devuelve el numero de elementos de una linea*)

  Var

        contador:integer;
       aux:integer;
  begin
        contador:=0;

        while not eoln(fich) do
        begin
                read(fich,aux); //sino se pone na no lee hay k asignarle var aunk no la guardemos
                contador:=contador+1;

        end;

        readln(fich); //indica el salto de linea
        numero_valores_linea :=contador;
  end;



Procedure LeeValores(var fich:text; v1:vector;v2:vector);
var

      contador:integer;

begin

            contador:=0;
            while not eoln(fich) do
            begin
                read(fich,v1[contador],v2[contador]);
                contador:=contador+1;

            end;
              readln(fich);



end;


Begin
clrscr;
       assign(fichero,'valores.txt');
        reset(fichero);
         //cuenta el numero de elementos del array x
        numero_elementos_x:=numero_valores_linea(fichero);
        //cuenta el numero de elementos del array y
        numero_elementos_y:=numero_valores_linea(fichero);
     
          SetLength(x,numero_elementos_x);
        SetLength(y,numero_elementos_y);
         
          LeeValores(fichero,x,y);
         close(fichero);
             writeln('El array x tiene ',numero_elementos_x,' elementos');
        writeln('El array y tiene ',numero_elementos_y,' elementos');


                  For i:=low(x) to high(x) do
                   write(x);
                       writeln;
                    For i:=low(y) to high(y) do
                   writeln(y);

        Repeat until keypressed;
End.

Cuando hago el bucle for para que me muestre en pantalla el contenido de los array me sale todo cero.
Lo que esta mal es el procedimiento LeeValores ¿Podrían ayudarme?
Gracias

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema con array
« Respuesta #3 en: Viernes 30 de Enero de 2009, 13:09 »
0
Por favor, utiliza las etiquetas de código.

Código: Pascal
  1. Procedure LeeValores(var fich:text; v1:vector;v2:vector);
  2. var
  3.     contador:integer
  4. begin
  5.     contador:=0;
  6.     while not eoln(fich) do
  7.     begin
  8.         read(fich,v1[contador],v2[contador]);
  9.         contador:=contador+1;
  10.     end;
  11.     readln(fich);
  12. end;
  13.  
Tu problema radica en el mal uso de var. Cuando un parámetro lleva var (VARiable), es cuando se pasa por referencia, y cuando no, por valor. Esto es un poco confuso en Pascal, la verdad.

Código: Pascal
  1. Procedure LeeValores(fich:text; var v1:vector; var v2:vector);
  2. var
  3.     contador:integer;
  4. begin
  5.     contador:=0;
  6.     while not eoln(fich) do
  7.     begin
  8.         read(fich,v1[contador]);
  9.         read(fich,v2[contador]);
  10.         contador:=contador+1;
  11.     end;
  12.     readln(fich);
  13. end;
  14.  

Juan Ramon

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problema con array
« Respuesta #4 en: Viernes 30 de Enero de 2009, 17:32 »
0
Si lo hago como dices me sale un error. Error:File tipes must be var parameters. ¿Por qué?

Juan Ramon

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problema con array
« Respuesta #5 en: Viernes 30 de Enero de 2009, 19:04 »
0
Creo tambien hay que pasar por variable fich.
Ahora el problema esta en el programa principal creo k no lo lee bien por el puntero del archivo k no se situa donte tiene que estar. ¿Como seria?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema con array
« Respuesta #6 en: Sábado 31 de Enero de 2009, 15:41 »
0
Cita de: "Juan Ramon"
Creo tambien hay que pasar por variable fich.
Sí, disculpa el despiste  ^_^

Cita de: "Juan Ramon"
creo k no lo lee bien por el puntero del archivo k no se situa donte tiene que estar
Fíjate que llamas a esta función 2 veces antes de Lee_Valores():

Código: Pascal
  1. Function numero_valores_linea(var fich: text):integer;
  2. (*Funcion que devuelve el numero de elementos de una linea*)
  3. Var
  4.     contador:integer;
  5.     aux:integer;
  6. begin
  7.     contador:=0;
  8.     while not eoln(fich) do
  9.     begin
  10.         read(fich,aux); //sino se pone na no lee hay k asignarle var aunk no la guardemos
  11.         contador:=contador+1;
  12.     end;
  13.     readln(fich); //indica el salto de linea
  14.     numero_valores_linea :=contador;
  15. end;
  16.  
  17.  
En mi opinión, esta función sobra. Lee_Valores podría hacer ambas cosas... ;)