[ Foro de Pascal ]

datos.txt

07-Jun-2011 15:11
oscar gomez
7 Respuestas

este es el arcivo  previamente creado


07-Jun-2011 15:12
oscar gomez

Cordial saludo profesor Nacho y Antonio.
en el siguiente programa que he realizado me da el error que indico en el asunto, en la linea de codigo que indicare en texto rojo:

el archivo previamente creado datos.txt que esta en c:\ es:

pedro      3.4     3.6
javier     4.2     3.8
jaime      3.6     2.8
marina     2.3     2.9

lo adjunto dats.txt, asi como mi codigo .pas para mayor claridad.

por favor pido como siempre su valiosa ayuda para encontrar donde estara el error.Agradeciendo inmensamente su gran vocacion de enseñar, la que realmente es admirable. Gracias


07-Jun-2011 15:16
oscar gomez

muestro  la linea donde se marca dicho error , con asteriscos.


07-Jun-2011 17:23
Antonio P.G.

Hola Óscar.

Este programa no tiene mala pinta :-).

Una aclaración: no leas en una misma línea de texto un string con otro tipo de dato (en este caso, númerico). Si no, no te funcionará. Mejor es:
-----------------------
Nombre1
Nota1 Nota2
Nombre2
Nota1 Nota2
...
-----------------------

Prueba así (tendrás que cambiar algunos "readln" y tal), a ver si te funciona.

Por cierto, creo que dices al revés justo después de la cabecera del procedimiento de lectura, lo que haces en dicho procedimiento ;-).

¡Ciao!


08-Jun-2011 15:17
oscar gomez

Cordial saludo Antonio.
Gracias por tus valiosas y siempre oportunas respuestas.

Respecto al programa en cuestion dejame decirte que he corregido lo que me sugeriste y ya el error "error 106. Invalid numeric format" se ha resuelto, sin embargo dado porejemplo el archivo de entrada datos.txt :

mario      3.5   3.9
jose       4.2   3.7
pedro      2.9   3.3


en el archivo de salida, se muestra lo siguiente:

result.txt :

Los alumnos cuyas notas se han leido son los siguientes:

mario    
jose      
pedro    

La nota maxima en matematicas es: 4.20 obtenida por el alumno: jose      
y la nota media en informatica es: 3.63


COMO VEIS LOS RESULTADOS SON CORRECTOS, PERO QUIERO QUE SE ME VISUALICEN TAMBIEN LAS RESPECTIVAS NOTAS DE los estudiantes, que debo hacer en el procedimiento escribe_resultados , para poder alcanzar dicho objetivo???


es decir quiero que en el archivo de salida saliera:


Los alumnos cuyas notas se han leido son los siguientes:

mario      3.5   3.9
jose       4.2   3.7
pedro      2.9   3.3

La nota maxima en matematicas es: 4.20 obtenida por el alumno: jose      
y la nota media en informatica es: 3.63 .




respecto a lo que me dices"Una aclaración: no leas en una misma línea de texto un string con otro tipo de dato (en este caso, númerico). Si no, no te funcionará. Mejor es:
-----------------------
Nombre1
Nota1 Nota2
Nombre2
Nota1 Nota2
...

lo realice como me lo dices y me funciona ok, sin embargo ,tambien lo corregi cambiando la dimension de la variable nombre que tenia como string[15] a string[10] y utlizando la linea de codigo:
readln(fichero,nombres[cuantos],nota_mat,nota_inf), dentro del procedimiento leer_datos y me funciona ok.


respecto a "Por cierto, creo que dices al revés justo después de la cabecera del procedimiento de lectura, lo que haces en dicho procedimiento ;-)." tenias razon como veis en el archivo adjunto ya lo he corregido,gracias por tu observacion.

Ademas corregi algo que me di cuenta en los resultados y tenia que ver con que en el primer archivo adjunto que te envie con el codigo .pas tenia la variable cuantos inicializada a 1 y debia ser 0; en este archivo adjunto tambien lo he corregido y da ok la media de la nota de informatica para los alumnos en cuestion(segunda columna de notas del archivo datos.txt

por tu ayuda mil gracias, se que me falta poco para alcanzar mis objetivos en este ajercicio y tu ayuda junto con la del profesor Nacho me sera oportuna y valiosa como siempre. gracias


08-Jun-2011 17:20
Antonio P.G.

Hola,

Buena observación lo de los strings. Lo cierto es que lo pensé, pero no creía que funcionase.

Para lo de imprimir las notas en el archivo de salida, necesitas tenerlas. Aquí se puede hacer de todo. Podrías almacenar las de informática en un vector y las de mates en otro. Aunque estos vectores tendrás que pasarlos a los procedimientos, y tal.

Por cierto, una importante recomendación: utiliza la menor cantidad posible de variables globales. Dado que has apostado por la modularidad (al crear subprogramas), intenta escribir las variables justo antes de programa principal. Evitarás errores en grandes programas.

¡Buen programa!


08-Jun-2011 18:29
oscar gomez

Hola Antonio , gracias por tu ayuda, he hecho lo que me aconsejaste y ya me funciona completamente ok, sin embargo queria preguntarte me explicaras un poco mejor lo que dices al respecto de " intenta escribir las variables justo antes de programa principal. Evitarás errores en grandes programas.

es que la verdad me confundi un poco por que si escribo las variables justo antes de programa principal no estariamos hablando de variables globales que es lo que me recomiendas utilizar la menor cantidad posible de variables globales???? mil gracias por tu orientacion y estoy muy contento por que siento que he progresado mucho y debo daros las gracias a ti y al profesor Nacho que siempre estan ahi orientandonos y ayudandonos tanto, mil gracias por vuestro tiempo.


09-Jun-2011 10:34
Nacho Cabanes (+30)

Cunado Antonio dice "intenta escribir las variables justo antes de programa principal. Evitarás errores en grandes programas.", imagino que falta alguna palabra por ahí.  ;-)

Supongo que se refiere a "intenta escribir las variables JUSTO ANTES DE USARLAS EN EL programa principal". Generalmente se recomienda que las variables sean "tan locales como sea posible": si una variable "i" se usa como contador en una función o en un procedimiento, que se declare sólo dentro de ese procedimiento, y no sea una variable local, y la misma idea se aplica incluso al cuerpo del programa. Eso te evita que modifiques por error variables que se usan (con otro significado) en otros bloques del programa.






(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.)