Sei sulla pagina 1di 5

METODOLOGA DE LA PROGRAMACIN PRACTICA 5

Objetivos Introducir las sentencias de composicin iterativa de Pascal y su equivalencia con las composiciones MIENTRAS, REPETIR e ITERAR vistas en clase de teora junto con algunos ejemplos de su uso. Presentar los paquetes de los que haremos uso para definir y utilizar variables de tipo secuencia. Estudiar la utilizacin de todo lo anterior en programas Pascal resolviendo problemas sencillos de recorrido que manejen secuencias del primer modelo de acceso secuencial.

1. Las instrucciones iterativas en Pascal


E cepto la instruccin ITERAR, las dem!s instrucciones iterativas de la notacin empleada en clase tienen una instruccin equivalente en Pascal. "a tabla de la figura muestra la correspondencia, suponiendo que cond denota una e presin booleana, S, S1 y S2 denotan una secuencia de instrucciones y, e1 y e2 son e presiones cuyo tipo es un subrango de un tipo ordinal. "a sem!ntica de la instruccin ITERAR debe obtenerse a trav#s del uso de las instrucciones while o repeat.
Notacin
MIENTRAS cond HACER S FIN_MIENTRAS REPETIR S HASTA_QUE cond ITERAR S1 DETENER cond S2 FIN_ITERAR while cond do S

Pascal

repeat S until cond No incluida, hay que expresarla ediante iteraciones in!initas while o repeat" con una parada central ediante un brea " while true do be!in S1# i" cond then brea # S2 end o $ien" repeat S1# i" cond then brea # S2 until "al#e

NOTA IMPORTANTE: El uso correcto de brea est! circunscrito e clusivamente a este tipo de iteraciones. $ajo ninguna circunstancia se debe utilizar brea para salir de una iteracin que no sea de este tipo. "o contrario ser! considerado un grave fallo de concepto y sancionado de manera acorde.

Problema 1. %upongamos el problema de la pr!ctica tres, en la que realiz!bamos la codificacin de un car!cter introducido por teclado. &'mo resolvera el problema si en lugar de un car!cter tuviese que codificar una frase(

2. Tipo mquina secuencial en Pascal


En el lenguaje Pascal no se encuentra predefinido el tipo de dato m!quina secuencial, tal como lo hemos estudiado en clase de teora. Para utilizar el tipo de datos Secuencia, tanto del primer como del segundo modelo de acceso secuencial, se han escrito una serie de unidades que debidamente utilizadas permiten usar este tipo de datos con las mismas primitivas de acceso vistas en clase de teora. Estas unidades se pueden descargar desde el entorno %)*+. ,entro de la asignatura- Introduccin a la Programacin, en Contenidos, Zona compartida hay un directorio llamado Paquetes.,e.*aquinas.%ecuenciales.Pascal donde se encuentran estas unidades. ,ependiendo del tipo de datos de la secuencia que se desea manejar debemos utilizar una unidad diferente. Podemos manejar secuencias de enteros, de caracteres y de reales. 'ada archivo se ha nombrado con el prefijo /unitms0 seguido de una letra que indica el tipo de los elementos de la secuencia- 1c2, 1e2 o 1r2, para caracteres, enteros o reales respectivamente, y un 132 o un 142 para indicar el modelo. Por ejemplo, Unitmse2.pas es la unidad para secuencias de enteros del segundo modelo y Unitmsc1.pas es la unidad para secuencias de caracteres del primer modelo. "as primitivas para el manejo de secuencias se nombran igual que en el libro de te to 5EA, %o en&ar, A'an&ar, etc.6 pero con un sufijo que indica el tipo de elemento y el modelo secuencial 5EA(MS%1, EA(MSE2, A'an&ar(MSR2, A'an&ar(MS%2, etc.6. + continuacin mostramos tres ejemplos, uno para cada tipo de secuencia, del uso de estas unidades. Ejemplo 1: El siguiente programa carga el contenido de un archivo de te to cuyo nombre es entrada1.txt en una secuencia de caracteres S. + continuacin copia #sta en otra secuencia de caracteres R, sustituyendo cada car!cter en min7scula por su correspondiente may7scula y graba el contenido final de R, en un archivo de te to cuyo nombre es salida1.txt.
Program secuencias_caracteres_1; Uses Unitmsc1; Const (* Distancia entre los juegos de caracteres maysculas y minsculas: *) Distancia = ord ('A') - ord ('a'); Var S, R : MSC1; c_conv : Char; Begin TratamientoInicial_MSC1 (S);

TratamientoInicial_MSC1 (R); Cargar_Fichero_MSC1 (S, 'entrada1.txt'); Comenzar_MSC1 (S); Arrancar_MSC1 (R); (* Esquema de recorrido del primer modelo *) while EA_MSC1 (S) <> MSC1_MarcaFin do begin if (EA_MSC1 (S) >= 'a') and (EA_MSC1 (S) <= 'z') then c_conv := chr (ord (EA_MSC1 (S)) + Distancia) else c_conv := EA_MSC1 (S); Registrar_MSC1 (R, c_conv); Avanzar_MSC1 (S); end; Marcar_MSC1 (R); Salvar_Fichero_MSC1 (R, 'salida1.txt'); End.

Ejemplo 2: El siguiente programa carga el contenido de un archivo de te to cuyo nombre es entrada2.txt en una secuencia de enteros %. + continuacin escribe por la salida est!ndar el contenido de esta secuencia al mismo tiempo que va registrando en otra secuencia 8 el cuadrado de cada n7mero que aparece en %. 9inalmente graba el contenido de 8 en un archivo de te to cuyo nombre es salida2.txtProgram secuencias_enteros_1; Uses Unitmse1; Var S, R : Mse1; Begin TratamientoInicial_Mse1 (S); TratamientoInicial_Mse1 (R); Cargar_Fichero_Mse1 (S, 'entrada2.txt'); Comenzar_Mse1 (S); Arrancar_Mse1 (R); while EA_Mse1 (S) <> Mse1_MarcaFin do begin Write (EA_Mse1 (S), ', '); Registrar_Mse1 (R, EA_Mse1 (S) * EA_Mse1 (S)); Avanzar_Mse1 (S); end; Marcar_Mse1 (R); Salvar_Fichero_Mse1 (R, 'salida2.txt') end.

Ejemplo 3: El siguiente programa carga el contenido de un archivo de te to, que contiene las notas de un curso, cuyo nombre es entrada3.txt en una secuencia de reales S y muestra por pantalla el n7mero de notas que superan el cinco.

Program secuencias_reales_1; Uses Unitmsr1; Const Aprobado = 5.0;

Var

Begin TratamientoInicial_Msr1 (S); Cargar_Fichero_Msr1 (S, 'entrada3.txt'); Comenzar_Msr1 (S); while EA_Msr1 (s) <> Msr1_MarcaFin do begin if EA_Msr1(s) >= Aprobado then cont:=cont+1; Avanzar_Msr1 (S) end; Write ('El nmero de aprobados es: ', cont) end.

S : Msr1; cont : Integer;

Problema 2: + continuacin se muestran un par de versiones de un mismo programa Pascal, que utilizan una m!quina secuencial de caracteres del primer modelo de acceso secuencialProgram cuenta; uses UnitMsc1; var S : Msc1; cont : Integer; begin TratamientoInicial_MSC1 (S); Cargar_Fichero_Msc1(S,'datos.txt'); Comenzar_Msc1(S); cont := 0; while Ea_Msc1(S)<> Msc1_MarcaFin do begin Write (EA_Msc1 (S), ','); cont := cont + 1; Avanzar_Msc1 (S); end; WriteLn; WriteLn ('Nro. de datos: ', cont) end. Program cuenta; uses UnitMsc1; var S : Msc1; cont : Integer; begin TratamientoInicial_MSC1 (S); Cargar_Fichero_Msc1(S,'datos.txt'); Comenzar_Msc1(S); cont := 0; while Ea_Msc1(S)<> Msc1_MarcaFin do begin Avanzar_Msc1 (S); Write (EA_Msc1 (S), ','); cont := cont + 1; end; WriteLn; WriteLn ('Nro. de datos: ', cont) end.

&:u# esquema algortmico se est! tratando de utilizar(

&'u!l de los dos es el correcto( &Por qu#( +ntes de ejecutarlos intente predecir cu!l sera el resultado que se producira al compilar y ejecutar cada uno de ellos. 8ealice estos procesos con ambos y compare los resultados con sus hiptesis. Problema 3: ,ada una secuencia de enteros S, escriba un algoritmo que cree una nueva secuencia formada por la secuencia de sumas parciales de S 5S3, S3 ! S4, S3 ! S4 ! S;, ..6. Por ejemplo para la secuencia de entrada- 3, <, =, ;, =, >. "a secuencia de salida sera- 3, =, 3?, 3;, 3@, 4<. Problema 4: Escriba un algoritmo que obtenga la interseccin de dos conjuntos de enteros representados como secuencias ordenadas crecientemente. Trabajo personal del alumno Problema 1 Escriba una funcin que simule la evolucin del marcador en un partido de tenis. "os datos de entrada son el marcador actual y qu# jugador ha ganado el punto en juego. 'omo resultado se mostrar! por pantalla el nuevo marcador. )tilice esta funcin para escribir un algoritmo que simule la evolucin de un partido de tenis, supuesto que la entrada es una secuencia S de caracteres- 132 y 142, que indica qu# jugador ha ganado cada punto. Para cada elemento de la secuencia se indicar! el nuevo marcador del partido. %e supondr! que el partido lo gana el jugador que consigue seis juegos. Por ejemplo, si S A /3344334430, la salida sera- /quinceBnada0, /treintaB nada0, /treintaBquince0, /iguales a treinta0, /cuarentaBtreinta0, /juego para el jugador 30, /nadaBquince0, /nadaBtreinta0, /quinceBtreinta0. Problema 2 "a 'aja de ahorros del *editerr!neo gestiona la atencin a los clientes mediante un sistema autom!tico. ,ispone de un n7mero fijo de ventanillas de atencin 5C, constante entera positiva conocida6. 'ada cliente, para ser atendido, debe pulsar un botn de turno, si hay alguna ventanilla libre, una pantalla digital mostrar! en mensaje 5/Pase06, en caso contrario mostrar! el mensaje 5/Espere por favor06 y el usuario se pondr! en una cola, hasta que pueda ser atendido, en el momento que un empleado quede libre, la pantalla mostrar! el mensaje 5/Pase06 si la cola no est! vaca. Escriba un algoritmo que muestre en pantalla, en el momento oportuno, cada uno de estos dos mensajes. "a entrada del algoritmo ser! una secuencia de valores enteros- /30, /40 , que sigue el primer modelo de acceso secuencial. El /30 indica una peticin por parte de un cliente, el /40 que una ventanilla ha quedado libre. Inicialmente todas las ventanillas estar!n libres.

Potrebbero piacerti anche