Programación General > Pascal

 Problema con array

(1/2) > >>

Juan Ramon:
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:
¡Bienvenido al foro Juan Ramon!


--- Cita de: "Juan Ramon" ---que Lea los datos del fichero 'valores.txt'
--- Fin de la cita ---
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
--- Fin de la cita ---
¿Puedes poner la declaración de tipo de los arrays dinámicos?

Salud

Juan Ramon:
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:
Por favor, utiliza las etiquetas de código.


--- Código: Pascal ---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; 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 ---Procedure LeeValores(fich:text; var v1:vector; var v2:vector);var     contador:integer; begin    contador:=0;    while not eoln(fich) do    begin        read(fich,v1[contador]);        read(fich,v2[contador]);        contador:=contador+1;    end;    readln(fich);end; 

Juan Ramon:
Si lo hago como dices me sale un error. Error:File tipes must be var parameters. ¿Por qué?

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa