Download Práctica 5: Ficheros Secuenciales

Document related concepts
Transcript
Prácticas de Programación Pascal
Práctica 5:
Ficheros Secuenciales
Objetivos de la práctica
El objetivo de esta práctica es comprender las peculiaridades de este tipo de estructuras de datos,
aprendiendo a utilizarlas de forma adecuada y eficiente. Para ello será preciso dominar la notación y la
semántica de sus operadores en PASCAL. Se hace un énfasis especial en una clase particular de
ficheros secuenciales: los ficheros de texto, pues constituyen una de las estructuras de datos más
utilizadas en programación. La realización de estos ejercicios servirá, además, para repasar los
conceptos aplicados en las prácticas anteriores, especialmente la composición iterativa y el tratamiento
de secuencias.
Para lograr estos objetivos, se recomienda comenzar a practicar con ejercicios muy sencillos (como
algunos de los hechos en clase) y después modificar los ejercicios hechos en la práctica anterior
para usar ficheros en vez del teclado y la pantalla. En alguno de los ejercicios propuestos puede ser
conveniente/necesario el uso de estructuras de datos de tipo vector y/o registro. Si todavía no has
aprendido a utilizar estas estructuras, puedes dejarlos para más adelante.
Ejercicios básicos
1) Escriba un programa PASCAL que lea los números reales que hay en el fichero de texto
’numeros.txt’ y los almacene en el fichero secuencial de reales ’numeros.dat’. Para comprobar
que funciona el programa, construya otro programa PASCAL que muestre por pantalla los números
almacenados en el fichero ’numeros.dat’. Para que la información sea más legible, deberán
mostrarse, mientras sea posible, 6 números en cada línea.
2) Escriba un programa que, dado un valor para la variable x, evalúe la función polinómica de la
forma: f(x) = anxn+ an-1xn-1+ ··· + a0 , cuyos coeficientes (an, an-1,···, a0) están almacenados
en un fichero secuencial de reales. Tanto el valor de x, como el nombre del fichero con los
coeficientes se suministrarán de forma interactiva.
Nota: utilice el programa desarrollado en el ejercicio anterior (o uno similar) para crear el fichero
secuencial de reales con los coeficientes del polinomio.
Ejercicios principales
3) Escriba un programa PASCAL denominado 'informe.p', que analice el fichero de texto, cuyo
nombre se especifica interactivamente, y muestre por pantalla la siguiente información:
a) para cada línea del fichero:
• El número total de caracteres y de palabras, y la longitud media de una palabra.
• La letra con que termina la primera palabra y el número de palabras que terminan con esa letra.
b) para el fichero completo:
• el número total de caracteres, palabras y líneas del fichero, y la longitud media de una palabra.
• el número de la línea en la que hay más palabras, junto con el número de palabras en esa línea.
Depto. Informática e Ingeniería de Sistemas
pag. 32
Prácticas de Programación Pascal
• el número de la línea en la que hay más palabras que acaban como la primera, junto con el
número de dichas palabras.
Para ello, se diseñarán dos procedimientos (adecuadamente parametrizados): uno para procesar una
línea del fichero de texto, y otro para procesar una palabra.
Nota: Se tomará como palabra cualquier secuencia de caracteres formada exclusivamente por
letras y/o números que están en la misma línea.
Contenido del fichero ‘texto.txt’
la casa de Sara
es un poco más grande que la mía.
merlin$ informe
nombre del fichero ? texto.txt
linea tot.car. tot.Palabras
long.media term.1ªPal.
igualTermin.
1
16
4
3.000
a
2
2
33
8
3.125
s
1
total: 2 líneas, 49 caracteres y 12 palabras. Long. media palabra = 3.083
Linea con más palabras: la nº 2 con 8 palabras
La línea nº 1 tiene el mayor nº de palabras que terminan como la primera: 2.
4) En la resolución de diversos problemas de ingeniería se utilizan matrices cuasivacías, que son
aquellas que contienen un pequeño número de elementos no nulos. Un modo muy simple de
describirlas, de forma condensada, consiste en indicar sus dimensiones y, a continuación, todos los
valores no nulos junto con su posición relativa. Para numerar las posiciones, supondremos que se
comienza en el primer elemento (1,1) y se recorre la matriz por filas (véase la Fig. 1). Para
almacenar de forma permanente la matriz se puede utilizar un fichero de texto.
fichero
3.6
0
0
0
0
0
0
0
0
0
0
6.7
0
0
0
0
0 -3.0
0
0
4
1
15
18
5
3.6
-3.0
6.7
significado
matriz de 4 filas y 5 columnas
en posición 1 (fila 1, columna 1) valor 3.6
en posición 15 (fila 3, columna 4) valor –3.0
en posición 18 (fila 4, columna 3) valor 6.7
Fig.1 matriz de números reales de 4×5 y su representación de forma condensada en un fichero de texto
Se pide desarrollar en PASCAL los siguientes procedimientos (previamente se realizarán todas las
declaraciones de los tipos de datos que sean necesarias).
procedure SumarMatricesFtxt(var f1, f2, fSuma: tpMatrizFtxt);
{ devuelve en fSuma la suma de las matrices (de igual dimensión)
fichero
almacenadas, de forma condensada, en los ficheros de texto f1 y
matriz 1
4
5
f2. Los elementos están ordenados por posición }
procedure MostrarMatrizFtxt(var f: tpMatrizFtxt);
{ muestra en pantalla (por filas y con el formato habitual) la
matriz almacenada, de forma condensada, en el fichero de
texto f. Los elementos están ordenados por posición }
Depto. Informática e Ingeniería de Sistemas
fichero
matriz 2
4
5
fichero
matriz suma
4
5
1 3.6 + 4 6 = 1 3.6
15 -3.0 15 2.0
4 6.0
18 6.7
18 -6.7
15 -1.0
Fig.2 ejemplo de suma de matrices almacenadas en fichero de texto
pag. 33
Prácticas de Programación Pascal
Ejercicios adicionales (opcionales, aunque muy recomendable su realización)
5) La Organización Nacional de Loterías, con motivo del sorteo
extraordinario de Navidad del 22 de Diciembre de 2003, ha
decido publicar a la finalización del sorteo un fichero
secuencial de enteros, 'sorteo.dat', con todos los
números premiados que han sido extraídos del bombo y el
importe del premio correspondiente a cada peseta jugada.
Es decir, este fichero tendrá los números correspondientes a:
•
•
•
•
•
•
un primer premio de 300.000.000 de pesetas (10.000 ptas. por pta. jugada)
un segundo premio de 144.000.000 de pesetas (4.800 ptas. por pta. jugada )
un tercer premio de 72.000.000 de pesetas (2.400 ptas. por pta. jugada)
dos cuartos premios de 30.000.000 de pesetas (1.000 ptas. por pta. jugada)
cuatro quintos premios de 7.200.000 pesetas (240 ptas. por pta. jugada), y los
1.531 números premiados con 150.000 pesetas (5 ptas. por pta. jugada).
A continuación se muestra el fichero secuencial de enteros, 'sorteo.dat', donde se han escrito
secuencialmente el número extraído del bombo y el premio por peseta jugada.
<nº 1er premio> 10.000 <nº 2º premio> 4.800 <nº 3er premio> 2.400 <1er nº 4º premio> 1.000
<2ºnº 4º premio> 1.000 <1er nº 5º premio> 240 <2º nº 5º premio> 240 <3er nº 5º premio> 240
<4ºnº 5º premio> 240 <1er nº de premio 150.000> 5 <2º nº de premio 150.000> 5 ...
<último nº de premio 150.000> 5
Se pide escribir un programa en Pascal que pregunte el número de una participación de lotería y la
cantidad jugada, y nos informe del premio que se ha obtenido, tanto en euros como en pesetas.
Es importante señalar que, adicionalmente a los números extraídos del bombo, también se
premian (de forma acumulativa):
• los números anteriores y posteriores al primer premio (100 ptas. por pta. jugada)
• los números anteriores y posteriores al segundo premio (60 ptas. por pta. jugada)
• los números anteriores y posteriores al tercer premio (48 ptas. por pta. jugada)
• el resto de los números pertenecientes a la centena del primero, segundo y tercer premio,
excepto para el propio premio, (5 ptas. por pta. jugada)
• los números cuyas 2 últimas cifras coinciden con las del primer premio, segundo y tercer
premio, excepto para el propio premio, (5 ptas. por pta. jugada)
• reintegro para los números cuya última cifra coincide con la del primer premio, excepto él
mismo.
Para probar el programa se facilita un fichero de prueba similar al que se facilitaría el día del sorteo:
/users2/PROGRAMACION/pascal/practicas/sorteo.dat
Comprueba que los resultados que proporciona tu programa coinciden con los del fichero de
ejemplo: /users2/PROGRAMACION/pascal/practicas/ejemplos.txt
6) Escribe un programa PASCAL que genere el fichero de enteros 'sorteo.dat' del ejercicio
anterior, a partir del fichero de texto 'sorteo.txt' que hay en el mismo directorio. El formato de
dicho fichero de texto es el siguiente:
• para cada importe de premio diferente figuran la cantidad de números agraciados con ese
premio, el importe del premio y, a continuación, la lista de números correspondiente.
• Todos los números pueden estar separados por cualquier nº de espacios y/o saltos de línea.
• Los premios están ordenados por orden de mayor a menor cuantía.
Depto. Informática e Ingeniería de Sistemas
pag. 34