[ Foro de Pascal ]

no me sale

28-Jan-2014 23:14
Invitado (eduardo95)
7 Respuestas

hola queria preguntarles en donde esta mi error por que no lo logro ver y llevo tiempo revizando y no veo el porque de este bendito programa que hice y no veo el porque del siguiente error:
error 106: invalid numeric format, el error sale en ejecucion por que el programa compila ok, y el error lo muestra en la linea que en el codigo esta con ***************
el programa es el siguiente:

 
PROGRAM ejercicioClase;
uses crt;
 
type  tpCad = string[100]; 
      tpRecord = record     
               refer:   integer;  
               entidad:  tpCad; 
               naccs: integer;  
               coste: real;      
               fecha: integer; 
             end; 
 
 
 
procedure  posible(var arche: text; ref: integer; cotiz: real;
                                 var tAcc: integer; var ben: real);
var p:  tpRecord;
         cTot: real;
 
begin
   tAcc := 0;     cTot := 0;
 
  while not  eof(arche) do
    with p do
	 begin
          read(arche,ref,entidad,naccs,coste,fecha);  ****************
          if refer = ref then 
             begin
               tAcc := tAcc + naccs;
              cTot := cTot + coste;
          end;
    end;
  ben := tAcc * cotiz - cTot
end;
 
var  ref, tAccs: integer;
     cotiz, ben: real;
     arche:text;
 
 
begin   
   clrscr;
  assign(arche,'datos.txt');
  reset(arche);
  write('Introduzca la referencia y su cotizacion: ');
  read(ref, cotiz);
  posible(arche, ref, cotiz, tAccs, ben);
  writeln; writeln; write('total : ', tAccs:6);
  writeln(' ':9, 'posibilidadle: ', ben:9:2);
  close(arche);
 readln
end.
 


espero cualquier ayuda, y agrdezco este foro.


28-Jan-2014 23:37
Nacho Cabanes (+31)

¿Por qué lees de un archivo de texto con "read"? Lo habitual es leer con "readLn", porque cada línea terminará con un avance de línea, y tendrás que respetar el formato exacto de cada línea del fichero original.

De hecho, también estás usando "read" para leer de teclado (lo que también es otra fuente de problemas), justo antes de llamar al procedimiento "posible".

Aun así, sin ver cómo es el fichero de texto no te puedo dar más detalles.


28-Jan-2014 23:41
Luis Torres (+12)

Está bien la explicación que das sobre el error y en qué parte del programa se encuentra, pero deberías explicar en palabras lo que hace tu programa.
Por favor, coloca las líneas que están escritas en el archivo de texto.
Saludos.


29-Jan-2014 17:25
Invitado (eduardo95)

hola, gracias por responder.
el archivo de texto es:
658 entidad1 200 1390.12 20081117
82 entidad21250 3550.00 20090305
658 entidad3 50 2280.00 20080305
215 entidad4 378 5261.76 19990708

profesor, cambie y probe con lo que me sugeriste del read por el readln en ambos casos que me indicaste pero aun sigue saliendome el error inicial planteado, ademas es curioso algo que note al hacer pruebas, cuando ejecuto y digito porejemplo 658 23.24 el error es el mismo claro y sale en la linea que indicaba con *****. pero si digito porejemplo 658 23,24 el error es el mismo pero ahora sale en la linea:
...
 read(ref, cotiz);

cualquier ayuda para resolver el porque no me sale o me da ese error quedo inmensamente agradecido.

por otra parte profesor o compañero luis que gentilmente acudieron a mi consulta , queria preguntarles si es posible subir un par de ejercicios de pruebas de maraton de programacion en la que mi facultad me permite preparme, es que es de robots en matrices y movimientos complicados por que dichas matrices tienen obstaculos para el robot,la cuestion es a donde puedo escribirles por que el archivo es algo extenso por las imagenes y creo que la capacidad de subida en el foro es muy reducida, espero indicaciones, sino mil gracias por la atencion a mi cuestion.


29-Jan-2014 18:54
Invitado (eduardo95)

profesor sigo haciendo seguimiento a traves de pruebas y no se corrigeme y como seria entonces, es que creo por lo que veo es que el problema puede estar en la asignacion:
while not  eof(arche) do
   with p do
begin
         read(arche,ref,entidad,naccs,coste,fecha);  
 ****        if refer = ref then  ***
te lo pregunto por que si hago porejemplo:
while not  eof(arche) do
   with p do
begin
         read(arche,ref,entidad,naccs,coste,fecha);  
         write('archivo encontrado');
         if refer = ref then

hasta ahi me hace bien las cosas y luego es como si no entrara en el if, puede ser que esa asignacion que yo hago este incorrecta, no lo se ojala puedas ayudarme.gracias


29-Jan-2014 19:02
Invitado (eduardo95)

o es que no me esta leyendo el archivo arche?
yo lo tengo en : 'C:\TP\EXAMPLES\datos.txt'

asi que en el programa yo pongo:
assign(arche, 'C:\TP\EXAMPLES\acciones.txt');

o es que esa ubicacion del archivo no es correcta ? disculpa tantos interrogantes pero lo shago para intentar tambien ayudar en lo que yo estoy haciendo en mis pruebas y que es lo que intuyo segun los resultados que resultan, de hecho el error inicial ya no me aparece, pero los resultados es como si no me leyera el archivo.


29-Jan-2014 23:11
Invitado (eduardo95)

hola profesor, ya lo solucione muchas gracias por su ayuda el problema efectivamente esta en el read , sobre todo en el de la lectura de datos ahi lo cambie y todo funciono ok.hasta la proxima, si me gustaria me indicaras lo que te dije de los ejercicios de preparacion que estoy realizando para maratones en mi facultad , si es posible me lo haces saber gracias.


30-Jan-2014 16:33
Nacho Cabanes (+31)

Por una parte, me alegro de que te haya funcionado lo del ReadLn. La forma más sencilla de leer los datos desde teclado es uno a uno, usando ReadLn en vez de Read, y desde fichero de texto es con un dato en cada línea, también usando ReadLn.

Si no tienes más remedio que leer varios en una misma línea que estén separados por espacios, puedes emplear un ReadLn que lea todos ellos a la vez o bien varios Read y finalmente un ReadLn para el último dato.

En cuanto a los ejercicios de programación, te podré/podremos ayudar desde este foro con dudas puntuales, pero dudo que yo ni los seguidores del foro podamos analizar todo un programa complejo para ayudarte con él.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)