Your SlideShare is downloading. ×
ejercicios-resueltos-en-pascal
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

ejercicios-resueltos-en-pascal

4,308
views

Published on

Published in: Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
4,308
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
96
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Una introducción a la programación. Un enfoque algorítmico Anexo I. Programas en Pascal Jesús J. García Molina Francisco J. Montoya Dato José L. Fernández Alemán María J. Majado Rosales 21 de octubre de 2005
  • 2. Programas en Pascal. Una introducción a la Programación.Índice1. Introducción 3 1.1. Guía de usuario para Turbo Pascal 5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2. Guía de usuario para Dev-Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42. Fe de erratas 63. Listados 8 3.1. Capítulo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2. Capítulo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.3. Capítulo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.4. Capítulo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.5. Capítulo 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.6. Capítulo 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 3.7. Capítulo 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 ITES PARANINFO c 2
  • 3. Programas en Pascal. Una introducción a la Programación.1. Introducción Este documento incluye los programas Pascal que se han obtenido al codicar en este lenguaje deprogramación todos los algoritmos que aparecen en el libro Una Introducción a la Programación. Unenfoque algorítmico, según la conversión descrita en el Capítulo 9 del libro. Por tanto, el lector dellibro dispone de los programas que le permiten analizar el comportamiento de los algoritmos durante laejecución. Los programas han sido creados y probados con las versiones 5.5 y 7.0 de Turbo Pascal de Borlandy con la versión 1.9.2 del entorno Dev-Pascal (compilador Free Pascal) de Bloodshed, sobre los sistemasoperativos Windows 98, 2000 y XP. Si el lector está más habituado a entornos Linux, puede optar poremplear Free Pascal (fpc) o GNU Pascal (gpc) para Linux. Las versiones de Turbo Pascal se ejecutan sobre DOS y ya no son soportadas por Borland; la versión5.5 se puede descargar de forma gratuita del sitio web de BorlandhttpXGG™ommunityF˜orl—ndF™omG—rti™leGHDIRIHDPHVHQDHHFhtml pero no la versión 7.0 que es máscómoda de usar (entorno multiventana, manejo del ratón, etc.). Dev-Pascal es un entorno de pro-gramación moderno, más potente y amigable, y se puede descargar desde el sitio web de BloodshedhttpXGGwwwF˜loodshedFnetGdevp—s™—lFhtml. El lector puede ejecutar los programas a partir del chero p—s™—lFzip que se encuentra en el sitio webjunto a este documento. Los programas están distribuidos en carpetas, una por cada capítulo. El nombrede los archivos de cada capítulo hace referencia al identicador en el libro del algoritmo que implementa,por ejemplo, evqT•RFp—s, es el programa para el Algoritmo 6.4 del Capítulo 6. Puesto que Pascal no dispone del tipo secuencia propiamente dicho, se han implementado unas unida-des que permiten el manejo de secuencias de caracteres, enteros y reales para el primer y segundo modelosde acceso secuencial descritos en el Capítulo 5. Los dos últimos modelos se han construido apoyándonosen el concepto de secuencia intermedia. En la carpeta unit están los archivos fuentes y los archivos objetode seis unidades, que corresponden con los dos primeros modelos de cada uno de los tres tipos de datos:caracteres, enteros y reales. Cada archivo que contiene una unidad se ha nombrado con el prejo unitms seguido de una letra queindica el tipo de elemento (c, e o r) y un 1 o 2 para indicar el modelo. Por ejemplo, Unitmse2.pases la unidad para secuencias de enteros del segundo modelo y Unitmsc1.pas es la unidad para secuenciasde caracteres del primer modelo. Las primitivas para el manejo de secuencias se nombran igual que en el libro (EA, Comenzar,Avanzar, etc.) pero con un sujo que indica el tipo de elemento y el modelo secuencial (ie•wƒgI, ie•wƒiP,ev—nz—r•wƒ‚P, ev—nz—r•wƒgP, etc.). Para conocer el léxico que puede utilizar se puede consultar la parteinterface del código fuente de cada unidad. El lector interesado también puede escudriñar el código de lasunidades con el objetivo de aprender sobre estructuras de datos dinámicas (se han implementado comolistas). Se han creado archivos que almacenan secuencias que se utilizan como ejemplo de entrada en laejecución de los programas, y que están preparados para que el lector pueda modicarlos. Estos archi-vos de datos se identican con el prejo datos seguido del identicador del algoritmo. Por ejemplo,d—tosRFQFtxt corresponde con la entrada de datos del programa evqR•QFp—s. Las secuencias de datos sealmacenan como líneas de caracteres y las secuencias de números con un número por línea de entrada. Enla carpeta con los programas del Capítulo 6 se incluyen dos programas (qixpT•IFp—s y qixpT•RFp—s) quecrean los archivos de datos Pascal para el Algoritmo 6.1 y el Algoritmo 6.4 (también se proporcionanlos programas que permiten la visualización de los dos archivos creados, †i‚pT•IFp—s y †i‚pT•RFp—s). En los programas no se ha realizado la comprobación de que los datos de entrada son válidos, por lo3 c ITES PARANINFO
  • 4. Programas en Pascal. Una introducción a la Programación.que en el caso de una entrada incorrecta, el resultado es impredecible. En una próxima versión de este documento se incluirá el código de todas las acciones y funcionesdel Capítulo 8, así como de la aplicación gestor de archivos indexados que se discute en dicho capítulo.También estarán disponibles en el sitio web del libro, algoritmos y programas que son soluciones a losejercicios del libro, así como la implementación de las unidades del tercer y cuarto modelo de accesosecuencial.1.1. Guía de usuario para Turbo Pascal 5.5 Existen numerosos libros que ofrecen información sobre el uso de los entornos de Borland, por ejemplo:Programación en Turbo Pascal. Versiones 5.5, 6.0, 7.0 de L. Joyanes, McGraw-Hill, 1993, y Programa-ción en Turbo/Borland Pascal 7 de L. Joyanes, Mc Graw Hill, 1998. Aquí ofrecemos una breve guía paraejecutar los programas, pero el lector puede consultar esos libros para obtener más detalles. Los pasospara ejecutar un programa serían: 1. Abrir el entorno desde la ventana del sistema operativo (™Xtpbtur˜o). 2. Establecer el directorio en el que se encuentran los programas (opción Change dir del menú File). 3. Indicar el directorio en el que se encuentran las unidades (añadir directorio en el cuadro de texto Unit Directories de la opción Directories del menú Options). Este paso sólo sería necesario realizarlo una vez. 4. Cargar el programa (opción Load del menú File). 5. Ejecutar el programa (opción Run menú Run). La carpeta unit incluye tanto los archivos fuente de las unidades como los archivos compilados, perosi fuese necesario compilar una unidad se debe proceder del siguiente modo: 1. Introducir el directorio en el que se almacenan las unidades (añadir directorio en el cuadro de texto EXE TPU Directory de la opción Directories del menú Options). 2. Cargar el archivo con el código fuente de la unidad, opción Load del menú File. 3. Indicar que la compilación se almacenará en disco con la opción Destination del menú Compile. 4. Compilar con la opción Compile del menú Compile. Si no se indica el directorio en el paso 1, el archivo objeto (extensión TPU) se almacenará en el mismo directorio que el archivo fuente.1.2. Guía de usuario para Dev-Pascal El entorno dispone de una ayuda y un tutorial. Los pasos para ejecutar un programa, una vez abiertoel entorno, serían (existen botones para ejecutar las órdenes, además de teclas rápidas): 1. Establecer el directorio en el que se encuentran las unidades en el cuadro de texto Add the directory below ... de la opción Compiler options del menú Options. Este paso sólo sería necesario realizarlo una vez. 2. Cargar el programa (opción Open le del menú File). ITES PARANINFO c 4
  • 5. Programas en Pascal. Una introducción a la Programación. 3. Compilar el programa (opción Compile del menú Execute). 4. Ejecutar el programa (opción Run del menú Execute). Para ejecutar los programas que utilizan las máquinas secuenciales bastarían los pasos anteriores si enel directorio de las unidades se encuentran el archivo fuente de la unidad empleada, ya que se generaríaautomáticamente el archivo objeto de la unidad. Si por alguna razón se necesitase compilar las unidadesde forma independiente, los pasos para crear el archivo objeto de una unidad son los siguientes: 1. Crear un proyecto con el nombre de la unidad. Seleccionar Empty project de la opción New project del menú File. Eliminar el archivo incluido por defecto en el proyecto y cargar el archivo que contiene el código fuente de la unidad, opción Add to project del menú Project. 2. Habilitar la creación de una DLL en la opción Project options del menú Project. 3. Compilar la unidad mediante la opción Compile del menú Execute. Sobre los sistemas operativos Windows 2000 y XP, durante la ejecución del programa con la últimaversión de Dev-Pascal, el directorio actual es el directorio en que se instala DevPascal (por defecto™XhevE€—sA y no funciona la opción de establecer como directorio actual aquel en el que se encuentra elejecutable. Por tanto, cuando en un programa hay referencias a cheros, o bien se indica la ruta completa,o bien se ejecuta el programa desde fuera del entorno, por ejemplo, desde el explorador de Windows. Esteproblema no se tiene con el sistema operativo Windows 98.5 c ITES PARANINFO
  • 6. Programas en Pascal. Una introducción a la Programación.2. Fe de erratas Hemos encontrado en el libro las erratas que indicamos abajo organizadas por capítulos. En el sitioweb del libro iremos actualizando esta fe de erratas en un chero aparte.Capítulo 4Algoritmo 4.4 El segundo argumento de la llamada a la acción is™ri˜ir que escribe el resultado debe ser sum—Gnumilemen vez de sum—Gnum.Capítulo 6Algoritmo 6.17 La función €osin„—˜l— no coincide en el texto y en el algoritmo. El algoritmo válido es el que apareceen el texto. En la función godifi™—™ion hay que cambiar nuevo€—rF™ por nuevo€—rFs en la segunda asignaciónde la cláusula ix•y„‚y•geƒy de la instrucción ƒiqÚx.Capítulo 7Algoritmo 7.13 ist—™— debe denirse El tipo fuera de la acción r—noi, ya que se utiliza como tipo de los parámetrosorigen, intermedio y destino. r—noi debería ser r—noi@nEID intermedioD origenD destinoA La segunda llamada a la acción envez de r—noi@nEID intermedioD destinoD origenA.Sección 7.5.4 (Página 377) En la postcondición de la acción yrden—rs debería decir tk a „viej—k en vez de tk a „viej—k.Capítulo 8Sección 8.3 (Página 395) En la tercera línea debería decir una secuencia de cuatro nodos: en vez de una secuencia de tresnodos:.Sección 8.7.4 (Página 464) En la acción snsert—rer™hivosndex—do hay que cambiar: ƒs @fus™—r€osi™ionsndi™e@—r™h↑Findi™eD pF™l—veA X €yƒ•x…veApor: ƒs @fus™—r€osi™ionsndi™e@—r™h↑Findi™eD pF™l—veA = €yƒ•x…veA ITES PARANINFO c 6
  • 7. Programas en Pascal. Una introducción a la Programación.Capítulo 9Sección 9.7.12 (Página 565) En la Figura 9.4 el elemento ‘H“‘PW“ debería ser t‘H“‘PW“7 c ITES PARANINFO
  • 8. Programas en Pascal. Una introducción a la Programación.3. Listados3.1. Capítulo 2§ ¤program elgoritmoP•IY(* * Algoritmo 2.1. Calculo de la nota final de una asignatura * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar not—„eori— X realY not—€r—™ti™— X realY not—pin—l X realYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.1. Calculo de la nota final de una asignatura *****AY writeln@*****AY writelnY write@Nota de teoria: AY readln@not—„eori—AY writelnY write@Nota de practicas: AY readln@not—€r—™ti™—AY not—pin—l Xa not—„eori— B HFU C not—€r—™ti™— B HFQY writelnY write@La nota final es: AY writeln@not—pin—lXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•PY(* ITES PARANINFO c 8
  • 9. Programas en Pascal. Una introducción a la Programación. * Algoritmo 2.2. Convertir temperatura Fahrenheit en temperatura Celsius * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar tempp—hrenheit X realY (* dato, temperatura en grados Fahrenheit *) tempgelsius X realY (* resultado, temperatura en grados Celsius *)procedure gonvertirp—hrenheitgelsiusY(* PRE 0 = tempFahrenheit = 200 *)(* POST convierte a grados celsius la temperatura de tempFahrenheit *) begin tempgelsius Xa @SFH G WFHA B @tempp—hrenheit E QPFHA endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.2. Convertir temperatura Fahrenheit en *****AY writeln@***** temperatura Celsius *****AY writeln@*****AY writelnY write@Temperatura Fahrenheit (= 0) y (= 200): AY readln@tempp—hrenheitAY gonvertirp—hrenheitgelsiusY writeln@La temperatura en grados Celsius es: D tempgelsiusXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•QY(* * Algoritmo 2.3. Calculo del salario neto de un trabajador (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico9 c ITES PARANINFO
  • 10. Programas en Pascal. Una introducción a la Programación.* Autores del libro: Jesus J. Garcia Molina* Francisco J. Montoya Dato* Jose L. Fernandez Aleman* Maria J. Majado Rosales* Fecha: 1/9/2005* Capitulo 2. Secuenciacion y analisis de casos*)uses ™rtYconst sw€…iƒ„y a HFPHY ƒiq…‚y•wihsgy a HFHSY gyw€viwix„y•…sx…ixsy a THY gyw€viwix„y•ex‰y a TYvar s—l—riof—se X longintY (* dato, sueldo base del trabajador *) —ntigued—d X wordY (* dato, anyos en la empresa *) s—l—rioxeto X realY (* resultado, salario percibido por el trabajador *) s—l—riofruto X longintY (* salario bruto del trabajador *) des™uentos X realY (* descuentos aplicados *)procedure g—l™ul—rƒ—l—riofrutoY(* PRE salarioBase y antiguedad tienen un valor valido *)(* POST salarioBruto contiene el salario bruto del trabajador *) var numerouinquenios X wordY numeroenyos X wordY p—gouinquenios X wordY p—goeyos X wordY begin numerouinquenios Xa —ntigued—d div SY numeroenyos Xa —ntigued—d mod SY p—gouinquenios Xa numerouinquenios B gyw€viwix„y•…sx…ixsyY p—goeyos Xa numeroenyos B gyw€viwix„y•ex‰yY s—l—riofruto Xa s—l—riof—se C p—gouinquenios C p—goeyos endYprocedure g—l™ul—rhes™uentosY(* PRE se ha calculado el salario bruto y se ha asignado a salarioBruto *)(* POST descuentos almacena el valor total de los descuentos sobre el salario bruto *) begin des™uentos Xa s—l—riofruto B @sw€…iƒ„y C ƒiq…‚y•wihsgyA endY ITES PARANINFO c 10
  • 11. Programas en Pascal. Una introducción a la Programación.procedure g—l™ul—rƒ—l—rioxetoY(* PRE salarioBruto y descuentos almacenan, respectivamente, el salario bruto y el descuento que le corresponde *)(* POST salarioNeto contiene el salario recibido por el trabajador, salarioNeto = salarioBruto - descuentos *) begin s—l—rioxeto Xa s—l—riofruto E des™uentos endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.3. Calculo del salario neto de un *****AY writeln@***** trabajador (version 1) *****AY writeln@*****AY writelnY write@Introduzca el salario base: AY readln@s—l—riof—seAY write@Introduzca la antiguedad: AY readln@—ntigued—dAY g—l™ul—rƒ—l—riofrutoY g—l™ul—rhes™uentosY g—l™ul—rƒ—l—rioxetoY writeln@El sueldo neto es: D s—l—rioxetoXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•RY(* * Algoritmo 2.4. Calculo del salario neto de un trabajador (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYconst sw€…iƒ„y a HFPHY11 c ITES PARANINFO
  • 12. Programas en Pascal. Una introducción a la Programación. ƒiq…‚y•wihsgy a HFHSY gyw€viwix„y•…sx…ixsy a THY gyw€viwix„y•ex‰y a TYvar s—l—riof—se X wordY (* dato, sueldo base del trabajador *) —ntigued—d X wordY (* dato, anyos en la empresa *) s—l—rioxeto X realY (* resultado, salario percibido por el trabajador *) s—l—riofruto X wordY (* salario bruto del trabajador *) des™uentos X realY (* descuentos aplicados *) numerouinquenios X wordY numeroenyos X wordY p—gouinquenios X wordY p—goenyos X wordYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.4. Calculo del salario neto de *****AY writeln@***** un trabajador (version 2) *****AY writeln@*****AY writelnY write@Introduzca el salario base: AY readln@s—l—riof—seAY write@Introduzca la antiguedad: AY readln@—ntigued—dAY (* Calculo del salario bruto *) numerouinquenios Xa —ntigued—d div SY numeroenyos Xa —ntigued—d mod SY p—gouinquenios Xa numerouinquenios B gyw€viwix„y•…sx…ixsyY p—goenyos Xa numeroenyos B gyw€viwix„y•ex‰yY s—l—riofruto Xa s—l—riof—se C p—gouinquenios C p—goenyosY (* Calculo de los descuentos y el salario neto *) des™uentos Xa s—l—riofruto B @sw€…iƒ„y C ƒiq…‚y•wihsgyAY s—l—rioxeto Xa s—l—riofruto E des™uentosY writeln@El sueldo neto es: D s—l—rioxetoXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•SY(* ITES PARANINFO c 12
  • 13. Programas en Pascal. Una introducción a la Programación. * Algoritmo 2.5. Expresar una cantidad de bytes en megabytes y kilobytes * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar n X longintY (* dato, numero de bytes a descomponer *) m˜ X longintY (* resultado, numero de megabytes *) k˜ X HFFIHPRY (* resultado, numero de kilobytes *) ˜ X HFFIHPRY (* resultado, numero de bytes *)procedure gonvertirY (* PRE 0 = n *) (* POST (n = 1048576mb + 1024kb + b) y (0 = kb 1024) y (0 = b 1024) *) var r˜ X HFFIHRVSUSY (* resto de bytes *) begin m˜ Xa n div IHRVSUTY r˜ Xa n mod IHRVSUTY (* E1: n = 1048576 mb + rb y 0 = rb 1048576 *) k˜ Xa r˜ div IHPRY ˜ Xa r˜ mod IHPR endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.5. Expresar una cantidad *****AY writeln@***** de bytes en megabytes y kilobytes *****AY writeln@*****AY writelnY writeln@Descomposicion en bytes, kilobytes y megabytesAY write@Introduzca un entero (= 0): AY readln@nAY gonvertirY writeln@La descomposicion es:AY writeln@ Megabytes: D m˜AY13 c ITES PARANINFO
  • 14. Programas en Pascal. Una introducción a la Programación. writeln@ Kilobytes: D k˜AY writeln@ Bytes: D ˜AY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•TY(* * Algoritmo 2.6. Dibujar un cuadrado * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses qr—phQD ™rtYvar l—do X integerYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.6. Dibujar un cuadrado *****AY writeln@*****AY writelnY write @Introduzca la longitud de lado del cuadrado:AY readln @l—doAY(* E0: Indiferente *) qr—phwodeY (* 320 x 200 modo grafico blanco-negro *) gle—rƒ™reenY ƒhow„urtleY (* Muestra la tortuga *)(* E1: pos = (0, 0), dir = 0, trazo = Verdadero *) porwd@l—doAY „urn‚ight @WHAY(* E2: pos = (0, lado), dir = 90, trazo = Verdadero, se ha dibujado el primer lado *) porwd@l—doAY „urn‚ight @WHAY(* E3: pos = (lado, lado), dir = 180, trazo = Verdadero, se han dibujado dos lados *) porwd@l—doAY „urn‚ight @WHAY ITES PARANINFO c 14
  • 15. Programas en Pascal. Una introducción a la Programación.(* E4: pos = (lado, 0), dir = 270, trazo = Verdadero, se han dibujado tres lados *) porwd@l—doAY „urn‚ight @WHAY(* Ef: pos = (0, 0), dir = 0, trazo = Verdadero, se ha dibujado el cuadrado *) writelnY write @Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•UY(* * Algoritmo 2.7. Correspondencia entre calificaciones (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar not— X HFFPHY (* nota en la universidad extranjera, 0 = nota = 20 *)begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.7. Correspondencia entre calificaciones (version 1) *****AY writeln@*****AY writelnY write@Introduzca la nota (= 0) y (= 20): AY readln@not—AY write@La calificacion es AY case not— of PH X write@matricula de honorAY IWD IV X write@sobresalienteAY IUD IT X write@notableAY ISD IR X write@aprobadoAY else if not— ` IR then write@suspensoA endY writelnY15 c ITES PARANINFO
  • 16. Programas en Pascal. Una introducción a la Programación. writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•VY(* * Algoritmo 2.8. Correspondencia entre calificaciones (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar not— X integerYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.8. Correspondencia entre calificaciones (version 2) *****AY writeln@*****AY writelnY write@Introduzca la nota (= 0) y (= 20): AY readln @not—AY write@La calificacion es AY case not— of PH X write@matricula de honorAY IWD IV X write@sobresalienteAY IUD IT X write@notableAY ISD IR X write@aprobadoAY HFFIQX write@suspensoAY else write@no validaAY endY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥ ITES PARANINFO c 16
  • 17. Programas en Pascal. Una introducción a la Programación.§ ¤program elgoritmoP•WY(* * Algoritmo 2.9. Simulacion de una calculadora simple * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar oper—ndoID oper—ndoP X longintY oper—dor X charYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.9. Simulacion de una calculadora simple *****AY writeln@*****AY writelnY write @Introduzca el primer operando entero: AY readln @oper—ndoIAY write @Introduzca el segundo operando entero: AY readln @oper—ndoPAY write @Introduzca el operador (+, *, -, /): AY readln @oper—dorAY write @El resultado de la operacion es: AY case oper—dor of + X writeln@oper—ndoI C oper—ndoPAY * X writeln@oper—ndoI B oper—ndoPAY - X writeln@oper—ndoI E oper—ndoPAY / X writeln@oper—ndoI div oper—ndoPAY else writeln@operador incorrectoA endY writelnY write @Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•IHY(*17 c ITES PARANINFO
  • 18. Programas en Pascal. Una introducción a la Programación. * Algoritmo 2.10. Obtener el mayor de dos numeros enteros * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar xD z X longintY m—yor X longintYbegin ™lrs™rY (* PRE (x = X) y (z = Z) *) (* POST ((x = z) = (mayor = X)) y ((z = x) = (mayor = Z)) *) writelnY writeln@*****AY writeln@***** Algoritmo 2.10. Obtener el mayor de dos numeros enteros *****AY writeln@*****AY writelnY write @Introduzca el primer entero: AY readln @xAY write @Introduzca el segundo entero: AY readln @zAY if x ba z then m—yor Xa x else m—yor Xa zY writeln @El numero mayor es: D m—yorAY writelnY write @Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•IIY(* * Algoritmo 2.11. Comprobar si una fecha es correcta (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales ITES PARANINFO c 18
  • 19. Programas en Pascal. Una introducción a la Programación. * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar di— X wordY mes X wordY —nyo X wordY esfisiesto X booleanY (* indicador de anyo bisiesto *) fe™h—†—lid— X booleanY (* indicador de fecha valida *)procedure enyofisiestoY(* POST esBisiesto es Verdadero si el anyo es bisiesto y Falso en caso contrario *) begin esfisiesto Xa @—nyo mod R a HA and @—nyo mod IHH `b HA or @—nyo mod RHH a HA and @—nyo `b QTHHA endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.11. Comprobar si una fecha es correcta (version 1) ***** AY writeln@*****AY writelnY write@Introduzca el dia: AY readln@di—AY write@Introduzca el mes: AY readln@mesAY write@Introduzca el anyo: AY readln@—nyoAY fe™h—†—lid— Xa trueY if di— ` I then fe™h—†—lid— Xa false else case mes of ID QD SD UD VD IHD IPX (* meses de 31 dias *) if di— b QI then fe™h—†—lid— Xa falseY RD TD WD IIX (* meses de 30 dias *) if di— b QH then fe™h—†—lid— Xa falseY PX (* mes de febrero *) begin enyofisiestoY if @di— b PWA or @not esfisiesto and @di— b PVAA then fe™h—†—lid— Xa false19 c ITES PARANINFO
  • 20. Programas en Pascal. Una introducción a la Programación. end else fe™h—†—lid— Xa false endY write @di—D /D mesD /D —nyoAY if fe™h—†—lid— then writeln@ es una fecha validaA else writeln@ no es una fecha validaAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•IPY(* * Algoritmo 2.12. Comprobar si una fecha es correcta (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYvar di— X wordY mes X wordY —nyo X wordY esfisiesto X booleanY (* indicador de anyo bisiesto *) fe™h—†—lid— X booleanY (* indicador de fecha valida *) (* igual que en Algoritmo 2.11 *)procedure enyofisiestoY(* POST esBisiesto es Verdadero si el anyo es bisiesto y Falso en caso contrario *) begin esfisiesto Xa @—nyo mod R a HA and @—nyo mod IHH `b HA or @—nyo mod RHH a HA and @—nyo `b QTHHA endYbegin ™lrs™rY writelnY writeln@*****AY ITES PARANINFO c 20
  • 21. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 2.12. Comprobar si una fecha es correcta (version 2) ***** AY writeln@*****AY writelnY write@Introduzca el dia: AY readln@di—AY write@Introduzca el mes: AY readln@mesAY write@Introduzca el anyo: AY readln@—nyoAY if di— ` I then fe™h—†—lid— Xa false else case mes of ID QD SD UD VD IHD IPX fe™h—†—lid— Xa di— `a QIY RD TD WD IIX fe™h—†—lid— Xa di— `a QHY PX begin enyofisiestoY fe™h—†—lid— Xa @di— `a PWA and @esfisiesto or @di— `a PVAAY end else fe™h—†—lid— Xa false endY write @di—D /D mesD /D —nyoAY if fe™h—†—lid— then writeln@ es una fecha validaA else writeln@ no es una fecha validaAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•IQY(* * Algoritmo 2.13. Calculo del salario neto de un trabajador (version 3) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtYconst ry‚e•xy‚wev a IHY ry‚e•iˆ„‚e a IPY21 c ITES PARANINFO
  • 22. Programas en Pascal. Una introducción a la Programación. …wf‚ev•ry‚eƒ•iˆ„‚eƒ a IRHY sw€…iƒ„y•fety a HFITY sw€…iƒ„y•ev„y a HFPPY …wf‚ev•ƒ…ivhy a IQHHY gyw€viwix„y•…sx…ixsy a THY gyw€viwix„y•ex‰y a TYvar numeroror—s X wordY (* dato, horas trabajadas en un mes por el empleado id *) id X wordY (* dato, identificador del empleado *) —ntigued—d X wordY (* dato, anyos en la empresa *) s—l—rioxeto X realY (* resultado, salario percibido por el trabajador *) s—l—riof—se X wordY s—l—riofruto X wordY des™uentos X realYprocedure g—l™ul—rƒ—l—riofrutoY(* PRE numeroHoras y antiguedad tienen un valor *)(* POST salarioBruto contiene el salario bruto del trabajador *)var numerouinquenios X wordY numeroenyos X wordY p—gouinquenios X wordY p—goenyos X wordYbegin(* calcular sueldo base por horas trabajadas *) if numeroror—s b …wf‚ev•ry‚eƒ•iˆ„‚eƒ then s—l—riof—se Xa @numeroror—s E …wf‚ev•ry‚eƒ•iˆ„‚eƒA B ry‚e•iˆ„‚e C …wf‚ev•ry‚eƒ•iˆ„‚eƒ B ry‚e•xy‚wev else s—l—riof—se Xa numeroror—s B ry‚e•xy‚wevY (* calcular gratificacion por antiguedad *) numerouinquenios Xa —ntigued—d DIV SY numeroenyos Xa —ntigued—d MOD SY p—gouinquenios Xa numerouinquenios B gyw€viwix„y•…sx…ixsyY p—goenyos Xa numeroenyos B gyw€viwix„y•ex‰yY (* calcular salario bruto *) s—l—riofruto Xa s—l—riof—se C p—gouinquenios C p—goenyosendYprocedure g—l™ul—rhes™uentosY (* PRE salarioBruto almacena el salario bruto calculado *) (* POST descuentos almacena el valor total de los descuentos sobre el salario bruto *) ITES PARANINFO c 22
  • 23. Programas en Pascal. Una introducción a la Programación.begin if s—l—riofruto b …wf‚ev•ƒ…ivhy then des™uentos Xa s—l—riofruto B sw€…iƒ„y•ev„y else des™uentos Xa s—l—riofruto B sw€…iƒ„y•fetyendYprocedure g—l™ul—rƒ—l—rioxetoY (* PRE salarioBruto y descuentos almacenan, respectivamente, el salario bruto y el descuento correspondiente *) (* POST salarioNeto contiene el salario percibido por el trabajador, salarioNeto = salarioBruto !descuentos *)begin s—l—rioxeto Xa s—l—riofruto E des™uentosendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.13. Calculo del salario neto de *****AY writeln@***** un trabajador (version 3) *****AY writeln@*****AY writelnY write@Identificador del empleado: AY readln@idAY write@Numero de horas trabajadas en un mes por el empleado: AY readln@numeroror—sAY write@Antiguedad del empleado: AY readln@—ntigued—dAY g—l™ul—rƒ—l—riofrutoY g—l™ul—rhes™uentosY g—l™ul—rƒ—l—rioxetoY writeln@El salario del empleado D idD es: D s—l—rioxetoXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoP•IRY(* * Algoritmo 2.14. Dibujar un cuadrado a partir de la posicion de los vertices * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman23 c ITES PARANINFO
  • 24. Programas en Pascal. Una introducción a la Programación.* Maria J. Majado Rosales* Fecha: 1/9/2005* Capitulo 2. Secuenciacion y analisis de casos*)uses ™rtD gr—phYtype €unto a record —˜s X integerY (* valores enteros en lugar de reales *) ord X integerY endY gu—dr—do a record vID vPD vQD vR X €untoY endYvar ™ X gu—dr—doY ™gD mg X integerY (* controlador y modo grafico *)begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 2.14. Dibujar un cuadrado a partir *****AY writeln@***** de la posicion de los vertices *****AY writeln@*****AY writelnY(* E0: Indiferente *) writeln @Introduzca los puntos de un cuadradoAY write @ Punto 1 (abscisa ordenada): AY readln @™FvIF—˜sD ™FvIFordAY write @ Punto 2 (abscisa ordenada): AY readln @™FvPF—˜sD ™FvPFordAY write @ Punto 3 (abscisa ordenada): AY readln @™FvQF—˜sD ™FvQFordAY write @ Punto 4 (abscisa ordenada): AY readln @™FvRF—˜sD ™FvRFordAY snitqr—ph@™gDmgDc:tpAY (* inicializa modo grafico*)(* E1: pos = (0, 0), dir = 0, trazo = Verdadero; los puntos de c son vertices de un cuadrado *) wove„o@™FvIF—˜sD ™FvIFordAY (* mover al vertice v1 *) ITES PARANINFO c 24
  • 25. Programas en Pascal. Una introducción a la Programación.(* E2: pos = c.v1, dir = 0, trazo = Verdadero *) vine„o@™FvPF—˜sD™FvPFordAY (* mover al vertice v2 y traza linea *) vine„o@™FvQF—˜sD™FvQFordAY (* mover al vertice v3 y traza linea *) vine„o@™FvRF—˜sD™FvRFordAY (* mover al vertice v4 y traza linea *) vine„o@™FvIF—˜sD™FvIFordAY (* mover al vertice v1 y traza linea *)(* Ef: cuadrado dibujado , pos = c.v1, dir = 0, trazo = Verdadero *) readlnY ™loseqr—phYendF¦ ¥§ ¤program elgoritmoP•ISY(* * Algoritmo 2.15. Comprobar si una fecha es correcta (version 3) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Capitulo 2. Secuenciacion y analisis de casos *)uses ™rtY(*$R+*)type pe™h— a record di— X IFFQIY mes X IFFIPY —nyo X word endYvar f X pe™h—Y (* dato, fecha dia/mes/anyo *) esfisiesto X booleanY (* indicador de anyo bisiesto *) fe™h—†—lid— X booleanY (* indicador de fecha valida *) procedure enyofisiestoY (* POST esBisiesto es Verdadero si f.anyo es bisiesto y Falso en caso contrario *) begin esfisiesto Xa @fF—nyo mod R a HA and @fF—nyo mod IHH `b HA or @fF—nyo mod RHH a HA and @fF—nyo `b QTHHA endYbegin ™lrs™rY25 c ITES PARANINFO
  • 26. Programas en Pascal. Una introducción a la Programación. writelnY writeln@*****AY writeln@***** Algoritmo 2.15. Comprobar si una fecha es correcta (version 3) ***** AY writeln@*****AY writelnY write@Introduzca el dia: AY readln@fFdi—AY write@Introduzca el mes: AY readln@fFmesAY write@Introduzca el anyo: AY readln@fF—nyoAY case fFmes of ID QD SD UD VD IHD IPX fe™h—†—lid— Xa trueY RD TD WD IIX fe™h—†—lid— Xa fFdi— `b QIY PX begin enyofisiestoY fe™h—†—lid— Xa @fFdi— `a PWA and @esfisiesto or @fFdi— `b PWAA endY endY write @fFdi—D /D fFmesD /D fF—nyoAY if fe™h—†—lid— then writeln@ es una fecha validaA else writeln@ no es una fecha validaAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥ ITES PARANINFO c 26
  • 27. Programas en Pascal. Una introducción a la Programación.3.2. Capítulo 3§ ¤program elgoritmoQ•IY(* * Algoritmo 3.1. Calcular el perimetro de un cuadrilatero irregular (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)uses ™rtYtype goorden—d— a realY €unto a record x X goorden—d—Y y X goorden—d—Y endYvar pID pPD pQD pR X €untoY poD pd X €untoY distD perimetro X realYprocedure hist—n™i—Y(* PRE po y pd almacenan dos puntos *)(* POST dist almacena la distancia entre los puntos po y pd *)begin dist Xa sqrt@sqr@pdFx E poFxA C sqr@pdFy E poFyAAendYprocedure veer€unto@var xD y X realY n X shortintAYbegin write@ Coordenada x del punto D nD: AY readln@xAY write@ Coordenada y del punto D nD : AY readln@yAY writelnendYbegin ™lrs™rY writelnY27 c ITES PARANINFO
  • 28. Programas en Pascal. Una introducción a la Programación. writeln@*****AY writeln@***** Algoritmo 3.1. Calcular el perimetro de un *****AY writeln@***** cuadrilatero irregular (version 1) *****AY writeln@*****AY writelnY writeln@Introduzca los puntos del cuadrilatero (en orden de adyacencia):AY writelnY veer€unto@pIFxD pIFyD IAY veer€unto@pPFxD pPFyD PAY veer€unto@pQFxD pQFyD QAY veer€unto@pRFxD pRFyD RAY perimetro Xa HFHY(* E0 : perimetro = 0 *) po Xa pIY pd Xa pPY hist—n™i—Y perimetro Xa distY(* E1 : perimetro = Distancia (p1, p2) *) po Xa pPY pd Xa pQY hist—n™i—Y perimetro Xa perimetro C distY(* E2 : perimetro = Distancia (p1, p2) + Distancia (p2, p3) *) po Xa pQY pd Xa pRY hist—n™i—Y perimetro Xa perimetro C distY(* E3 : perimetro = Distancia (p1, p2) + Distancia (p2, p3) + Distancia (p3, p4) *) po Xa pRY pd Xa pIY hist—n™i—Y perimetro Xa perimetro C distY(* E4 : perimetro = Distancia (p1, p2) + Distancia (p2, p3) + Distancia (p3, p4) + Distancia (p4, p1) *) writeln@El perimetro del cuadrilatero irregular es: D perimetroXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•PY(* ITES PARANINFO c 28
  • 29. Programas en Pascal. Una introducción a la Programación. * Algoritmo 3.2. Calcular el perimetro de un cuadrilatero irregular (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)uses ™rtYtype goorden—d— a realY €unto a record x X goorden—d—Y y X goorden—d—Y endYvar pID pPD pQD pR X €untoY dID dPD dQD dR X realY perimetro X realYprocedure hist—n™i—@poD pd X €untoY var dist X realAY (* PRE po y pd almacenan dos puntos *) (* POST dist retorna la distancia entre los puntos po y pd *)begin dist Xa sqrt@sqr@pdFx E poFxA C sqr@pdFy E poFyAAendYprocedure veer€unto@var xD y X realY n X shortintAYbegin write@ Coordenada x del punto D nD:AY readln@xAY write@ Coordenada y del punto D nD :AY readln@yAY writelnendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.2. Calcular el perimetro de un *****AY writeln@***** cuadrilatero irregular (version 2) *****AY29 c ITES PARANINFO
  • 30. Programas en Pascal. Una introducción a la Programación. writeln@*****AY writelnY writeln@Introduzca los puntos del cuadrilatero:AY writelnY veer€unto@pIFxD pIFyD IAY veer€unto@pPFxD pPFyD PAY veer€unto@pQFxD pQFyD QAY veer€unto@pRFxD pRFyD RAY hist—n™i—@pID pPD dIAY hist—n™i—@pPD pQD dPAY hist—n™i—@pQD pRD dQAY hist—n™i—@pRD pID dRAY perimetro Xa dI C dP C dQ C dRY writeln@El perimetro del cuadrilatero irregular es:D perimetroXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•QY(* * Algoritmo 3.3. Accion para el intercambio de dos variables * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)uses ™rtYvar xD yX integerYprocedure snter™—m˜i—r@var —D ˜ X integerAY(* PRE a, b : Entero, a = A, b = B *)(* POST a = B, b = A *)var t X integerYbegin t Xa —Y ITES PARANINFO c 30
  • 31. Programas en Pascal. Una introducción a la Programación. — Xa ˜Y ˜ Xa tendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.3. Accion para el intercambio de dos variables *****AY writeln@*****AY writelnY write@Valor inicial de x: AY readln@xAY write@Valor inicial de y: AY readln@yAY writelnY snter™—m˜i—r@xD yAY writeln@Valor final de x: D xAY writeln@Valor final de y: D yAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•RY(* * Algoritmo 3.4. Desplazamiento circular de tres variables * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)uses ™rtYvar —D ˜D ™ X integerYprocedure snter™—m˜i—r@var xD y X integerAY(* PRE x, y : Entero, x = X, y = Y *)(* POST x = Y, y = X *)var31 c ITES PARANINFO
  • 32. Programas en Pascal. Una introducción a la Programación. t X integerYbegin t Xa xY x Xa yY y Xa tendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.4. Desplazamiento circular de tres variables *****AY writeln@*****AY writelnY(* PRE a, b, c : Entero, a = A, b = B, c = C *)(* POST a, b, c : Entero, a = B, b = C, c = A *) writeln@Introduzca tres enteros separados por espaciosAY write@y termine pulsando enter: AY readln@—D ˜D ™AY writelnY writeln@Valor inicial de a, b y c: D —D , D˜D y D ™AY(* E0 : a = A, b = B, c = C *)(* E0 = PRE *) snter™—m˜i—r@—D ˜AY(* E1 : a = B, b = A, c = C *) snter™—m˜i—r@˜D ™AY(* Ef : a = B, b = C, c = A = Post *) writelnY writeln@Desplazamiento circular a la izquierdaAY writelnY writeln@Valor final de a, b y c: D —D , D˜D y D ™AY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•SY(* * Algoritmo 3.5. Algoritmo para dibujar dos cuadrados encajados * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 ITES PARANINFO c 32
  • 33. Programas en Pascal. Una introducción a la Programación. * Capitulo 3. Acciones y funciones *)uses ™rtD gr—phQYtype goorden—d— a integerY (* En Pascal las coordenadas son valores enteros *) €unto a record x X goorden—d—Y y X goorden—d—Y endY gu—dr—do a record pos X €untoY l—doD —ng X integer endYvar ™e X gu—dr—doYprocedure hi˜uj—rgu—dr—do@™ X gu—dr—doAY (* PRE Pantalla y pluma indiferentes *) (* POST cuadrado c dibujado, PE = Baja, PP = c.pos, ORI = c.ang *)var i X integerYbegin €en…pY ƒet€osition@™FposFxD ™FposFyAY ƒetre—ding@™F—ngAY €enhownY for i Xa I to R do begin porwd@™Fl—doAY „urn‚ight@WHAY endYendYprocedure veer@var ™ X gu—dr—doAYbegin writeln@ CUADRADOAY write@ Coordenada x del punto origen: AY readln@™FposFxAY write@ Coordenada y del punto origen: AY readln@™FposFyAY write@ Lado del cuadrado: AY readln@™Fl—doAY write@ Angulo del cuadrado (grados): AY readln@™F—ngAY writelnY33 c ITES PARANINFO
  • 34. Programas en Pascal. Una introducción a la Programación.endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.5. Algoritmo para dibujar dos cuadrados encajados ***** AY writeln@*****AY writelnY veer@™eAY qr—phwodeY (* 320 x 200 modo grafico blanco-negro *) gle—rƒ™reenY ƒhow„urtleY hi˜uj—rgu—dr—do@™eAY ™eFl—do Xa ™eFl—do div PY hi˜uj—rgu—dr—do@™eAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•TY(* * Algoritmo 3.6. Calcular el perimetro de un cuadrilatero irregular (version 3) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)uses ™rtYtype goorden—d— a realY €unto a record x X goorden—d—Y y X goorden—d—Y endYvar pID pPD pQD pR X €untoY perimetro X realY ITES PARANINFO c 34
  • 35. Programas en Pascal. Una introducción a la Programación.function hist—n™i—@poD pd X €untoA X realY(* PRE po y pd almacenan dos puntos *)(* POST retorna la distancia entre los puntos po y pd *)begin hist—n™i— Xa sqrt@sqr@pdFx E poFxA C sqr@pdFy E poFyAAendYprocedure veer€unto@var xD y X realY n X shortintAYbegin write@ Coordenada x del punto D nD:AY readln@xAY write@ Coordenada y del punto D nD :AY readln@yAY writelnYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.6. Calcular el perimetro de un *****AY writeln@***** cuadrilatero irregular (version 3) *****AY writeln@*****AY writelnY writeln@Introduzca los puntos del cuadrilatero:AY writelnY veer€unto@pIFxD pIFyD IAY veer€unto@pPFxD pPFyD PAY veer€unto@pQFxD pQFyD QAY veer€unto@pRFxD pRFyD RAY perimetro Xa hist—n™i—@pID pPA C hist—n™i—@pPD pQA C hist—n™i—@pQD pRA C hist—n™i—@ pRD pIAY writeln@El perimetro del cuadrilatero irregular es:D perimetroXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•UY(* * Algoritmo 3.7. Funcion que obtiene el mayor de tres numeros (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato35 c ITES PARANINFO
  • 36. Programas en Pascal. Una introducción a la Programación. * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)uses ™rtYvar xD yD z X longintYfunction w—xQ@—D ˜D ™ X longintA X longintYbegin if @— ba ˜A and @— ba ™A then w—xQ Xa — else if @˜ ba —A and @˜ ba ™A then w—xQ Xa ˜ else if @™ ba —A and @™ ba ˜A then w—xQ Xa ™endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.7. Funcion que obtiene el mayor de tres numeros (version 1) *****AY writeln@*****AY writelnY writeln@Introduzca tres enteros separados por espaciosAY write@y termine pulsando enter: AY readln@xD yD zAY writelnY writeln@El maximo de D xD , D yD y D zD es: D w—xQ@xD yD zAAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•VY(* * Algoritmo 3.8. Funcion que obtiene el mayor de tres numeros (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * í Mara J. Majado Rosales * Fecha: 1/9/2005 ITES PARANINFO c 36
  • 37. Programas en Pascal. Una introducción a la Programación. * Capitulo 3. Acciones y funciones *)uses ™rtYvar xD yD z X longintYfunction w—xP @—D ˜ X longintA X longintYbegin w—xP Xa @— C ˜ C —˜s @— E ˜AA div PendYfunction w—xQ @—D ˜D ™ X longintA X longintYbegin w—xQ Xa w—xP@ —D w—xP @˜D ™AAYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.8. Funcion que obtiene el mayor de *****AY writeln@***** tres numeros (version 2) *****AY writeln@*****AY writelnY writeln@Introduzca tres enteros separados por espaciosAY write@y termine pulsando enter: AY readln @xD yD zAY writelnY writeln@El maximo de D xD , D yD y D zD es: D w—xQ @xD yD zAAY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•WY(* * Algoritmo 3.9. Calcular la suma de dos duraciones de tiempo (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)37 c ITES PARANINFO
  • 38. Programas en Pascal. Una introducción a la Programación.uses ™rtY(*$R+*) (* Habilita la comprobacion de intervalos *){(*$Q+*) Habilita la comprobacion de desbordamiento (solo en version 7.0)}type hur—™ion a record hor— X longintY minD seg X HFFSW endYvar tID tP X hur—™ionY (* entrada de datos *) tQ X hur—™ionY (* salida de datos *)procedure ƒum—rhur—™iones@dID dP X hur—™ionY var res X hur—™ionAY(* La funcion SumarDuraciones mostrada en el libro se codifica mediante un procedimiento con un parametro paso por referencia, porque en Pascal una funcion no puede devolver un valor de un tipo registro *)var xD y X HFFIYbegin y Xa @dIFseg C dPFsegA div THY (* acarreo de segundos *) x Xa @dIFmin C dPFmin C yA div THY (* acarreo de minutos *) resFhor— Xa dIFhor— C dPFhor— C xY resFmin Xa @dIFmin C dPFmin C yA mod THY resFseg Xa @dIFseg C dPFsegA mod THYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.9. Calcular la suma de dos *****AY writeln@***** duraciones de tiempo (version 1) *****AY writeln@*****AY writelnY writeln@Introduzca dos duraciones:AY writelnY write@ Horas de la duracion 1: AY readln@tIFhor—AY write@ Minutos de la duracion 1: AY readln@tIFminAY write@ Segundos de la duracion 1: AY readln@tIFsegAY writelnY write@ Horas de la duracion 2: AY ITES PARANINFO c 38
  • 39. Programas en Pascal. Una introducción a la Programación. readln@tPFhor—AY write@ Minutos de la duracion 2: AY readln@tPFminAY write@ Segundos de la duracion 2: AY readln@tPFsegAY ƒum—rhur—™iones@tID tPD tQAY writelnY writeln@La suma de las duraciones es: D tQFhor—D -D tQFminD -D tQFsegAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•IHY(* * Algoritmo 3.10. Calcular la suma de dos duraciones de tiempo (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)uses ™rtY(*$R+*) (* Habilita la comprobacion de intervalos *)(*$Q+*) (* Habilita la comprobacion de desbordamiento (solo en version 7.0) *)type hur—™ion a record hor— X longintY minD seg X HFFSW endYvar tID tP X hur—™ionY (* entrada de datos *) tQ X hur—™ionY (* salida de datos *)procedure ƒum—rhur—™iones@—D ˜ X hur—™ionY var res X hur—™ionAY(* Las funciones SumarDuraciones y ConvertirSD del Algoritmo 3.10 se codifican mediante un procedimiento con un parametro paso por referencia, porque en Pascal una funcion no puede devolver un39 c ITES PARANINFO
  • 40. Programas en Pascal. Una introducción a la Programación. valor de un tipo registro *) function gonvertirhƒ@d X hur—™ionA X longintY begin gonvertirhƒ Xa QTHH B dFhor— C TH B dFmin C dFseg endY procedure gonvertirƒh@n X longintY var res X hur—™ionAY var d X hur—™ionY rh X HFFQSWWY begin dFhor— Xa n div QTHHY rh Xa n mod QTHHY dFmin Xa rh div THY dFseg Xa rh mod THY res Xa d endYbegin (* de SumarDuraciones *) gonvertirƒh@gonvertirhƒ@—A C gonvertirhƒ@˜AD resAYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 3.10. Calcular la suma de dos *****AY writeln@***** duraciones de tiempo (version 2) *****AY writeln@*****AY writelnY writeln@Introduzca dos duraciones:AY writelnY write@ Horas de la duracion 1: AY readln@tIFhor—AY write@ Minutos de la duracion 1: AY readln@tIFminAY write@ Segundos de la duracion 1: AY readln@tIFsegAY writelnY write@ Horas de la duracion 2: AY readln@tPFhor—AY write@ Minutos de la duracion 2: AY readln@tPFminAY write@ Segundos de la duracion 2: AY readln@tPFsegAY ƒum—rhur—™iones@tID tPD tQAY ITES PARANINFO c 40
  • 41. Programas en Pascal. Una introducción a la Programación. writelnY writeln@La suma de las duraciones es: D tQFhor—D -D tQFminD -D tQFsegAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoQ•IIY(* * Algoritmo 3.11. Comprobar si una fecha es valida (version 3) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 3. Acciones y funciones *)uses ™rtY(*$R+*) (* Habilita la comprobacion de intervalos *)(* $Q+ Habilita la comprobacion de desbordamiento (solo en version 7.0) *)const di—swes X array ‘IFFIP“ of integer a @QID PVD QID QHD QID QHD QID QID QHD QID QHD QIAYtype pe™h— a record di— X IFFQIY mes X IFFIPY —nyo X wordY endYvar f X pe™h—Y (* fecha dia/mes/anyo *)function enyofisiesto@—nyo X integerA X booleanY (* PRE anyo es un entero *) (* POST AnyoBisiesto es verdad si anyo es bisiesto y falso en caso contrario *)begin enyofisiesto Xa @—nyo mod R a HA and @—nyo mod IHH `b HA or @—nyo mod RHH a HA and @—nyo `b QTHHAY41 c ITES PARANINFO
  • 42. Programas en Pascal. Una introducción a la Programación.endYbegin ™lrs™rY writeln@Introduzca una fechaAY writelnY write@Introduzca el dia: AY readln@fFdi—AY write@Introduzca el mes: AY readln@fFmesAY write@Introduzca el anyo: AY readln@fF—nyoAY if enyofisiesto@fF—nyoA then di—swes‘P“ Xa PWY write@fFdi—D /D fFmesD /D fF—nyoD AY if @fFdi— `a di—swes‘fFmes“A then writeln@es una fecha validaA else writeln@no es una fecha validaAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥ ITES PARANINFO c 42
  • 43. Programas en Pascal. Una introducción a la Programación.3.3. Capítulo 4§ ¤program elgoritmoR•IY(* * Algoritmo 4.1. Calcular el valor medio de las notas de una asignatura * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar v X realY (* nota leida *) s X realY (* lleva cuenta de la suma total *) n X integerY (* lleva cuenta del numero de notas *)begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.1. Calcular el valor medio de ******AY writeln@***** las notas de una asignatura ******AY writeln@*****AY writelnY s Xa HY n Xa HY write@Introduzca una nota (valor 0 para terminar): AY readln@vAY (* E0 : s = 0 y n = 0 *) while v ba H do begin s Xa s C vY n Xa n C IY write@Introduzca una nota (valor 0 para terminar): AY readln@vAY (* Ei : s = suma de las n notas introducidas hasta este paso y n = numero de notas introducidas hasta este paso *) endY (* Ef : s = suma de todas las notas y n = numero total de notas introducidas *) if n b H then writeln@Valor medio de las notas = D sGnXIXPA else writeln@No hay valoresAY43 c ITES PARANINFO
  • 44. Programas en Pascal. Una introducción a la Programación. writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•PY(* * Algoritmo 4.2. Calcular el numero de ceros y unos en una secuencia * de caracteres ceros y unos * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion * Fichero de entrada: datos4_2.TXT *)uses ™rtD unitms™IYvar s X ms™IY (* secuencia de enteros *) numgeros X integerY (* contador del numero de ceros *) num…nos X integerY (* contador del numero de unos *) ™ X charYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.2. Calcular el numero de ceros *****AY writeln@***** y unos en una secuencia de caracteres *****AY writeln@*****AY writelnY „r—t—mientosni™i—l•wƒgI@sAY g—rg—r•pi™hero•wƒgI@sDdatos4_2.TXTAY numgeros Xa HY num…nos Xa HY write@La secuencia de entrada es: AY gomenz—r•wƒgI@sAY while @ie•wƒgI@sA `b wƒgI•w—r™—pinA do begin write@ie•wƒgI@sAD AY if ie•wƒgI@sA a 0 then numgeros Xa numgeros C I else num…nos Xa num…nos C IY ev—nz—r•wƒgI@sAY ITES PARANINFO c 44
  • 45. Programas en Pascal. Una introducción a la Programación. endY writelnY writeln@ Numero de ceros = D numgerosAY writeln@ Numero de unos = D num…nosAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•QY(* * Algoritmo 4.3. Crear una secuencia de caracteres a partir de otra existente * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion * Fichero de prueba: datos4_3.txt *)uses ™rtD unitms™IYvar sD t X ms™IYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.3. Crear una secuencia de caracteres *****AY writeln@***** a partir de otra existente *****AY writeln@*****AY writelnY „r—t—mientosni™i—l•wƒgI@sAY „r—t—mientosni™i—l•wƒgI@tAY g—rg—r•pi™hero•wƒgI@sDdatos4_3.TXTAY write@La secuencia de entrada es: AY gomenz—r•wƒgI@sAY err—n™—r•wƒgI@tAY while ie•wƒgI@sA `b wƒgI•w—r™—pin do begin if ie•wƒgI@sA a * then ‚egistr—r•wƒgI@tD +A else ‚egistr—r•wƒgI@tD ie•wƒgI@sAAY write@ie•wƒgI@sAAY ev—nz—r•wƒgI@sAY45 c ITES PARANINFO
  • 46. Programas en Pascal. Una introducción a la Programación. endY w—r™—r•wƒgI@tAY ƒ—lv—r•pi™hero•wƒgI@tDsal4_3.TXTAY writelnY write@La secuencia de salida es: AY gomenz—r•wƒgI@tAY while ie•wƒgI@tA `b wƒgI•w—r™—pin do begin write@ie•wƒgI@tAAY ev—nz—r•wƒgI@tAY endY writelnY writeln@GrabadoAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•RY(* * Algoritmo 4.4. Calcular el valor medio de una secuencia con las notas de una asignatura * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion * Fichero de entradas: datos4_4.txt *)uses ™rtD unitmsrIYvar s X msrIY sum— X realY (* lleva cuenta de la suma total de las notas *) numilem X integerY (* lleva cuenta del numero de notas *)begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.4. Calcular el valor medio de una secuencia *****AY writeln@***** con las notas de una asignatura *****AY writeln@*****AY writelnY ITES PARANINFO c 46
  • 47. Programas en Pascal. Una introducción a la Programación. „r—t—mientosni™i—l•wƒ‚I@sAY g—rg—r•pi™hero•wƒ‚I@sDdatos4_4.txtAY write@La secuencia de entrada es: AY gomenz—r•wƒ‚I@sAY sum— Xa HFHY numilem Xa HY(* Eini : suma = 0 y numElem = 0 y ea = Primero (S) y INV = Verdadero *) while ie•wƒ‚I@sA `b wƒ‚I•w—r™—pin do begin (* INV 1 = i = Long (Piz) y suma tiene el *) (* sumatorio desde i=1 hasta Long(Piz) de Si *) (* y numElem = Long (Piz) y (EA (S) MarcaFin) *) sum— Xa sum— C ie•wƒ‚I@sAY numilem Xa numilem C IY write@ie•wƒ‚I@sAXIXPD AY ev—nz—r•wƒ‚I@sAY endY(* Efin : INV y (EA (S) = MarcaFin) *) writelnY writelnY if @numilem b HA then write@Valor medio de las notas = D sum—GnumilemXIXPA else write@Secuencia vaciaAY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•SY(* * Algoritmo 4.5. Calcular el numero de pares ceros-unos en una secuencia de caracteres * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion * Fichero de entrada: datos4_5.txt *)uses ™rtD unitms™IYvar s X wƒgIY numgeros X integerY (* lleva cuenta del numero de 0 *)47 c ITES PARANINFO
  • 48. Programas en Pascal. Una introducción a la Programación. num€—res X integerY (* lleva cuenta del numero de pares *)begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.5. Calcular el numero de pares ceros-unos *****AY writeln@***** en una secuencia de caracteres *****AY writeln@*****AY writelnY „r—t—mientosni™i—l•wƒgI@sAY g—rg—r•pi™hero•wƒgI@sDdatos4_5.txtAY write@La secuencia de entrada es: AY gomenz—r•wƒgI@sAY numgeros Xa HY num€—res Xa HY (* INV y (EA = Primero (S)) *) while ie•wƒgI@sA `b wƒgI•w—r™—pin do begin (* INV : numPares = NumPares (Piz), numCeros = NumCeros (Piz) *) (* INV y (EA_MSC1 MarcaFin) *) case ie•wƒgI@sA of 0X numgeros Xa numgeros C IY 1X num€—res Xa num€—res C numgeros endY write@ie•wƒgI@sAAY ev—nz—r•wƒgI@sA endY writelnY writelnY (* INV y (EA = MarcaFin), numPares = NumPares (S) *) writeln@El numero de pares 0-1 es: D num€—resAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•TY(* * Algoritmo 4.6. Calculo del factorial (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion ITES PARANINFO c 48
  • 49. Programas en Pascal. Una introducción a la Programación. *)uses ™rtYvar nD i X integerY f—™tori—l X longintYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.6. Calculo del factorial (version 1) *****AY writeln@*****AY writelnY write@Introduzca un entero ( 17): A Y readln@nAY i Xa HY f—™tori—l Xa IY while i ` n do begin (* INV: factorial = i! *) i Xa i C IY f—™tori—l Xa f—™tori—l B i endY writelnY writeln@El factorial de D nD es: D f—™tori—lAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program —lgoritmoR•UY(* * Algoritmo 4.7. Calculo del factorial (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar49 c ITES PARANINFO
  • 50. Programas en Pascal. Una introducción a la Programación. nD i X integerY f—™tori—l X longintYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.7. Calculo del factorial (version 2) *****AY writeln@*****AY writelnY write@Introduzca un entero ( 17): AY readln@nAY f—™tori—l Xa IY for iXa P to n do f—™tori—l Xa f—™tori—l B iY (* INV factorial = i! *) writelnY writeln@El factorial de D nD es: D f—™tori—lAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•VY(* * Algoritmo 4.8. Calculo del producto mediante sumas sucesivas * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar —D ˜D produ™to X longintY i X longintYbegin ™lrs™rY writelnY writeln@*****AY ITES PARANINFO c 50
  • 51. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 4.8. Calculo del producto mediante sumas sucesivas *****A Y writeln@*****AY writelnY write@Introduzca dos numeros enteros separados por blancos: AY readln @—D ˜AY produ™to Xa HY for i Xa I to ˜ do produ™to Xa produ™to C —Y (* INV producto = a * i y 1 = i = b *) (* INV y (i = b), producto = a * b = POST *) writelnY writeln@ D —D *D ˜D =D produ™toAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•WY(* * Algoritmo 4.9. Calculo del cociente y resto de una division entera * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar pD ™D r X longintY q X longintYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.9. Calculo del cociente y resto de una division entera *****AY writeln@*****AY writelnY write@Introduzca dividendo (= 0) y divisor ( 0) separados por blancos: AY readln@pD qAY51 c ITES PARANINFO
  • 52. Programas en Pascal. Una introducción a la Programación. r Xa pY ™ Xa HY while r ba q do begin (* INV (p = q * c + r) y (r = 0) *) r Xa r E qY ™ Xa ™ C IY endY (* INV y (r q) = POST *) writelnY writeln@Cociente = D ™D Resto = D rAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•IHY(* * Algoritmo 4.10. Calculo del maximo comun divisor * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar —D ˜D uD v X wordYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.10. Calculo del maximo comun divisor *****AY writeln@*****AY writelnY write@Introduzca dos enteros ( 0) separados por blancos: AY readln@—D ˜AY u Xa —Y v Xa ˜Y while u `b v do begin (* INV (* mcd (a,b) = mcd (u,v) *) if @u b vA then u Xa u E v else v Xa v E uY endY ITES PARANINFO c 52
  • 53. Programas en Pascal. Una introducción a la Programación. (* INV y (u = v) *) writelnY writeln@Maximo comun divisor de D —D y D ˜D es: D uAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•IIY(* * Algoritmo 4.11. Calculo de las potencias de 2 (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar x X integerY (* indice inferior del intervalo de potencias *) y X integerY (* indice superior del intervalo *) i X integerYfunction €oten™i—P@n X integerAXlongintY(* PRE: n : Entero = 0 *)(* POST: Potencia2 = 2^n *)var p X longintY j X integerYbegin p Xa IY for j Xa I to n do p Xa p B PY (* INV p = 2^j *) €oten™i—P Xa pendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.11. Calculo de las potencias de 2 (version 1) *****AY53 c ITES PARANINFO
  • 54. Programas en Pascal. Una introducción a la Programación. writeln@*****AY writelnY write@Introduzca dos enteros (= 0) en orden creciente separados por blancos: AY readln@xD yAY writelnY for i Xa x to y do writeln@La potencia D iD -esima de 2 es D €oten™i—P@iAAY (* INV se han calculado y mostrado las potencias de 2 en el intervalo [x,i] *) writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•IPY(* * Algoritmo 4.12. Calculo de las potencias de 2 (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar x X integerY (* indice inferior *) y X integerY (* indice superior *) poten™i—P X longintY (* resultado *) i X integerYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.12. Calculo de las potencias de 2 (version 2) *****AY writeln@*****AY writelnY write@Introduzca dos enteros (= 0) en orden creciente separados por blancos: AY readln@xD yAY writelnY poten™i—P Xa IY for iXa I to x do ITES PARANINFO c 54
  • 55. Programas en Pascal. Una introducción a la Programación. poten™i—P Xa poten™i—P B PY (* INV potencia2 = 2^i *) writeln@La potencia D xD -esima de 2 es D poten™i—PAY for iXa xCI to y do begin poten™i—P Xa poten™i—P B PY writeln@La potencia D iD -esima de 2 es: D poten™i—PA (* INV potencia2 = 2^i y se han mostrado las potencias de 2 en el intervalo [x,i] *) endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•IQY(* * Algoritmo 4.13. Calculo del termino enesimo de la sucesion de Fibonacci * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar ultD penult X longintY (* ultimo y penultimo termino de Fibonacci *) ™opi—pi˜o X longintY (* valor Fibonacci en el paso i-1 *) fi˜o X longintY (* resultado *) n X integerY (* dato *) i XintegerYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.13. Calculo del termino enesimo *****AY writeln@***** de la sucesion de Fibonacci *****AY writeln@*****AY writelnY write@Introduzca un entero (= 0): AY readln@nAY55 c ITES PARANINFO
  • 56. Programas en Pascal. Una introducción a la Programación. writelnY case n of H X writeln@El termino DnD-esimo de la sucesion (posicion D nCID) es: 1 AY I X writeln@El termino DnD-esimo de la sucesion (posicion D nCID) es: 1 AY else penult Xa IY ult Xa IY fi˜o Xa PY for iXaQ to n do begin ™opi—pi˜o Xa fi˜oY fi˜o Xa fi˜o C ultY penult Xa ultY ult Xa ™opi—pi˜o (* INV (fibo = f(i)) y (ult = f(i-1)) y (penult = f(i-2)), 3 = i = n *) endY (* INV y (i = n) *) writeln@El termino DnD-esimo de la sucesion (posicion D nCID) es: D fi˜oA endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•IRY(* * Algoritmo 4.14. Comprobar si un numero es primo (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar n X longintY (* dato *) j X integerYbegin ™lrs™rY writelnY writeln@*****AY ITES PARANINFO c 56
  • 57. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 4.14. Comprobar si un numero es primo (version 1) *****AY writeln@*****AY writelnY write@Introduzca un entero ( 0): AY readln@nAY writelnY if n a I then writeln @1 es primoA else begin j Xa PY while @n mod jA `b H do j Xa j C IY (* INV ( i : 2 = i j : (n MOD i) 0) *) (* INV y (n MOD j = 0) *) if j a n then writeln @nD es primoA else writeln @nD no es primoA endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•ISY(* * Algoritmo 4.15. Comprobar si un numero es primo (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar n X longintY j X integerYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.15. Comprobar si un numero es primo (version 2) *****AY writeln@*****AY writelnY57 c ITES PARANINFO
  • 58. Programas en Pascal. Una introducción a la Programación. write@Introduzca un entero ( 0): AY readln@nAY writelnY if @n a IA or @n a PA or @n a QA then writeln@nD es primoA else if @n b QA and @@n mod PA a HA then writeln@nD es par, no es primoA else if @n b QA and @@n mod PA `b HA then begin j Xa QY while @@n mod jA `b HA and @j ` @n div jAA do j Xa j C PY (* INV (i : 3 = i j : (n MOD i) 0) *) (* INV y (n MOD j = 0) o (j = (n DIV j))*) if @n mod jA `b H then writeln@nD es primoA else writeln@nD no es primoAY endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•ITY(* * Algoritmo 4.16. Calcular la parte entera de la raiz cuadrada de un entero (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar nD r™ X longintY (* n dato de entrada, rc parte entera de la raiz *) i X longintYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.16. Calcular la parte entera de la raiz cuadrada *****A Y writeln@***** de un entero (version 1) *****AY writeln@*****AY ITES PARANINFO c 58
  • 59. Programas en Pascal. Una introducción a la Programación. writelnY write@Introduzca un entero: AY readln @nAY writelnY i Xa IY while @n ba i B iA do (* INV ( j : 1 = j i : (j^2 = n)) *) i Xa i C IY (* INV y (n i^2) *) r™ Xa i E IY writeln@La parte entera de la raiz cuadrada de D nD es: D r™AY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•IUY(* * Algoritmo 4.17. Calcular la parte entera de la raiz cuadrada de un entero (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar nD r™ X longintY (* n dato, rc resultado *) impD iD ™ X longintYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.17. Calcular la parte entera de la raiz cuadrada *****A Y writeln@***** de un entero (version 2) *****AY writeln@*****AY writelnY write@Introduzca un entero (= 0): AY readln @nAY59 c ITES PARANINFO
  • 60. Programas en Pascal. Una introducción a la Programación. writelnY i Xa IY ™ Xa IY imp Xa IY while ™ `a n do begin (* INV (j : 1 = j i : (j^2 = n) 0) y (c = i^2) y c es el i-esimo cuadrado, e imp es el i-esimo impar *) imp Xa imp C PY ™ Xa ™ C impY i Xa i C I endY (* INV y (n c) *) r™ Xa i E IY writeln@La parte entera de la raiz cuadrada de DnD es Dr™AY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•IVY(* * Algoritmo 4.18. Calcular 1/x a partir de una sucesion recurrente * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar x X realY (* dato entre 0 y 1 *) — X realY (* resultado *) ™ X realY (* para el calculo de la sucesion *) eps X realY (* error *)begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.18. Calcular 1/x a partir de una sucesion recurrente *****AY writeln@*****AY writelnY write@Introduzca un valor real (= 1) y ( 0): AY ITES PARANINFO c 60
  • 61. Programas en Pascal. Una introducción a la Programación. readln @xAY writelnY write@Introduzca el error permitido: AY readln@epsAY — Xa IY ™ Xa I E xY while @™ b epsA do begin — Xa — B @I C ™AY ™ Xa ™ B ™Y endY writelnY writeln@El resultado de evaluar la expresion 1/DxD es: D—AY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoR•IWY(* * Algoritmo 4.19. Aproxima e elevado a x a partir de su desarrollo en serie * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 4. La iteracion *)uses ™rtYvar x X integerY (* dato *) i X integerY (* numero de termino *) tD s X realY (* termino y suma de la serie *) eps X realY (* error *)begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 4.19. Aproxima e elevado a x a partir *****AY writeln@***** de su desarrollo en serie *****AY writeln@*****AY writelnY write@Introduzca un entero: AY readln@xAY61 c ITES PARANINFO
  • 62. Programas en Pascal. Una introducción a la Programación. writelnY write@Introduzca el error permitido: AY readln@epsAY t Xa IY s Xa tY i Xa HY while t b eps do begin i Xa i C IY t Xa t B @x G iAY s Xa s C tY endY writelnY writeln@e elevado a DxD es: DsAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥ ITES PARANINFO c 62
  • 63. Programas en Pascal. Una introducción a la Programación.3.4. Capítulo 5§ ¤program elgoritmoS•IY(* * Algoritmo 5.1. Calcular el numero de pares (primer modelo, tercer esquema) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_1.txt *)uses ™rtD unitmseIYvar —D ˜ X integerY numeD numf X integerY num€—res X integerY ƒ X mseIYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.1. Calcular el numero de pares *****AY writeln@***** (primer modelo, tercer esquema) *****AY writeln@*****AY writelnY writeln@Introduzca un par de enteros distintos:AY write@ primer entero: AY readln@—AY write@ segundo entero: AY readln@˜AY writelnY write@La secuencia de entrada es: AY „r—t—mientosni™i—l•wƒiI@ƒAY g—rg—r•fi™hero•wƒiI@ƒDdatos5_1.txtAY gomenz—r•wƒiI@ƒAY if ie•wƒiI@ƒA a wƒiI•w—r™—pin then write @Secuencia vaciaA else begin num€—res Xa HY if ie•wƒiI@ƒA a — then begin nume Xa IY numf Xa H end else if ie•wƒiI@ƒA a ˜ then begin nume Xa HY numf Xa I end63 c ITES PARANINFO
  • 64. Programas en Pascal. Una introducción a la Programación. else begin nume Xa HY numf Xa H endY (* Se utiliza la equivalencia ITERAR-MIENTRAS *) write@ie•wƒiI@ƒAD AY ev—nz—r•wƒiI@ƒAY while ie•wƒiI@ƒA `b wƒiI•w—r™—pin do begin if ie•wƒiI@ƒA a — then begin num€—res Xa num€—res C numfY nume Xa nume C I end else if ie•wƒiI@ƒA a ˜ then begin num€—res Xa num€—res C numeY numf Xa numf C I endY write@ie•wƒiI@ƒAD AY ev—nz—r•wƒiI@ƒA endY writelnY writelnY writeln@El numero de pares (D —D, D ˜D ), (D ˜D , D —D ) es: D num€—resAY endY writelnY write @Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoS•PY(* * Algoritmo 5.2. Calcular el numero de pares (segundo modelo, tercer esquema) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_2.txt *)uses ™rtD unitmsePYvar —D ˜ X integerY numeD numf X integerY num€—res X integerY ƒ X msePY ITES PARANINFO c 64
  • 65. Programas en Pascal. Una introducción a la Programación.begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.2. Calcular el numero de pares *****AY writeln@***** (segundo modelo, tercer esquema) *****AY writeln@*****AY writelnY writeln@Introduzca un par de enteros distintos:AY write@ primer entero: AY readln @—AY write@ segundo entero: AY readln@˜AY writelnY write@La secuencia de entrada es: AY „r—t—mientosni™i—l•wƒiP@sAY g—rg—r•fi™hero•wƒiP@ƒDdatos5_2.txtAY sni™e™™eso•wƒiP@ƒAY if is†—™i—•wƒiP@ƒA then write@Secuencia vaciaA else begin ev—nz—r•wƒiP@ƒAY write@ie•wƒiP@ƒAD AY num€—res Xa HY if ie•wƒiP@ƒA a — then begin nume Xa IY numf Xa H end else if ie•wƒiP@ƒA a ˜ then begin nume Xa HY numf Xa I end else begin nume Xa HY numf Xa H endY while not is…ltimo•wƒiP@ƒA do begin ev—nz—r•wƒiP@ƒAY write@ie•wƒiP@ƒAD AY if ie•wƒiP@ƒA a — then begin num€—res Xa num€—res C numfY nume Xa nume C I end else if ie•wƒiP@ƒA a ˜ then begin num€—res Xa num€—res C numeY numf Xa numf C I end endY writelnY writelnY writeln@El numero de pares (D —D, D ˜D ), (D ˜D , D —D ) es: D num€—resAY endY writelnY write@Pulse enter para continuarAY readln65 c ITES PARANINFO
  • 66. Programas en Pascal. Una introducción a la Programación.endF¦ ¥§ ¤program elgoritmoS•QY(* * Algoritmo 5.3. Calcular el numero de pares (tercer modelo, segundo esquema) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_3.txt *)uses ™rtD unitmseIYvar —D ˜ X integerY numeD numf X integerY num€—res X integerY ƒ X mseIY(* * Maquina abstracta del tercer modelo a partir de * una maquina secuencial del primer modelo *) —ux X integerYprocedure „r—t—mientosni™i—l•wƒiQ@VAR ƒ X mseIAYbegin „r—t—mientosni™i—l•wƒiI@ƒAYendYprocedure gomenz—r•wƒiQ@VAR ƒ X mseIAYbegin gomenz—r•wƒiI@ƒAY —ux Xa ie•wƒiI @ƒAY ev—nz—r•wƒiI@ƒAYendYprocedure ev—nz—r•wƒiQ@VAR ƒ X mseIAYbegin —ux Xa ie•wƒiI @ƒAY ev—nz—r•wƒiI@ƒAYendY ITES PARANINFO c 66
  • 67. Programas en Pascal. Una introducción a la Programación.function ie•wƒiQ@VAR ƒ X mseIA X integerYbegin ie•wƒiQ Xa —uxYendYprocedure g—rg—r•pi™hero•wƒiQ@var ƒ X mseIY nom˜re X stringAYbegin g—rg—r•pi™hero•wƒiI@ƒD nom˜reAYendYfunction is†—™i—•wƒiQ@ƒ X mseIA X booleanYbegin is†—™i—•wƒiQ Xa ie•wƒiI@ƒA a wƒiI•w—r™—pinYendYfunction is…ltimo•wƒiQ@ƒ X mseIA X booleanYbegin is…ltimo•wƒiQ Xa ie•wƒiI@ƒA a wƒiI•w—r™—pinendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.3. Calcular el numero de pares *****AY writeln@***** (tercer modelo, segundo esquema) *****AY writeln@*****AY writelnY writeln@Introduzca un par de enteros distintos:AY write@ primer entero: AY readln@—AY write@ segundo entero: AY readln@˜AY writelnY write@La secuencia de entrada es: AY „r—t—mientosni™i—l•wƒiQ@sAY g—rg—r•fi™hero•wƒiQ@ƒDdatos5_3.txtAY gomenz—r•wƒiQ@ƒAY if is†—™i—•wƒiQ@ƒA then write@Secuencia vaciaA else begin num€—res Xa HY nume Xa HY numf Xa HY (* Se utiliza la equivalencia ITERAR-MIENTRAS *) if ie•wƒiQ@ƒA a — then begin num€—res Xa num€—res C numfY nume Xa nume C I67 c ITES PARANINFO
  • 68. Programas en Pascal. Una introducción a la Programación. end else if ie•wƒiQ@ƒA a ˜ then begin num€—res Xa num€—res C numeY numf Xa numf C I endY write@ie•wƒiQ@ƒAD AY while not is…ltimo•wƒiQ@ƒA do begin ev—nz—r•wƒiQ@ƒAY write@ie•wƒiQ@ƒAD AY if ie•wƒiQ@ƒA a — then begin num€—res Xa num€—res C numfY nume Xa nume C I end else if ie•wƒiQ@ƒA a ˜ then begin num€—res Xa num€—res C numeY numf Xa numf C I endY endY writelnY writelnY writeln@El numero de pares (D —D, D ˜D ), (D ˜D , D —D ) es: D num€—resAY endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoS•RY(* * Algoritmo 5.4. Calcular el numero de pares (cuarto modelo, segundo esquema) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_4.txt *)uses ™rtD unitmseIYconst wƒiR•w—r™—pin a wƒiI•w—r™—pinYvar ITES PARANINFO c 68
  • 69. Programas en Pascal. Una introducción a la Programación. —D ˜ X integerY numeD numf X integerY num€—res X integerY ƒ X mseIY(* * Maquina abstracta del cuarto modelo a partir de * una maquina secuencial del primer modelo *) ™omenz—r X booleanYprocedure „r—t—mientosni™i—l•wƒiR@VAR ƒ X mseIAYbegin „r—t—mientosni™i—l•wƒiI@ƒAYendYprocedure sni™i—r•wƒiR@VAR ƒ X mseIAYbegin gomenz—r•wƒiI@ƒAY ™omenz—r Xa falseYendYprocedure ev—nz—r•wƒiR@VAR ƒ X mseIAYbegin if not ™omenz—r then ™omenz—r Xa true else ev—nz—r•wƒiI@ƒAYendYfunction ie•wƒiR@VAR ƒ X mseIA X integerYbegin ie•wƒiR Xa ie•wƒiI @ƒAYendYprocedure g—rg—r•pi™hero•wƒiR@var ƒ X mseIY nom˜re X stringAYbegin g—rg—r•pi™hero•wƒiI@ƒD nom˜reAYendYfunction is†—™i—•wƒiR@ƒ X mseIA X booleanYbegin is†—™i—•wƒiR Xa ie•wƒiI@ƒA a wƒiI•w—r™—pinYendYbegin ™lrs™rY writelnY writeln@*****AY69 c ITES PARANINFO
  • 70. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 5.4. Calcular el numero de pares *****AY writeln@***** (cuarto modelo, segundo esquema) *****AY writeln@*****AY writelnY writeln@Introduzca un par de enteros distintos:AY write@ primer entero: AY readln@—AY write@ segundo entero: AY readln@˜AY writelnY write@La secuencia de entrada es: AY „r—t—mientosni™i—l•wƒiR@sAY g—rg—r•fi™hero•wƒiR@ƒDdatos5_4.txtAY sni™i—r•wƒiR@ƒAY if is†—™i—•wƒiR@ƒA then write@Secuencia vaciaA else begin num€—res Xa HY nume Xa HY numf Xa HY ev—nz—r•wƒiR@ƒAY REPEAT if ie•wƒiR@ƒA a — then begin num€—res Xa num€—res C numfY nume Xa nume C I end else if ie•wƒiR@ƒA a ˜ then begin num€—res Xa num€—res C numeY numf Xa numf C I endY write@ie•wƒiR@ƒAD AY ev—nz—r•wƒiR @ƒAY UNTIL ie•wƒiR@ƒA a wƒiR•w—r™—pinY writelnY writelnY writeln@El numero de pares (D —D, D ˜D ), (D ˜D , D —D ) es: D num€—resAY endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoS•SY(* * Algoritmo 5.5. Comprobar si hay una nota mayor o igual que 9 (primer modelo) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico ITES PARANINFO c 70
  • 71. Programas en Pascal. Una introducción a la Programación. * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_5.txt *)uses ™rtD unitmsrIYvar ƒ X msrIYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.5. Comprobar si hay una nota mayor o igual que 9 *****A Y writeln@***** (primer modelo) *****AY writeln@*****AY writelnY „r—t—mientosni™i—l•wƒ‚I@ƒAY g—rg—r•fi™hero•wƒ‚I@ƒDdatos5_5.txtAY write@La secuencia de entrada es: AY gomenz—r•wƒ‚I@ƒAY while @ie•wƒ‚I@ƒA `b wƒ‚I•w—r™—pinA do begin write@ie•wƒ‚I@ƒAXIXPD AY ev—nz—r•wƒ‚I@ƒAY endY gomenz—r•wƒ‚I@ƒAY while @ie•wƒ‚I@ƒA `b wƒ‚I•w—r™—pinA and not @ie•wƒ‚I@ƒA ba WA do begin ev—nz—r•wƒ‚I@ƒAY endY (* INV No existe en Piz una nota superior o igual a 9 *) (* fin while *) writelnY writelnY if ie•wƒ‚I@ƒA a wƒ‚I•w—r™—pin then write@No existe ninguna nota superior o igual a 9A else write@Al menos existe una nota superior o igual a 9AY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥71 c ITES PARANINFO
  • 72. Programas en Pascal. Una introducción a la Programación.§ ¤program elgoritmoS•TY(* * Algoritmo 5.6. Comprobar si hay una nota mayor o igual que 9 (segundo modelo) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_6.txt *)uses ™rtD unitmsrPYvar ƒ X msrPYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.6. Comprobar si hay una nota mayor o igual que 9 *****A Y writeln@***** (segundo modelo) *****AY writeln@*****AY writelnY „r—t—mientosni™i—l•wƒ‚P@ƒAY g—rg—r•fi™hero•wƒ‚P@ƒDdatos5_6.txtAY write@La secuencia de entrada es: AY sni™e™™eso•wƒ‚P@ƒAY if not is†—™i—•wƒ‚P@ƒA then REPEAT (* INV No existe en Piz una nota superior o igual a 9 *) ev—nz—r•wƒ‚P@ƒAY write@ie•wƒ‚P@ƒAXIXPD A UNTIL @is…ltimo•wƒ‚P@ƒAAY sni™e™™eso•wƒ‚P@ƒAY if is†—™i—•wƒ‚P@ƒA then write@Nadie se ha presentado al examenA else begin REPEAT (* INV No existe en Piz una nota superior o igual a 9 *) ev—nz—r•wƒ‚P@ƒAY UNTIL is…ltimo•wƒ‚P@ƒA or @ie•wƒ‚P@ƒA ba WAY writelnY writelnY ITES PARANINFO c 72
  • 73. Programas en Pascal. Una introducción a la Programación. if ie•wƒ‚P@ƒA ba W then write@Al menos existe una nota superior o igual a 9A else write@No existe ninguna nota superior o igual a 9A endY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoS•UY(* * Algoritmo 5.7. Calculo posicion de la primera palabra que comienza por a * (primer modelo, primer esquema) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_7.txt *)uses ™rtD unitms™IYconst iƒ€egsy a Yvar posi™ion X integerY —nterior X charY ƒ X ms™IYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.7. Calculo posicion de la primera palabra *****AY writeln@***** que comienza por a (primer modelo, primer esquema) *****AY writeln@*****AY writelnY write@La secuencia de entrada es: AY „r—t—mientosni™i—l•wƒgI@ƒAY g—rg—r•fi™hero•wƒgI@ƒDdatos5_7.txtAY73 c ITES PARANINFO
  • 74. Programas en Pascal. Una introducción a la Programación. gomenz—r•wƒgI @ƒAY while @ie•wƒgI @ƒA `b wƒgI•w—r™—pinA do begin write@ie•wƒgI@ƒAAY ev—nz—r•wƒgI @ƒA endY writelnY gomenz—r•wƒgI @ƒAY posi™ion Xa HY —nterior Xa iƒ€egsyY while @ie•wƒgI @ƒA `b wƒgI•w—r™—pinA and not @@ie•wƒgI @ƒA a aA and @—nterior a iƒ€egsyAA do begin posi™ion Xa posi™ion C IY —nterior Xa ie•wƒgI @ƒAY ev—nz—r•wƒgI @ƒA (* INV En Piz ninguna palabra empieza por a y posicion = Long (Piz) *) endY if ie•wƒgI @ƒA a wƒgI•w—r™—pin then write@El texto no contiene ninguna palabra que comience por la letra aA else write@Posicion de la primera palabra que comienza por a es: D posi™ionCIAY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoS•VY(* * Algoritmo 5.8. Calculo posicion de la primera palabra que comienza por a * (primer modelo, tercer esquema) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_8.txt *)uses ™rtD unitms™IYconst iƒ€egsy a Yvar ITES PARANINFO c 74
  • 75. Programas en Pascal. Una introducción a la Programación. posi™ion X integerY —nterior X charY ƒ X ms™IYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.8. Calculo posicion de la primera palabra *****AY writeln@***** que comienza por a (primer modelo, tercer esquema) *****AY writeln@*****AY writelnY write@La secuencia de entrada es: AY „r—t—mientosni™i—l•wƒgI@ƒAY g—rg—r•fi™hero•wƒgI@ƒDdatos5_8.txtAY gomenz—r•wƒgI @ƒAY while @ie•wƒgI @ƒA `b wƒgI•w—r™—pinA do begin write@ie•wƒgI@ƒAAY ev—nz—r•wƒgI @ƒA endY writelnY gomenz—r•wƒgI @ƒAY if ie•wƒgI@ƒA a wƒgI•w—r™—pin then write@La secuencia esta vaciaA else if ie•wƒgI @ƒA a a then write@Posicion de la primera palabra que comienza por a es: D IA else begin posi™ion Xa IY —nterior Xa ie•wƒgI @ƒAY (* Se utiliza la equivalencia ITERAR-MIENTRAS *) (* INV En Piz ninguna palabra empieza por a y posicion = Long (Piz) *) ev—nz—r•wƒgI @ƒAY while not @@ie•wƒgI@ƒA a wƒgI•w—r™—pinA or @@ie•wƒgI@ƒA a aA and @—nterior a iƒ€egsyAAA do begin posi™ion Xa posi™ion C IY —nterior Xa ie•wƒgI@ƒAY ev—nz—r•wƒgI @ƒAY endY writelnY if ie•wƒgI@ƒA a wƒgI•w—r™—pin then write@El texto no contiene ninguna palabra que comience por la letra aA else write@Posicion de la primera palabra que comienza por a es: D posi™ionCIA endY75 c ITES PARANINFO
  • 76. Programas en Pascal. Una introducción a la Programación. writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoS•WY(* * Algoritmo 5.9. Comprobar si todas las palabras acaban con la misma letra * (primer modelo, sin secuencia intermedia) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: datos5_9.txt *)uses ™rtD unitms™IYconst iƒ€egsy a Yvar ultvetr—€rim€—lD —nterior X charY ƒ X ms™IYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.9. Comprobar si todas las palabras acaban con la misma *****AY writeln@***** letra (primer modelo, sin secuencia intermedia) *****A Y writeln@*****AY writelnY(* Esquema de recorrido y busqueda. Encontrar letra final de la primera palabra *) „r—t—mientosni™i—l•wƒgI@ƒAY g—rg—r•fi™hero•wƒgI@ƒDdatos5_9.txtAY write@La secuencia de entrada es: AY gomenz—r•wƒgI @ƒAY while @ie•wƒgI @ƒA `b wƒgI•w—r™—pinA do begin ITES PARANINFO c 76
  • 77. Programas en Pascal. Una introducción a la Programación. write@ie•wƒgI@ƒAAY ev—nz—r•wƒgI @ƒA endY writelnY gomenz—r•wƒgI@ƒAY —nterior Xa iƒ€egsyY while @ie•wƒgI@ƒA `b wƒgI•w—r™—pinA and not @@ie•wƒgI@ƒA a iƒ€egsyA and @—nterior `b iƒ€egsyAA do begin —nterior Xa ie•wƒgI@ƒAY ev—nz—r•wƒgI@ƒA (* INV anterior = ultimo elemento de Piz y no hay ningun par (letra, espacio) en Piz *) endY writelnY if @ie•wƒgI@ƒA a wƒgI•w—r™—pinA and @—nterior a iƒ€egsyA then write@No hay palabras en la secuenciaA else if @ie•wƒgI@ƒA a wƒgI•w—r™—pinA then (* (* óSlo hay una palabra y anterior ESPACIO *) write@Todas las palabras terminan en la misma letraA else begin (* EA (S) es un espacio en blanco Esquema de recorrido y busqueda. Comprobar en el resto de la secuencia *) ultvetr—€rim€—l Xa —nteriorY —nterior Xa ie•wƒgI@ƒAY ev—nz—r•wƒgI@ƒAY while @ie•wƒgI@ƒA `b wƒgI•w—r™—pinA and not @@ie•wƒgI@ƒA a iƒ€egsyA and @—nterior `b iƒ€egsyA and @—nterior `b ultvetr—€rim€—lAA do begin —nterior Xa ie•wƒgI@ƒAY ev—nz—r•wƒgI@ƒA (* INV anterior = ultimo elemento de Piz y no hay ningun par (letra, espacio) en Piz tal que letra ultLetraPrimPal *) endY if @ie•wƒgI@ƒA a wƒgI•w—r™—pinA and @@—nterior a ultvetr—€rim€—lA or @—nterior a iƒ€egsyAA then write@Todas las palabras terminan en la misma letraA else write@Todas las palabras no terminan en la misma letraA endY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤77 c ITES PARANINFO
  • 78. Programas en Pascal. Una introducción a la Programación.program elgoritmoS•IHY(* * Algoritmo 5.10. Comprobar si todas las palabras acaban con la misma letra * (primer modelo, con secuencia intermedia formada por las * ultimas letras de cada palabra) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: dat5_10.txt *)uses ™rtD unitms™IYconst iƒ€egsy a Yvar ultvetr— X charY pinheƒe™uen™i—…ltvetr— X booleanY ultvetr—€rim€—l X charY ƒ X ms™IYprocedure y˜tener…ltimoY (* POST ultLetra es la ¿ltima letra de la siguiente palabra, si la hay, y se actualiza FinDeSecuenciaUltLetra *) procedure sgnor—risp—™iosY (* POST EA es la siguiente letra, si la hay *) begin while @ie•wƒgI@ƒA `b wƒgI•w—r™—pinA and @ie•wƒgI@ƒA a iƒ€egsyA do ev—nz—r•wƒgI@ƒAY endYbegin sgnor—risp—™iosY if @ie•wƒgI@ƒA a wƒgI•w—r™—pinA then pinheƒe™uen™i—…ltvetr— Xa true else begin pinheƒe™uen™i—…ltvetr— Xa FalseY REPEAT ultvetr— Xa ie•wƒgI@ƒAY ev—nz—r•wƒgI@ƒA UNTIL @ie•wƒgI@ƒA a wƒgI•w—r™—pinA or @ie•wƒgI@ƒA a iƒ€egsyAY endYendY ITES PARANINFO c 78
  • 79. Programas en Pascal. Una introducción a la Programación.procedure gomenz—r…ltvetr—Y (* POST ultLetra es la ultima letra de la primera palabra, si la hay, y se actualiza FinDeSecuenciaUltLetra *)begin gomenz—r•wƒgI@ƒAY y˜tener…ltimoendYprocedure ev—nz—r…ltvetr—Y (* POST ultLetra es la última letra de la siguiente palabra, si la hay, y se actualiza FinDeSecuenciaUltLetra *)begin y˜tener…ltimoendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 5.10. Comprobar si todas las palabras acaban con *****AY writeln@***** la misma letra (primer modelo, con secuencia *****AY writeln@***** intermedia formada por las ultimas letras *****AY writeln@***** de cada palabra) *****AY writeln@*****AY writelnY „r—t—mientosni™i—l•wƒgI@ƒAY g—rg—r•fi™hero•wƒgI@ƒDdat5_10.txtAY write@La secuencia de entrada es: AY gomenz—r•wƒgI @ƒAY while @ie•wƒgI @ƒA `b wƒgI•w—r™—pinA do begin write@ie•wƒgI@ƒAAY ev—nz—r•wƒgI @ƒA endY writelnY gomenz—r…ltvetr—Y if pinheƒe™uen™i—…ltvetr— then write@No hay palabrasA else begin ultvetr—€rim€—l Xa ultvetr—Y repeat ev—nz—r…ltvetr— (* INV Todas las letras de Piz son iguales a ultLetraPrimPal *) until pinheƒe™uen™i—…ltvetr— or @ultvetr— `b ultvetr—€rim€—lAY writelnY if pinheƒe™uen™i—…ltvetr— then write@Todas las palabras terminan en la misma letraA else write@Todas las palabras no terminan en la misma letraA79 c ITES PARANINFO
  • 80. Programas en Pascal. Una introducción a la Programación. endY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoS•IIY(* * Algoritmo 5.11. Obtener el k-abecedario de mayor longitud * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: dat5_11.txt *)(* El codigo ASCII de la enye no se encuentra entre el codigo ASCII *)(* de la letra n y la letra o *)uses ™rtD unitms™IYtype „ue˜e™ed—rio a record long X integerY primer—vetr— X char endYvar kefg X „ue˜e™ed—rioY is…ltimokefgD is†—™i—kefg X booleanY —nterior X charY m—yorkefg X „ue˜e™ed—rioY i X integerY ƒ X ms™IYprocedure in™ontr—rsnikefgY (* PRE EA es el primer caracter de la secuencia o el siguiente despues del ultimo k-abecedario en Piz, si lo hay *) (* POST EA es la segunda letra del siguiente k-abecedario, si lo hay *)begin ITES PARANINFO c 80
  • 81. Programas en Pascal. Una introducción a la Programación. repeat —nterior Xa ie•wƒgI@ƒAY ev—nz—r•wƒgI@ƒAY (* INV No hay ningun k-abecedario entre EA y el ultimo k-abecedario en Piz, si lo hay *) until @ie•wƒgI@ƒA a wƒgI•w—r™—pinA or @ie•wƒgI@ƒA a ƒu™™@—nteriorAAY is…ltimokefg Xa ie•wƒgI@ƒA a wƒgI•w—r™—pinendYprocedure sni™i—rkefgY (* POST Se actualizan EsVaciakABC y EsUltimokABC, y anterior y EA contienen el primer y el segundo caracter, respectivamente del primer k-abecedario, si lo hay *)begin gomenz—r•wƒgI@ƒAY if ie•wƒgI@ƒA a wƒgI•w—r™—pin then begin is…ltimokefg Xa trueY is†—™i—kefg Xa trueY end else begin in™ontr—rsnikefgY is†—™i—kefg Xa ie•wƒgI@ƒA a wƒgI•w—r™—pinY endYendYprocedure ev—nz—rkefgY (* PRE EsUltimokABC = Falso y EA es el segundo caracter del actual k-abecedario *) (* POST kABC contiene la longitud y el primer caracter del actual k-abecedario, EA es el segundo caracter del siguiente k-abecedario, si lo hay, y se actualiza EsUltimokABC *)begin kefgFlong Xa IY kefgFprimer—vetr— Xa —nteriorY REPEAT kefgFlong Xa kefgFlong C IY —nterior Xa ie•wƒgI@ƒAY ev—nz—r•wƒgI@ƒAY (* INV kABC.long mantiene la longitud del k-abecedario actual *) until @ie•wƒgI@ƒA a wƒgI•w—r™—pinA or @ie•wƒgI@ƒA `b ƒu™™@—nteriorAAY if @ie•wƒgI@ƒA a wƒgI•w—r™—pinA then is…ltimokefg Xa true else in™ontr—rsnikefgendYbegin „r—t—mientosni™i—l•wƒgI@ƒAY g—rg—r•fi™hero•wƒgI@ƒDdat5_11.txtAY81 c ITES PARANINFO
  • 82. Programas en Pascal. Una introducción a la Programación. ™lrs™rY writelnY writeln @*****AY writeln @***** Algoritmo 5.11 Obtener el k-abecedario de mayor longitudAY writeln @*****AY writelnY write@La secuencia de entrada es: AY gomenz—r•wƒgI @ƒAY while @ie•wƒgI @ƒA `b wƒgI•w—r™—pinA do begin write@ie•wƒgI@ƒAAY ev—nz—r•wƒgI @ƒA endY writelnY sni™i—rkefgY if is†—™i—kefg then write@No hay k-abecedariosA else begin ev—nz—rkefgY m—yorkefg Xa kefgY while not is…ltimokefg do begin ev—nz—rkefgY if m—yorkefgFlong ` kefgFlong then m—yorkefg Xa kefg (* INV mayorkABC.long mantiene la longitud del maximo k-abecedario de Piz *) endY writelnY writeln@El k-abecedario de mayor longitud es: AY writelnY writeln@ longitud: D m—yorkefgFlongAY writelnY write@ k-abecedario: AY for i Xa I to m—yorkefgFlong do write@™hr@ord@m—yorkefgFprimer—letr—ACiEIAAY endY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoS•IPY(* * Algoritmo 5.12. Control de trafico en una autopista * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman ITES PARANINFO c 82
  • 83. Programas en Pascal. Una introducción a la Programación. * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 5. Tecnicas de disenyo de algoritmos * Fichero de entrada: dat5_12.txt *)uses ™rtD unitmseIYvar numƒeg„ot—l X integerY (* Numero de segundos transcurridos durante el control *) num†ehint X integerY (* Numero de vehiculos que han entrado en la autopista *) numƒegsnterw—sv—rgo X integerY (* Intervalo de tiempo mas largo sin entrar vehiculos *) numƒegsntere™tu—l X integerY (* Contador del numero de segundos del intervalo actual *) ƒ X mseIYbegin ™lrs™rY writelnY writeln @*****AY writeln @***** Algoritmo 5.12 Control de trafico en una autopista *****AY writeln @*****AY writelnY „r—t—mientosni™i—l•wƒiI@ƒAY g—rg—r•fi™hero•wƒiI@ƒDdat5_12.txtAY gomenz—r•wƒiI@ƒAY numƒeg„ot—l Xa HY num†ehint Xa HY numƒegsnterw—sv—rgo Xa HY write @La secuencia de entrada es: AY while ie•wƒiI@ƒA `b H do begin write@ie•wƒiI@ƒAD AY case ie•wƒiI@ƒA of P X begin num†ehint Xa num†ehint C IY ev—nz—r•wƒiI@ƒA endY I X begin numƒegsntere™tu—l Xa IY ev—nz—r•wƒiI@ƒAY while not @@ie•wƒiI@ƒA a HA or @ie•wƒiI@ƒA a PAA do begin write@ie•wƒiI@ƒAD AY if ie•wƒiI@ƒA a I then83 c ITES PARANINFO
  • 84. Programas en Pascal. Una introducción a la Programación. numƒegsntere™tu—l Xa numƒegsntere™tu—l C IY ev—nz—r•wƒiI@ƒAY endY if numƒegsntere™tu—l b numƒegsnterw—sv—rgo then numƒegsnterw—sv—rgo Xa numƒegsntere™tu—lY numƒeg„ot—l Xa numƒeg„ot—l C numƒegsntere™tu—l endY else ev—nz—r•wƒiI@ƒAY endY endY writelnY writelnY writeln@El tiempo total transcurrido es: D numƒeg„ot—lAY writelnY writeln@El numero de vehiculos que han circulado por la autopista es: D num†ehintAY writelnY writeln@El intervalo de tiempo mas largo sin entrar un vehiculo es: D numƒegsnterw—sv—rgoAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥ ITES PARANINFO c 84
  • 85. Programas en Pascal. Una introducción a la Programación.3.5. Capítulo 6§ ¤program elgoritmoT•IY(* * Algoritmo 6.1. Mostrar la nota de un alumno (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas * Fichero de entrada: datos6_1.dat *)(* Para generar el fichero datos6_1.dat emplear el programa genf6_1.pas *)(* Para consultar el fichero datos6_1.dat emplear el programa verf6_1.pas *)(* En este algoritmo se ha sustituido la secuencia de NotaAlumno por un fichero secuencial, datos6_1.dat *)uses ™rtYconst weˆ•ev…wxyƒ a PHHYtype xot—elumno a record ™odigo X IFFweˆ•ev…wxyƒY not— X realY endYvar f X file of xot—elumnoY —lum X xot—elumnoY ™od X IFFweˆ•ev…wxyƒYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.1. Mostrar la nota de un alumno (version 1) *****AY writeln@*****AY writelnY —ssign@fDdatos6_1.datAY reset@fAY write@Introduzca el codigo del alumno (= 1) (= D weˆ•ev…wxyƒD ): AY readln@™odAY85 c ITES PARANINFO
  • 86. Programas en Pascal. Una introducción a la Programación. if eof@fA then writeln@El fichero esta vacioA else begin repeat read@fD—lumAY until @eof@fAA or @—lumF™odigo a ™odAY (* Si el codigo es el ultimo, eof sera TRUE, por ello debemos preguntar por alum.codigo para determinar su presencia *) writelnY if @—lumF™odigo `b ™odA then writeln@No existe ese codigoA else writeLn@La nota de este alumno es: D—lumFnot—XIXPAY endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•PY(* * Algoritmo 6.2. Mostrar la nota de un alumno (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)(* En lugar de solicitar las notas, se ha declarado la tabla constante *)uses ™rtYconst weˆ•ev…wxyƒ a IHH Y not—s X array ‘IFFweˆ•ev…wxyƒ“ of real a @IFHD QFSD SFPD IFPD PFUD SFQD TFPD PFPD IFPD VFPD QFSD SFPD IFPD PFUD QFUD PFPD IFPD VFPD SFRD QFPD SFQD TFUD PFPD IFPD VFPD QFSD SFPD IFPD PFUD QFRD PFPD IFWD VFPD SFRD QFPD SFQD TFPD PFPD IFPD VFPD SFSD SFPD IFPD PFUD QFRD PFPD IFPD VFPD SFRD QFPD SFQD TFWD PFPD IFPD VFPD QFSD SFPD WFPD PFUD QFRD PFTD IFPD VFPD SFRD QFPD SFQD TFPD PFPD IFPD VFPD QFRD SFPD WFPD PFUD QFRD PFPD IFWD VFPD SFRD QFPD ITES PARANINFO c 86
  • 87. Programas en Pascal. Una introducción a la Programación. WFHD TFPD UFPD IFPD VFPD QFWD SFPD IFPD PFUD QFRD PFRD IFPD UFPD SFRD QFWD SFQD TFPD PFPD IFPD VFPAYvar ™od X IFFweˆ•ev…wxyƒYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.2. Mostrar la nota de un alumno (version 2) *****AY writeln@*****AY writelnY write@Introduzca el codigo del alumno (= 1) y (= D weˆ•ev…wxyƒD ): AY readln@™odAY writelnY if @not—s‘™od“ `b EIFHA then writeln@La nota del alumno D™odD es: D not—s‘™od“XIXPA else writeln@No existe una calificacion para ese alumnoAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•QY(* * Algoritmo 6.3. Calculo de la frecuencia de aparicion de las letras mayusculas en un texto * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas * Fichero de entrada: datos6_3.txt *)uses ™rtD unitms™IYtype pre™uen™i—vetr—s a array ‘AFFZ“ of integerYvar tf X pre™uen™i—vetr—sY s X ms™IY87 c ITES PARANINFO
  • 88. Programas en Pascal. Una introducción a la Programación.procedure sni™i—liz—r„—˜l—pre™uen™i—s @var t X pre™uen™i—vetr—sAY(* Inicializacion de la tabla con ceros *)(* POST: t[c] = 0, c: A = c = Z *)var ™ X AFFZYbegin for ™ Xa A to Z do t‘™“ Xa HY endYprocedure is™ri˜ir„—˜l—pre™uen™i—s @t X pre™uen™i—vetr—sAY(* POST: Se escriben los valores de la tabla t *)var ™ X AFFZYbegin writelnY for ™ Xa A to Z do begin write@ *|* D ™D : D t‘™“AY if @@ord@™AEord@AACIA mod T a HA then writelnY endY writelnendYfunction isw—yus™ul— @™—r X charA X BooleanY(* POST: Retorna Verdadero si y solo si car es una letra mayuscula *)begin isw—yus™ul— Xa @™—r ba AA and @™—r `a ZAYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.3. Calculo de la frecuencia de aparicion de las *****AY writeln@***** letras mayusculas en un texto *****AY writeln@*****AY writelnY „r—t—mientosni™i—l•wƒgI@sAY g—rg—r•fi™hero•wƒgI@sDdatos6_3.txtAY gomenz—r•wƒgI@sAY if ie•wƒgI@sA a wƒgI•w—r™—pin then writeln@Secuencia vaciaA else begin ITES PARANINFO c 88
  • 89. Programas en Pascal. Una introducción a la Programación. sni™i—liz—r„—˜l—pre™uen™i—s@tfAY write@La secuencia de entrada es: AY repeat if ie•wƒgI@sA a wƒgI•w—r™—pinvine— then writeln else write@ie•wƒgI@sAAY if isw—yus™ul—@ie•wƒgI@sAA then tf‘ie•wƒgI@sA“ Xa tf‘ie•wƒgI@sA“ C IY ev—nz—r•wƒgI@sAY (* INV: tf almacena la frecuencia de aparicion de cada letra mayuscula en Piz *) until ie•wƒgI@sA a wƒgI•w—r™—pinY writelnY is™ri˜ir„—˜l—pre™uen™i—s@tfAY endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•RY(* * Algoritmo 6.4. Calcular distribucion de las notas * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas * Fichero de entrada: datos6_4.dat *)(* Para generar el fichero datos6_4.dat emplear el programa genf6_4.pas *)(* Para consultar el fichero datos6_4.dat emplear el programa verf6_4.pas *)uses ™rtYconst x…w•xy„eƒ a SY weˆ•iƒ„…hsex„iƒ a IHHYtype istudi—nte a record nom˜re X stringY ed—d X integerY sexo X booleanY not— X realY89 c ITES PARANINFO
  • 90. Programas en Pascal. Una introducción a la Programación. endY pestudi—ntes a file of istudi—nteY gurso a array ‘IFFweˆ•iƒ„…hsex„iƒ“ of istudi—nteYvar f X pestudi—ntesY ™ X gursoY fxot—s X array ‘IFFx…w•xy„eƒ“ of integerY iD k X IFFweˆ•iƒ„…hsex„iƒY j X IFFx…w•xy„eƒYprocedure is™ri˜e@i X integerAYbegin case i of I X write@Numero de suspensos: AY P X write@Numero de aprobados: AY Q X write@Numero de notables: AY R X write@Numero de sobresalientes: AY S X write@Numero de matriculas de honor: AY endYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.4. Calcular distribucion de las notas *****AY writeln@*****AY writelnY —ssign@fDdatos6_4.datAY reset@fAY k Xa IY while @not eof@fAA and @k `a weˆ•iƒ„…hsex„iƒA do begin read@fD™‘k“AY k Xa k C IY endY ™lose@fAY (* Comenzar *) i Xa IY (* Tratamiento inicial *) for j Xa I to x…w•xy„eƒ do fxot—s‘j“ Xa HY (* Tratamiento de cada elemento de la tabla *) while i `b k do begin if @™‘i“Fnot—A ` S then fxot—s‘I“ Xa fxot—s‘I“ C I else if @™‘i“Fnot— ba SA and @™‘i“Fnot— ` UA then fxot—s‘P“ Xa fxot—s‘P“ C I ITES PARANINFO c 90
  • 91. Programas en Pascal. Una introducción a la Programación. else if @™‘i“Fnot— ba UA and @™‘i“Fnot— ` WA then fxot—s‘Q“ Xa fxot—s‘Q“ C I else if ™‘i“Fnot— a W then fxot—s‘R“ Xa fxot—s‘R“ C I else fxot—s‘S“ Xa fxot—s‘S“ C IY (* Avanzar *) i Xa iCIY endY (* Tratamiento final *) for j Xa I to x…w•xy„eƒ do begin is™ri˜e@jAY writeln@fxot—s‘j“AY endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•SY(* * Algoritmo 6.5. Porcentaje de mujeres y hombres, y nota media de cada sexo * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas * Fichero de entrada: datos6_4.dat *)(* Para generar el fichero datos6_4.dat emplear el programa genf6_4.pas *)(* Para consultar el fichero datos6_4.dat emplear el programa verf6_4.pas *)uses ™rtYconst weˆ•iƒ„…hsex„iƒ a IHHYtype istudi—nte a record nom˜reX stringY ed—d X integerY sexo X BooleanY (* verdadero si es mujer, falso si es hombre *) not— X RealY endY pestudi—ntes a file of istudi—nteY xumistudi—ntes a HFFweˆ•iƒ„…hsex„iƒY91 c ITES PARANINFO
  • 92. Programas en Pascal. Una introducción a la Programación. gurso a array ‘IFF weˆ•iƒ„…hsex„iƒ“ of istudi—nteYvar ™ X gursoY ™ont—wD ™ont—r X HFFweˆ•iƒ„…hsex„iƒY (* contadores numero de mujeres y hombres *) sum—wD sum—r X RealY (* contadores notas de mujeres y hombres *) mujeresD hom˜res X RealY (* porcentajes de mujeres y hombres *) long X xumistudi—ntesY (* longitud de la secuencia almacenada *) i X IFFweˆ•iƒ„…hsex„iƒY (* indice para la tabla *)procedure veer@var ™ X gursoY var l X xumistudi—ntesAYvar f X pestudi—ntesYbegin —ssign@fDdatos6_4.datAY reset@fAY l Xa HY while @not eof@fAA and @l ` weˆ•iƒ„…hsex„iƒA do begin l Xa l C IY read@fD ™‘l“AY endY ™lose@fAYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.5. Porcentaje de mujeres y hombres, *****AY writeln@***** y nota media de cada sexo *****AY writeln@*****AY writelnY (* Se introducen los datos de long estudiantes en la tabla c *) veer @™D longAY case long of H X writeln@No hay alumnosAY else begin sum—w Xa HY sum—r Xa HY ™ont—w Xa HY ™ont—r Xa HY for i Xa I to long do if ™‘i“Fsexo then begin sum—w Xa sum—w C ™‘i“Fnot—Y ™ont—w Xa ™ont—w C IY end else begin sum—r Xa sum—r C ™‘i“Fnot—Y ™ont—r Xa ™ont—r C I endY ITES PARANINFO c 92
  • 93. Programas en Pascal. Una introducción a la Programación. mujeres Xa ™ont—w G long B IHHY hom˜res Xa ™ont—r G long B IHHY writeln@Porcentaje de mujeres: D mujeresXIXPD %AY writelnY writeln@Porcentaje de hombres: D hom˜resXIXPD %AY if ™ont—w `b H then begin writelnY writeln@Nota media de las mujeres: D sum—wG™ont—wXIXPAY endY if ™ont—r `b H then begin writelnY writeln@Nota media de los hombres: D sum—rG™ont—rXIXPAY endY endY endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•TY(* * Algoritmo 6.6. Producto escalar de dos vectores * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)uses ™rtYconst vweˆ a IHHYtype ‚—ngo a IFFvweˆY †e™tor a array ‘‚—ngo“ of RealYvar —D ˜ X †e™torY produ™to X RealY long X ‚—ngoY i X ‚—ngoYprocedure veer@VAR —X†e™torY nX‚—ngoAY93 c ITES PARANINFO
  • 94. Programas en Pascal. Una introducción a la Programación.var iX‚—ngoYbegin for iXaI to n do begin write@Introduzca el componente DiD: AY readln@—‘i“AY endendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.6. Producto escalar de dos vectores *****AY writeln@*****AY writelnY write@Introduzca la longitud de los vectores: AY readln@longAY writelnY writeln@Vector 1: AY veer@—D longAY writelnY writeln@Vector 2: AY veer@˜D longAY produ™to Xa HY for i Xa I to long do produ™to Xa produ™to C —‘i“ B ˜‘i“Y (* INV producto = a[1]* b[1] + a[2]* b[2] + .. a[i] * b[i] *) writelnY writeln@El producto escalar es: D produ™toXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•UY(* * Algoritmo 6.7. Obtener el mayor, su numero de ocurrencias y su primera y ultima posicion * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales ITES PARANINFO c 94
  • 95. Programas en Pascal. Una introducción a la Programación. * Fecha: 1/9/2005 * Capitulo 6. Tablas *)uses ™rtYconst vweˆ a IHHYtype ‚—ngo a IFFvweˆY †e™tor a array ‘‚—ngo“ of integerYvar long X ‚—ngoY t X †e™torY m—yor X integerY numep— X ‚—ngoY priD ult X ‚—ngoY i X ‚—ngoYprocedure veer@VAR —X†e™torY nX‚—ngoAYvar iX‚—ngoYbegin for iXaI to n do begin write@Introduzca el componente DiD: AY readln@—‘i“AY endYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.7. Obtener el mayor, su numero de ocurrencias y *****AY writeln@***** su primera y ultima posicion *****AY writeln@*****AY writelnY write@Introduzca el numero de elementos ( 0): AY readln@longAY veer@tD longAY m—yor Xa t‘I“Y numep— Xa IY pri Xa IY ult Xa IY for i Xa P to long do begin (* Se cumple INV definido en la descripcion del algoritmo *) if t‘i“ b m—yor then begin m—yor Xa t‘i“Y numep— Xa IY pri Xa iY95 c ITES PARANINFO
  • 96. Programas en Pascal. Una introducción a la Programación. ult Xa iY end else if t‘i“ a m—yor then begin numep— Xa numep— C IY ult Xa iY end endY writelnY writeln@El mayor es: Dm—yorAY writeln@El numero de apariciones es: D numep—AY writeln@La primera aparicion y la ultima son: D priD y D ultAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•VY(* * Algoritmo 6.8. Calcular la fecha a partir de la posicion del dia en el anyo (version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)uses ™rtYtype wesenyo a IFFIPY hi—enyo a IFFQTSY hi—mes a IFFQIYconst tp X array ‘wesenyo“ of integer a @ ID QPD THD WID IPID ISPD IVPD PIQD PRRD PURD QHSD QQS AYvar p X hi—enyoY i X wesenyoY mes X wesenyoY di— X hi—mesYbegin ™lrs™rY ITES PARANINFO c 96
  • 97. Programas en Pascal. Una introducción a la Programación. writelnY writeln@*****AY writeln@***** Algoritmo 6.8. Calcular la fecha a partir de la posicion *****AY writeln@***** del dia en el anyo (version 1) *****AY writeln@*****AY writelnY write@Introduzca la posicion del dia en el anyo: AY readln @pAY i Xa PY while @i `b IPA and @tp ‘i“ `a pA do (* INV (j: 1 = j i : p = tp[j]) *) i Xa i C IY if tp‘i“ b p then mes Xa i E I else mes Xa IPY di— Xa p E tp‘mes“ C IY writelnY writeln@Dia Ddi—D del mes D mesAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•WY(* * Algoritmo 6.9. Calcular la fecha a partir de la posicion del dia en el anyo (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)uses ™rtYtype weseyo a IFFIPY hi—eyo a IFFQTSY hi—mes a IFFQIYconst tp X array ‘weseyo“ of integer a @ID QPD THD WID IPID ISPD IVPD PIQD PRRD PURD QHSD QQSAY97 c ITES PARANINFO
  • 98. Programas en Pascal. Una introducción a la Programación.var p X hi—eyoY i X weseyoY mes X weseyoY di— X hi—mesYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.9. Calcular la fecha a partir de la posicion *****AY writeln@***** del dia en el anyo (version 2) *****AY writeln@*****AY writelnY write@Introduzca la posicion del dia en el anyo: AY readln@pAY if p ba tp‘IP“ then mes Xa IP else begin i Xa PY while tp‘i“ `a p do (* INV: j: 1 = j i : p = tp[j] *) i Xa i C IY mes Xa i E IY endY di— Xa p E tp‘mes“ C IY writelnY writeln@Dia Ddi—D del mes D mesAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•IHY(* * Algoritmo 6.10. Calculo del peso del segmento de mayor peso * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)uses ™rtY ITES PARANINFO c 98
  • 99. Programas en Pascal. Una introducción a la Programación.const vweˆ a IHHYtype ‚—ngo a IFFvweˆY †e™tor a array ‘‚—ngo“ of integerYvar t X †e™torY pesow—ximo X integerY (* peso mayor de los segmentos de la secuencia *) pesow—ximoƒege™t X integerY (* peso mayor de los segmentos actuales *) iD long X ‚—ngoYprocedure veer@VAR — X †e™torY n X ‚—ngoAYvar i X ‚—ngoYbegin for i Xa I to n do begin write@ Introduzca componente DiD: AY readln@—‘i“AY endYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.10. Calculo del peso del segmento de mayor peso *****AY writeln@*****AY writelnY write@Introduce el numero de elementos: AY readln@longAY veer@tD longAY if long a H then writeln@Secuencia vaciaA else begin pesow—ximo Xa t‘I“Y pesow—ximoƒege™t Xa t‘I“Y for iXa P to long do begin if t‘i“ b t‘i“ C pesow—ximoƒege™t then pesow—ximoƒege™t Xa t‘i“ else pesow—ximoƒege™t Xa pesow—ximoƒege™t C t‘i“Y if pesow—ximo ` pesow—ximoƒege™t then pesow—ximo Xa pesow—ximoƒege™tY endY writelnY writeln@El peso del segmento de mayor peso es: D pesow—ximoAY endY writelnY99 c ITES PARANINFO
  • 100. Programas en Pascal. Una introducción a la Programación. write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•IIY(* * Algoritmo 6.11. Suma de enteros distintos de cero en segmentos con cero en los extremos * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)uses ™rtYconst vweˆ a IHHYtype ‚—ngo a IFFvweˆY †e™tor a array ‘‚—ngo“ of integerYvar t X †e™torY long X ‚—ngoY i X ‚—ngoY nogerosƒvg X integerY pesoxogeros X integerY ™eros X integerYprocedure veer@VAR —X†e™torY nX‚—ngoAYvar iX‚—ngoYbegin for iXaI to n do begin write@ Introduzca el elemento DiD: AY readln@—‘i“AY endYendYbegin ™lrs™rY writelnY writeln@*****AY ITES PARANINFO c 100
  • 101. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 6.11. Suma de enteros distintos de cero en *****AY writeln@***** segmentos con cero en los extremos *****AY writeln@*****AY writelnY write@Introduzca la longitud de la secuencia: AY readln@longAY veer@tD longAY nogerosƒvg Xa HY pesoxogeros Xa HY ™eros Xa HY for i Xa I to long do if t‘i“ a H then begin nogerosƒvg Xa nogerosƒvg C pesoxogerosY ™eros Xa ™eros C IY end else pesoxogeros Xa pesoxogeros C ™erosY writelnY writeln@La suma de los elementos distintos de cero enAY writeln@segmentos con cero en los extremos es: DnogerosƒvgAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•IPY(* * Algoritmo 6.12. Calcular numero de pares cero-uno (version fuerza bruta) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)uses ™rtYconst vweˆ a IHHYtype ‚—ngo a IFFvweˆY †e™tor a array ‘‚—ngo“ of HFFIYvar t X †e™torY num€—res X integerY101 c ITES PARANINFO
  • 102. Programas en Pascal. Una introducción a la Programación. iD jD long X ‚—ngoYprocedure veer@VAR — X †e™torY n X ‚—ngoAYvar i X ‚—ngoYbegin for i Xa I to n do begin write@ Introduzca elemento DiD: AY readln@—‘i“AY endYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.12. Calcular numero de pares cero-uno *****AY writeln@***** (version fuerza bruta) *****AY writeln@*****AY writelnY write@Introduzca la longitud de la secuencia: AY readln@longAY veer@tD longAY num€—res Xa HY for i Xa I to long do if t‘i“ a H then for j Xa i C I to long do if t‘j“ a I then num€—res Xa num€—res C IY writelnY writeln@El numero de pares 0-1 es: Dnum€—resAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•IQY(* * Algoritmo 6.13. Metodo de ordenacion de insercion directa * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *) ITES PARANINFO c 102
  • 103. Programas en Pascal. Una introducción a la Programación.(* Metodo de ordenacion de insercion directa *)uses ™rtYconst vweˆ a IHHYtype ‚—ngo a HFFvweˆY †e™tor a array ‘‚—ngo“ of integerYvar tX †e™torY qD j X ‚—ngoY n X ‚—ngoY x X integerYprocedure veer@VAR — X †e™torY n X ‚—ngoAYvar i X ‚—ngoYbegin for i Xa I to n do begin write@ Introduzca elemento DiD: AY readln@—‘i“AY endendYprocedure is™ri˜ir@— X †e™torY n X ‚—ngoAYvar i X ‚—ngoYbegin for i Xa I to n do write@—‘i“D AY writelnendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.13. Metodo de ordenacion de insercion directa *****AY writeln@*****AY writelnY write@Introduzca el numero de elementos: AY readln@nAY veer@tD nAY103 c ITES PARANINFO
  • 104. Programas en Pascal. Una introducción a la Programación. writelnY write@Los elementos iniciales son: AY is™ri˜ir@tDnAY for q Xa P to n do begin t‘H“ Xa t‘q“Y (* centinela *) x Xa t‘q“Y j Xa q E IY while x ` t‘j“ do begin t‘jCI“ Xa t‘j“Y (* desplazamiento *) j Xa j E I endY t‘jCI“ Xa xY endY writelnY write@Los elementos ordenados son: AY is™ri˜ir@tDnAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•IRY(* * Algoritmo 6.14. Metodo de ordenacion de seleccion directa * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)(* Metodo de ordenacion de seleccion directa *)uses ™rtYconst vweˆ a IHHYtype ‚—ngo a IFFvweˆY †e™tor a array ‘‚—ngo“ of integerYvar ITES PARANINFO c 104
  • 105. Programas en Pascal. Una introducción a la Programación. t X †e™torY posD qD j X ‚—ngoY n X ‚—ngoY min X integerYprocedure veer@VAR —X†e™torY nX‚—ngoAYvar iX‚—ngoYbegin for iXaI to n do begin write@ Introduzca elemento DiD: AY readln@—‘i“AY endYendYprocedure is™ri˜ir@—X†e™torY nX‚—ngoAYvar iX‚—ngoYbegin for iXaI to n do write@—‘i“D AY writelnYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.14. Metodo de ordenacion de seleccion directa *****AY writeln@*****AY writelnY write@Introduzca el numero de elementos: AY readln@nAY veer@tD nAY writelnY write@Los elementos iniciales son: AY is™ri˜ir@tDnAY for q Xa I to n E I do begin pos Xa qY min Xa t‘q“Y for j Xa qCI to n do if min b t‘j“ then begin pos Xa jY min Xa t‘j“Y105 c ITES PARANINFO
  • 106. Programas en Pascal. Una introducción a la Programación. endY t‘pos“ Xa t‘q“Y t‘q“ Xa minY endY writelnY write@Los elementos ordenados son: AY is™ri˜ir@tDnAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•ISY(* * Algoritmo 6.15. Busqueda binaria en un tabla ordenada * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)(* Busqueda binaria en un tabla ordenada *)uses ™rtYconst vweˆ a IHHYtype ‚—ngo a IFFvweˆY †e™tor a array ‘‚—ngo“ of integerYvar n X ‚—ngoY t X †e™torY i X HFFvweˆY j X IFFvweˆCIY h X ‚—ngoY xX integerYprocedure veer@VAR — X †e™torY n X ‚—ngoAYvar iX‚—ngoY ITES PARANINFO c 106
  • 107. Programas en Pascal. Una introducción a la Programación.begin for i Xa I to n do begin write@ Introduzca elemento DiD: AY readln@—‘i“AY endYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.15. Busqueda binaria en un tabla ordenada *****AY writeln@*****AY writelnY write@Introduzca el numero de elementos (maximo D vweˆD ): AY readln@nAY veer@tD nAY writelnY write@Introduzca el elemento a buscar: AY readln@xAY i Xa HY j Xa n C IY while @i C IA `b j do begin h Xa @i C jA div PY if t‘h“ `a x then i Xa h else j Xa hY endY writelnY write@La secuencia de entrada es: AY for h Xa I to n do begin write @t‘h“D AY endY writelnY writelnY if @i b HA and @x a t‘i“A then writeln@Valor encontrado en la posicion: D i A else writeln@Valor no encontradoAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•ITY(* * Algoritmo 6.16. Suma de los valores mayores de cada fila de una matriz de enteros * Titulo del libro: Una introduccion a la programacion.107 c ITES PARANINFO
  • 108. Programas en Pascal. Una introducción a la Programación.* Un enfoque algoritmico* Autores del libro: Jesus J. Garcia Molina* Francisco J. Montoya Dato* Jose L. Fernandez Aleman* Maria J. Majado Rosales* Fecha: 1/9/2005* Capitulo 6. Tablas*)uses ™rtYconst n a PHY xpil—s a nY (* constante con el numero de filas *) xgolumn—s a nY (* constante con el numero de columnas *)type ‚—ngopil—s a IFFxpil—sY ‚—ngogolumn—s a IFFxgolumn—sY †e™tor a array ‘‚—ngopil—sD ‚—ngogolumn—s“ of integerYvar t X †e™torY nfD i X ‚—ngopil—sY n™D j X ‚—ngogolumn—sY smD m—yorX integerYprocedure veer@VAR — X †e™torY nf X ‚—ngopil—sY n™ X ‚—ngogolumn—sAYvar i X ‚—ngopil—sY j X ‚—ngogolumn—sYbegin for iXaI to nf do begin writelnY writeln@Fila: DiAY for jXaI to n™ do begin write@Introduzca elemento (DiD, D jD): AY readln@—‘iD j“AY endY endYendYbegin ™lrs™rY writelnY writeln@*****AY ITES PARANINFO c 108
  • 109. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 6.16. Suma de los valores mayores de cada fila *****AY writeln@***** de una matriz de enteros *****AY writeln@*****AY writelnY write@Introduzca el numero de filas (= DnD): AY readln@nfAY writelnY write@Introduzca el numero de columnas (= DnD): AY readln@n™AY veer@tD nfD n™AY sm Xa HY for i Xa I to nf do begin m—yor Xa t‘iDI“Y for j Xa P to n™ do begin if m—yor ` t‘iDj“ then m—yor Xa t‘iDj“ (* INVint mayor = mayor de los j elementos ya recorridos de la fila i, 1 = j = nc *) endY sm Xa sm C m—yor (* INVext sm = suma de los mayores de las primeras i filas de T, 1 = i = nf *) endY (* INVext y (i = nf) = POST *) writelnY writeln@La suma de los valores mayores de cada fila deAY writeln@la matriz de enteros es: D smAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•IUY(* * Algoritmo 6.17. Cifrado PlayFair * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas * Fichero de entrada: dat6_17.txt *)uses ™rtD unitms™IYconst109 c ITES PARANINFO
  • 110. Programas en Pascal. Una introducción a la Programación. x a SY iƒ€egsy a Ytype €—l—˜r— a stringY w—trizg—r a array ‘IFFxDIFFx“ of charY €—rvetr—s a record pD s X CharY endY €osi™ion a record fD ™ X integerY endYvar ™l—ve X €—l—˜r—Y (* palabra clave *) p—rgifr—do X €—rvetr—sY (* par codificado *) m™ X w—trizg—rY (* matriz de codificacion *) ƒ X ms™IY (* texto original *) ‚ X ms™IY (* texto cifrado *)(* lexico de una secuencia intermedia de pares de caracteres *) p—re™tu—l X €—rvetr—sY ultimo€—r X booleanYfunction pin€—res X BooleanYbegin pin€—res Xa @ie•wƒgI@ƒA a wƒgI•w—r™—pinA and not ultimo€—rendYprocedure sgnor—rfl—n™osY(* Salta blancos del texto original *)begin while ie•wƒgI@ƒA a iƒ€egsy do ev—nz—r•wƒgI@ƒAYendYprocedure sustituir@var l X charAYbegin case l of jX lXaiY iX lXanY endYendYprocedure ƒig€—rYbegin sgnor—rfl—n™osY if ie•wƒgI@ƒA `b wƒgI•w—r™—pin then begin p—re™tu—lFp Xa ie•wƒgI@ƒAY sustituir@p—re™tu—lFpAY ITES PARANINFO c 110
  • 111. Programas en Pascal. Una introducción a la Programación. ev—nz—r•wƒgI@ƒAY sgnor—rfl—n™osY if ie•wƒgI@ƒA a wƒgI•w—r™—pin then begin ultimo€—r Xa trueY p—re™tu—lFsXaxY end else begin p—re™tu—lFs Xa ie•wƒgI@ƒAY sustituir@p—re™tu—lFsAY if p—re™tu—lFsap—re™tu—lFp then p—re™tu—lFsXax endY endYendYprocedure gomenz—r€—rYbegin gomenz—r•wƒgI@ƒAY ultimo€—r Xa falseY ƒigp—rYendYprocedure ev—nz—r€—rYbegin if ultimo€—r then ultimo€—r Xa false else begin ev—nz—r•wƒgI@ƒAY ƒig€—rY endYendYfunction g—rin€—l—˜r—@p X €—l—˜r—Y long X integerY ™ X CharA X BooleanY(* PRE: long 0 *)(* POST retorna Verdadero si el caracter c se encuentra en la tabla p, Falso en otro caso *)var i X IFFxCIY (* En el rango [1, long] *)begin i Xa IY while @i `b longCIA and not @p‘i“ a ™A do i Xa i C IY g—rin€—l—˜r— Xa i `b longCIYendYprocedure gre—rw—trizgodifi™—™ionY111 c ITES PARANINFO
  • 112. Programas en Pascal. Una introducción a la Programación.var letr— X charY (* letra actual *) iD j X IFFxYbegin (* rellenar la primera fila con la clave *) for i Xa I to x do m™‘IDi“ Xa ™l—ve‘i“Y (* rellenar resto de filas *) (* inicializar recorrido intervalo de letras *) letr— Xa aY for i Xa P to x do for j Xa I to x do begin while g—rin€—l—˜r—@™l—veD xD letr—A or @letr— a jA or @letr— a iA do letr— Xa ƒu™™@letr—AY m™‘iDj“ Xa letr—Y letr— Xa ƒu™™@letr—AY endYendYprocedure €osin„—˜l—@m X w—trizg—rY ™—r X charY var pos X €osi™ionAY(* PRE: car es una letra y se encuentra en la tabla *)var iD j X IFFxYbegin i Xa IY j Xa IY while @m‘iDj“ `b ™—rA do if j ` x then j Xa j C I else begin i Xa i C IY j Xa I endY posFf Xa iY posF™Xa jYendYprocedure godifi™—™ion@p—r X €—rvetr—sY var nuevo€—r X €—rvetr—sAYvar pID pP X €osi™ionY fil—D ™ol X IFFxYbegin €osin„—˜l—@m™D p—rFpD pIAY €osin„—˜l—@m™D p—rFsD pPAY if pIFf a pPFf then begin ITES PARANINFO c 112
  • 113. Programas en Pascal. Una introducción a la Programación. pIF™ Xa pIF™ mod x C IY pPF™ Xa pPF™ mod x C IY nuevo€—rFp Xa m™‘pIFfD pIF™“Y nuevo€—rFs Xa m™‘pPFfD pPF™“ end else if pIF™ a pPF™ then begin pIFf Xa pIFf mod x C IY pPFf Xa pPFf mod x C IY nuevo€—rFp Xa m™‘pIFfD pIF™“ Y nuevo€—rFs Xa m™‘pPFfD pPF™“ end else begin nuevo€—rFp Xa m™‘pIFfD pPF™“Y nuevo€—rFs Xa m™‘pPFfD pIF™“ endYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.17. Cifrado PlayFair *****AY writeln@*****AY writelnY write@Introduzca la palabra clave de 5 letras: AY readln@™l—veAY „r—t—mientosni™i—l•wƒgI@ƒAY g—rg—r•fi™hero•wƒgI@ƒDdat6_17.txtAY writelnY write@El texto original es: AY gomenz—r•wƒgI@ƒAY while ie•wƒgI@ƒA `b wƒgI•w—r™—pin do begin write@ie•wƒgI@ƒAAY ev—nz—r•wƒgI@ƒAY endY gre—rw—trizgodifi™—™ionY gomenz—r€—rY „r—t—mientosni™i—l•wƒgI@‚AY err—n™—r•wƒgI@‚AY while not pin€—res do begin godifi™—™ion@p—re™tu—lD p—rgifr—doAY ‚egistr—r•wƒgI@‚D p—rgifr—doFpAY ‚egistr—r•wƒgI@‚D p—rgifr—doFsAY ev—nz—r€—rY endY w—r™—r•wƒgI@‚AY113 c ITES PARANINFO
  • 114. Programas en Pascal. Una introducción a la Programación. writelnY writelnY write@El texto cifrado es: AY gomenz—r•wƒgI@‚AY while @ie•wƒgI@‚A `b wƒgI•w—r™—pinA do begin write@ie•wƒgI@‚AAY ev—nz—r•wƒgI@‚A Y endY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoT•IVY(* * Algoritmo 6.18. Justificacion de un texto * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas * Fichero de entrada: dat6_18.txt *)uses ™rtD unitms™IYconst isp—™io a Y ƒ—ngr—dow—ximo a ISY vongw—x€—l a PHY en™howinvine— a vongw—x€—l C ƒ—ngr—dow—ximoY en™how—xvine— a VHYtype vongitud€—l—˜r— a IFFvongw—x€—lY €—l—˜r— a record ™ontenido X array ‘vongitud€—l—˜r—“ of charY longitud X vongitud€—l—˜r— endY €osinvine— a IFFen™how—xvine—Y vongitudvine— a HFFen™how—xvine—Y vine— a record longitud X vongitudvine—Y ITES PARANINFO c 114
  • 115. Programas en Pascal. Una introducción a la Programación. ™ontenido X array ‘€osinvine—“ of charY endY vongƒ—ngr—do a HFFƒ—ngr—dow—ximoY vimen™hovine— a en™howinvine—FFen™how—xvine—Yvar s—ngr—do X vongƒ—ngr—doY —n™hovine— X vimen™hovine—Y p—l—˜r—e™tu—l X €—l—˜r—Y line—e™tu—l X vine—Y pinheƒe™uen™i—€—l—˜r— X booleanY ƒ X wƒgIY w—r™—€—rr—fo X €—l—˜r—Y(* ************** ******************** * Operaciones secuencia intermedia de palabras * ************** ********************)procedure y˜tener€—l—˜r—Yvar i X integerYbegin (* Ignora los espacios en blanco *) while @ie•wƒgI@ƒA `b wƒgI•w—r™—pinA and @@ie•wƒgI@ƒA a isp—™ioA or @ie•wƒgI@ƒA a wƒgI•w—r™—pinvine—AA do ev—nz—r•wƒgI @ƒAY pinheƒe™uen™i—€—l—˜r— Xa ie•wƒgI@ƒA a wƒgI•w—r™—pinY if not @ie•wƒgI@ƒA a wƒgI•w—r™—pinA then begin (* Almacena en el campo palabraActual.contenido la siguiente palabra *) i Xa HY repeat i Xa i C IY p—l—˜r—e™tu—lF™ontenido‘i“ Xa ie•wƒgI @ƒAY ev—nz—r•wƒgI @ƒAY until @ie•wƒgI@ƒA a wƒgI•w—r™—pinA or @@ie•wƒgI@ƒA a isp—™ioA or @@ie•wƒgI@ƒA a wƒgI•w—r™—pinvine—AAAY p—l—˜r—e™tu—lFlongitud Xa iY endendY(* ********************* *************)procedure gomenz—r€—l—˜r—Ybegin „r—t—mientosni™i—l•wƒgI@ƒAY g—rg—r•fi™hero•wƒgI@ƒDdat6_18.txtAY gomenz—r•wƒgI@ƒAY y˜tener€—l—˜r—YendY115 c ITES PARANINFO
  • 116. Programas en Pascal. Una introducción a la Programación.(* ********************* *************)procedure ev—nz—r€—l—˜r—Ybegin y˜tener€—l—˜r—YendY(* ************** ******************** * Operaciones relacionadas con el tratamiento de palabras * ************** ********************)function vongitud @p—lX €—l—˜r—A X vongitud€—l—˜r—Ybegin vongitud Xa p—lFlongitudYendY(* ********************* *************)function sgu—l @pID pP X €—l—˜r—A X booleanYvar longD i X vongitud€—l—˜r—Y igu—lvong X booleanYbegin igu—lvong Xa pIFlongitud a pPFlongitudY if igu—lvong then begin long Xa pIFlongitudY i Xa IY while @i `b longA and @pIF™ontenido‘i“ a pPF™ontenido‘i“A do i Xa i C IY igu—lvong Xa @pIF™ontenido‘i“ a pPF™ontenido‘i“AY endY sgu—l Xa igu—lvongendY(* ************** ******************** * Grupo de operaciones de tratamiento de lineas * ************** ********************)procedure eny—dirg—r—™terevine— @™—r X charAYbegin line—e™tu—lFlongitud Xa line—e™tu—lFlongitud C IY line—e™tu—lF™ontenido‘line—e™tu—lFlongitud“ Xa ™—rendY(* ********************* *************)procedure eny—dir€—l—˜r—evine—Yvar i X vongitud€—l—˜r—Ybegin for i Xa I to p—l—˜r—e™tu—lFlongitud do ITES PARANINFO c 116
  • 117. Programas en Pascal. Una introducción a la Programación. eny—dirg—r—™terevine— @p—l—˜r—e™tu—lF™ontenido‘i“AendY(* ********************* *************)procedure sni™i—liz—r€ropvine— @var longƒ—ngr—doX vongƒ—ngr—doY var longvine— X vimen™hovine—AYvar s—ngr—dovine—D —n™hovine— X integerYbegin write@Introduzca el ancho de la linea (entre D en™howinvine—D y D en™how—xvine—D ): AY readln@—n™hovine—AY if —n™hovine— ` en™howinvine— then longvine— Xa en™howinvine— else if —n™hovine— b en™how—xvine— then longvine— Xa en™how—xvine— else longvine— Xa —n™hovine—Y writelnY write@Introduzca el sangrado de la primera linea (entre 0D y D ƒ—ngr—dow—ximoD ): AY readln@s—ngr—dovine—AY if s—ngr—dovine— ` H then longƒ—ngr—do Xa H else if s—ngr—dovine— b ƒ—ngr—dow—ximo then longƒ—ngr—do Xa ƒ—ngr—dow—ximo else longƒ—ngr—do Xa s—ngr—dovine—Y w—r™—€—rr—foFlongitud Xa SY w—r™—€—rr—foF™ontenido‘I“ Xa /Y w—r™—€—rr—foF™ontenido‘P“ Xa PY w—r™—€—rr—foF™ontenido‘Q“ Xa AY w—r™—€—rr—foF™ontenido‘R“ Xa RY w—r™—€—rr—foF™ontenido‘S“ Xa /YendY(* ********************* *************)procedure ƒ—ngr—rvine— @longƒ—ngr—do X integerAYvar i X IFFƒ—ngr—dow—ximoYbegin for i Xa I to longƒ—ngr—do do eny—dirg—r—™terevine—@isp—™ioAendY(* ********************* *************)procedure sni™i—liz—rvine— @longƒ—ngr—do X integerAYbegin line—e™tu—lFlongitud Xa HY if longƒ—ngr—do b H then ƒ—ngr—rvine—@longƒ—ngr—doAendY117 c ITES PARANINFO
  • 118. Programas en Pascal. Una introducción a la Programación.(* ********************* *************)function g—˜einvine— @esp—™ioƒoli™it—doX vongitud€—l—˜r—Y longvine— X integerA X booleanYbegin g—˜einvine— Xa esp—™ioƒoli™it—do `a @longvine— E line—e™tu—lFlongitudAendY(* ********************* *************)procedure is™ri˜irvine— @justifi™—™ion X booleanY longvine—D longƒ—ngr—do X integerAY (* ********************* ********) procedure is™ri˜irvine—tustifi™—d— @longvine—D longƒ—ngr—do X integerAY var numrue™osD ˜l—n™osixtr—win X vongitudvine—Y numrue™ose™tD numrue™oswin X vongitudvine—Y limsnfD limƒupD pos X €osinvine—Y (* ********************* *****) procedure is™ri˜irisp—™ios @numisp—™ios X €osinvine—AY var i X €osinvine—Y begin (* EscribirEspacios *) for i Xa I to numisp—™ios do write@isp—™ioAY endY (* EscribirEspacios *) begin (* EscribirLineaJustificada * Calcular limite inferior y superior *) if line—e™tu—lF™ontenido‘I“ a isp—™io (* Si es primera linea de un parrafo *) then limsnf Xa longƒ—ngr—do C I else limsnf Xa IY if line—e™tu—lF™ontenido‘line—e™tu—lFlongitud“ a isp—™io then limƒup Xa line—e™tu—lFlongitud E I else limƒup Xa line—e™tu—lFlongitudY is™ri˜irisp—™ios@limsnf E IAY (* Calcular únmero de huecos *) numrue™os Xa HY for pos Xa limsnf to limƒup do if line—e™tu—lF™ontenido‘pos“ a isp—™io then numrue™os Xa numrue™os C IY (* Calcular numero de espacios a insertar y numero de huecos * en los que se inserta ese numero de espacios, en el resto * se inserta uno mas *) if @numrue™os `b HA then begin ITES PARANINFO c 118
  • 119. Programas en Pascal. Una introducción a la Programación. ˜l—n™osixtr—win Xa @longvine— E limƒupA div numrue™osY numrue™oswin Xa numrue™os E @longvine— E limƒupA mod numrue™os endY (* Recorrido para insertar espacios en los huecos *) numrue™ose™t Xa HY for pos Xa limsnf to limƒup do if @line—e™tu—lF™ontenido‘pos“ a isp—™ioA and @numrue™ose™t ` numrue™oswinA then begin is™ri˜irisp—™ios @˜l—n™osixtr—win C IAY numrue™ose™t Xa numrue™ose™t C IY end else if @line—e™tu—lF™ontenido‘pos“ a isp—™ioA and @numrue™ose™t ba numrue™oswinA then is™ri˜irisp—™ios@˜l—n™osixtr—winCPA else if @line—e™tu—lF™ontenido‘pos“ `b isp—™ioA then write@line—e™tu—lF™ontenido‘pos“A endY (* EscribirLineaJustificada *) (* ********************* ********) procedure is™ri˜irvine—ƒintustifi™—rY var i X €osinvine—Y begin (* EscribirLineaSinJustificar *) for i Xa I to line—e™tu—lFlongitud E I do write@line—e™tu—lF™ontenido‘i“AY if line—e™tu—lF™ontenido‘line—e™tu—lFlongitud“ `b isp—™io then write@line—e™tu—lF™ontenido‘line—e™tu—lFlongitud“A endY (* EscribirLineaSinJustificar *)begin (* EscribirLinea *) if justifi™—™ion then is™ri˜irvine—tustifi™—d—@longvine—D longƒ—ngr—doA else is™ri˜irvine—ƒintustifi™—rY writelnendY (* EscribirLinea *)begin (* Principal *) ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 6.18. Justificacion de un texto *****AY writeln@*****AY writelnY sni™i—liz—r€ropvine—@s—ngr—doD —n™hovine—AY sni™i—liz—rvine—@s—ngr—doAY writelnY119 c ITES PARANINFO
  • 120. Programas en Pascal. Una introducción a la Programación. write@El texto justificado es:AY writelnY writelnY gomenz—r€—l—˜r—Y while not pinheƒe™uen™i—€—l—˜r— do begin if sgu—l@p—l—˜r—e™tu—lD w—r™—€—rr—foA then begin is™ri˜irvine—@falseD —n™hovine—D s—ngr—doAY writelnY sni™i—liz—rvine—@s—ngr—doA end else begin if not g—˜einvine—@vongitud@p—l—˜r—e™tu—lAD —n™hovine—A then begin is™ri˜irvine—@trueD —n™hovine—D s—ngr—doAY sni™i—liz—rvine— @HAY endY eny—dir€—l—˜r—evine—Y if g—˜einvine—@ID —n™hovine—A then eny—dirg—r—™terevine—@isp—™ioA endY ev—nz—r€—l—˜r— endY is™ri˜irvine—@falseD —n™hovine— D s—ngr—doAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program qenpT•IY(* * Algoritmo GenF6_1. Genera el fichero datos6_1.dat * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas *)(* En este algoritmo se ha sustituido la secuencia de NotaAlumno por un fichero secuencial, datos6_1.dat *)uses ™rtYconst ITES PARANINFO c 120
  • 121. Programas en Pascal. Una introducción a la Programación. weˆ•ev…wxyƒ a PHHYtype xot—elumno a record ™odigo X IFFweˆ•ev…wxyƒY not— X RealY endYvar f X file of xot—elumnoY —lum X xot—elumnoY xX charYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo GenF6_1. Genera el fichero datos6_1.dat *****AY writeln@*****AY writelnY —ssign@fDdatos6_1.datAY rewrite@fAY repeat writelnY write@Introduzca el codigo del alumno (= 1) (= D weˆ•ev…wxyƒD ): AY readln@—lumF™odigoAY write@Introduzca la nota del alumno: AY readln@—lumFnot—AY write@fD —lumAY write@¤Desea introducir mas notas s/S (si),n/N (no)?: AY readln@xAY until x in ‘nDN“Y ™lose@fAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program †erpT•IY(* * Algoritmo VerF6_1. Consulta todo el fichero datos6_1.dat * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales121 c ITES PARANINFO
  • 122. Programas en Pascal. Una introducción a la Programación. * Fecha: 1/9/2005 * Capitulo 6. Tablas *)uses ™rtYconst weˆ•ev…wxyƒ a PHHYtype xot—elumno a record ™odigo X IFFweˆ•ev…wxyƒY not— X realY endYvar f X file of xot—elumnoY —lum X xot—elumnoYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo VerF6_1. Consulta todo el fichero datos6_1.dat *****AY writeln@*****AY writelnY —ssign @fDdatos6_1.datAY reset@fAY writeln@** Notas de los alumnos (pulsa enter para ver siguiente) **AY writelnY while not eof@fA do begin read@fD—lumAY write@ codigo: AY writeln@—lumF™odigoAY write@ nota: AY writeln @—lumFnot—XIXPAY readlnY endY ™lose@fAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program qenpT•RY(* * Algoritmo GenF6_4. Genera el fichero datos6_4.dat * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina ITES PARANINFO c 122
  • 123. Programas en Pascal. Una introducción a la Programación. * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas * Fichero de salida: datos6_4.dat *)uses ™rtYconst w—r™—pinxot—s a EIYtype istudi—nte a record nom˜re X stringY ed—d X integerY sexo X booleanY not— X realY endY pestudi—ntes a file of istudi—nteYvar f X pestudi—ntesY est X istudi—nteY xX charYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo GenF6_4. Genera el fichero datos6_4.dat *****AY writeln@*****AY writelnY —ssign @fDdatos6_4.datAY rewrite@fAY (* Se introducen los datos de los estudiantes en la tabla *) writeln@Introduzca los datos de los estudiantes (nota=-1 para terminar)AY writelnY write@ Introduzca nota: AY readln@estFnot—AY while estFnot— `b w—r™—pinxot—s do begin write@ Introduzca el nombre: AY readln@estFnom˜reAY write@ Introduzca la edad: AY readln@estFed—dAY repeat write@ M/m mujer, H/h hombre: AY readln@xAY until x in ‘mDMDhDH“Y estFsexo Xa @xaMA or @xamAY123 c ITES PARANINFO
  • 124. Programas en Pascal. Una introducción a la Programación. write@fDestAY writelnY write@ Introduzca nota: AY readln@estFnot—AY endY ™lose@fAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program †erpT•RY(* * Algoritmo VerF6_4. Consulta todo el fichero datos6_4.dat * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 6. Tablas * Fichero de entrada: datos6_4.dat *)uses ™rtYtype istudi—nte a record nom˜re X stringY ed—d X integerY sexo X booleanY not— X realY endY pestudi—ntes a file of istudi—nteYvar f X pestudi—ntesY est X istudi—nteYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo VerF6_4. Consulta todo el fichero datos6_4.dat *****AY writeln@*****AY writelnY —ssign @fDdatos6_4.datAY ITES PARANINFO c 124
  • 125. Programas en Pascal. Una introducción a la Programación. reset@fAY writeln@** Datos de los estudiantes (pulse enter para ver siguiente) **AY writelnY while not eof@fA do begin read@fDestAY writeln@ nombre: D estFnom˜reAY writeln@ edad: D estFed—dAY write@ sexo: AY case estFsexo of TRUEX writeln@mujerAY FALSEX writeln@hombreAY endY writeln@ nota: D estFnot—XIXPAY readln endY ™lose@fAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥125 c ITES PARANINFO
  • 126. Programas en Pascal. Una introducción a la Programación.3.6. Capítulo 7§ ¤program elgoritmoU•IY(* * Algoritmo 7.1. Funcion factorial recursiva * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYvar n X integerYfunction p—™tori—l @n X integerAX longintY(* PRE: n = 0 *)(* POST: Factorial (n) = n! *)var result—do X longintYbegin if n a H then result—do Xa I else if n b H then result—do Xa n B p—™tori—l @nEIAY p—™tori—l Xa result—doYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.1. Funcion factorial recursiva *****AY writeln@*****AY writelnY write@Introduzca un entero (= 0) y (= 16): AY readln@nAY writelnY writeln@El factorial de D nD es: D p—™tori—l @nAAY writelnY write@Pulse enter para continuarAY readlnYendF¦ ¥§ ¤ ITES PARANINFO c 126
  • 127. Programas en Pascal. Una introducción a la Programación.program elgoritmoU•PY(* * Algoritmo 7.2. Funcion division natural recursiva * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYvar dividendoD divisorD ™o™ienteD resto X integerY(* * Pascal no admite que una funcion devuelve un valor de un tipo registro, * Por este motivo la funcion DivisionNatural se ha convertido en un procedimiento * con dos parametros paso por variable *)procedure hivisionx—tur—l @numD den X integerY VAR ™o™D res X integerAY(* PRE: (num = 0) y (den 0) *)(* POST: DivisionNatural (num,den) = c, r y num = c * den + r y 0 = r den *)begin if num ` den then begin ™o™ Xa HY res Xa num end else begin hivisionx—tur—l@numEdenD denD ™o™D resAY ™o™ Xa ™o™ C I endendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.2. Funcion division natural recursiva *****AY writeln@*****AY writelnY write@Introduzca el dividendo (= 0): AY readln@dividendoAY writelnY127 c ITES PARANINFO
  • 128. Programas en Pascal. Una introducción a la Programación. write@Introduzca el divisor ( 0): AY readln@divisorAY hivisionx—tur—l@dividendoD divisorD ™o™ienteD restoAY writelnY writeln@Resultado: cociente = D ™o™ienteD , resto = D restoAY writelnY write@Pulse enter para continuarAY readlnYendF¦ ¥§ ¤program elgoritmoU•QY(* * Algoritmo 7.3. Funcion producto escalar recursiva lineal * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYconst weˆ a IHYtype †e™tor a array ‘IFFweˆ“ of realYvar vvID vvP X †e™torY nD i X integerYfunction pei @vID vP X †e™torY —D ˜ X integerA X realY (* PRE 1 = a = b = MAX, y v1 y v2 tienen valores significativos en [a, b] *) (* POST pei (v1, v2, a, b) = sumatorio desde i = a hasta b de v1[i] * v2[i] *)begin if — a ˜ then pei Xa vI‘—“ B vP‘—“ else (* a b *) pei Xa vI‘—“ B vP‘—“ C pei @vID vPD —CID ˜AendYbegin ™lrs™rY writelnY writeln@*****AY ITES PARANINFO c 128
  • 129. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 7.3. Funcion producto escalar recursiva lineal *****AY writeln@*****AY writelnY write@Introduzca el numero de elementos de los vectores ( 0) y (=DweˆD): AY readln@nAY writelnY writeln@Primer vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvI‘i“AY endY writelnY writeln@Segundo vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvP‘i“AY endY writelnY writeln@El producto escalar de los vectores es: D pei @vvID vvPD ID nAXIXPAY writelnY write@Pulse enter para continuarAY readlnYendF¦ ¥§ ¤program elgoritmoU•RY(* * Algoritmo 7.4. Funcion producto escalar recursiva lineal final * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYconst weˆ a IHYtype †e™tor a array ‘IFFweˆ“ of realYvar vvID vvP X †e™torY129 c ITES PARANINFO
  • 130. Programas en Pascal. Una introducción a la Programación. nD i X integerYfunction peii @vID vP X †e™torY —D ˜ X integerY ™ X realA X realY(* PRE 1 = a = b = MAX, y v1 y v2 tienen valores significativos en [a, b] *)(* POST pei (v1, v2, a, b, c) = c + sumatorio desde i = a hasta b de v1[i] * v2[i] *)begin if — a ˜ then peii Xa ™ C vI‘—“ B vP‘—“ else (* a b *) peii Xa peii @vID vPD —CID ˜D ™ C vI‘—“ B vP‘—“AendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.4. Funcion producto escalar recursiva lineal final ***** AY writeln@*****AY writelnY write@Introduzca el numero de elementos de los vectores ( 0) y (=DweˆD): AY readln@nAY writelnY writeln@Primer vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvI‘i“AY endY writelnY writeln@Segundo vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvP‘i“AY endY writelnY writeln@El producto escalar de los vectores es: D peii @vvID vvPD ID nD HAXIXPAY writelnY write@Pulse enter para continuarAY readlnYendF¦ ¥§ ¤program elgoritmoU•SY(* * Algoritmo 7.5. Funcion producto escalar iterativa, equivalente a la del Algoritmo 7.4 * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato ITES PARANINFO c 130
  • 131. Programas en Pascal. Una introducción a la Programación. * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYconst weˆ a IHYtype †e™tor a array ‘IFFweˆ“ of realYvar vvID vvP X †e™torY nD i X integerYfunction peii @vID vP X †e™torY —D ˜ X integerY ™ X realA X realY (* PRE 1 = a = b = MAX, y v1 y v2 tienen valores significativos en [a, b] *) (* POST pei (v1, v2, a, b, c) = c + sumatorio desde i = a hasta b de v1[i] * v2[ i] *)var —•lo™ X integerY (* corresponde al parametro a *) ™•lo™ X realY (* corresponde al parametro c *) (* el parametro b no varia, no necesita copia local *)begin —•lo™ Xa —Y ™•lo™ Xa ™Y while —•lo™ ` ˜ do begin ™•lo™ Xa ™•lo™ C vI‘—•lo™“ B vP‘—•lo™“Y —•lo™ Xa —•lo™ C I endY peii Xa ™•lo™ C vI‘—•lo™“ B vP‘—•lo™“endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.5. Funcion producto escalar iterativa, *****AY writeln@***** equivalente a la del Algoritmo 7.4 *****AY writeln@*****AY writelnY write@Introduzca el numero de elementos de los vectores ( 0) y (=DweˆD): AY readln@nAY writelnY131 c ITES PARANINFO
  • 132. Programas en Pascal. Una introducción a la Programación. writeln@Primer vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvI‘i“AY endY writelnY writeln@Segundo vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvP‘i“AY endY writelnY writeln@El producto escalar de los vectores es: D peii @vvID vvPD ID nD HAXIXPAY writelnY write@Pulse enter para continuarAY readlnYendF¦ ¥§ ¤program elgoritmoU•TY(* * Algoritmo 7.6. Funcion producto escalar iterativa sin parametros de inmersion ( version 1) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYconst weˆ a IHYtype †e™tor a array ‘IFFweˆ“ of realYvar vvID vvP X †e™torY nD i X integerYfunction pe @vID vP X †e™torA X realYvar —D ˜ X integerY ITES PARANINFO c 132
  • 133. Programas en Pascal. Una introducción a la Programación. ™ X realYbegin — Xa IY ˜ Xa nY ™ Xa HY while — ` ˜ do begin ™ Xa ™ C vI‘—“ B vP‘—“Y — Xa — C I endY pe Xa ™ C vI‘—“ B vP‘—“endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.6. Funcion producto escalar iterativa sin *****AY writeln@***** parametros de inmersion (version 1) *****AY writeln@*****AY writelnY write@Introduzca el numero de elementos de los vectores ( 0) y (=DweˆD): AY readln@nAY writelnY writeln@Primer vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvI‘i“AY endY writelnY writeln@Segundo vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvP‘i“AY endY writelnY writeln@El producto escalar de los vectores es: D pe @vvID vvPAXIXPAY writelnY write@Pulse enter para continuarAY readlnYendF¦ ¥§ ¤program elgoritmoU•UY(* * Algoritmo 7.7. Funcion producto escalar iterativa (version 2) * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman133 c ITES PARANINFO
  • 134. Programas en Pascal. Una introducción a la Programación.* Maria J. Majado Rosales* Fecha: 1/9/2005* Capitulo 7. Disenyo recursivo*)uses ™rtYconst weˆ a IHYtype †e™tor a array ‘IFFweˆ“ of realYvar vvID vvP X †e™torY nD i X integerYfunction pe @vID vP X †e™torA X realYvar —D ˜ X integerY ™ X realYbegin — Xa IY ˜ Xa weˆY ™ Xa HY while — `a ˜ do begin ™ Xa ™ C vI‘—“ B vP‘—“Y — Xa — C I endY pe Xa ™endYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.7. Funcion producto escalar iterativa (version 2) ***** AY writeln@*****AY writelnY write@Introduzca el numero de elementos de los vectores ( 0) y (=DweˆD): AY readln@nAY writelnY writeln@Primer vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvI‘i“AY endY writelnY ITES PARANINFO c 134
  • 135. Programas en Pascal. Una introducción a la Programación. writeln@Segundo vectorAY for i Xa I to n do begin write@ Componente D iD : AY readln@vvP‘i“AY endY writelnY writeln@El producto escalar de los vectores es: D pe @vvID vvPAXIXPAY writelnY write@Pulse enter para continuarAY readlnYendF¦ ¥§ ¤program elgoritmoU•VY(* * Algoritmo 7.8. Funcion potencia natural recursiva * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYvar ˜—se X realY exponente X integerYfunction €oten™i—x—tur—l @— X realY n X integerA X realY(* PRE (n = 0) y (n = 0 = a 0) *)(* POST PotenciaNatural(a, n) = a elevado a n *)begin if n a H then €oten™i—x—tur—l Xa IFH else (* n 0 *) €oten™i—x—tur—l Xa — B €oten™i—x—tur—l@—D nEIAYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.8. Funcion potencia natural recursiva *****AY135 c ITES PARANINFO
  • 136. Programas en Pascal. Una introducción a la Programación. writeln@*****AY writelnY write@Introduzca un real como base de la potencia: AY readln@˜—seAY writelnY write@Introduzca un entero como exponente de la potencia (= 0): AY readln@exponenteAY writelnY writeln@Resultado: D €oten™i—x—tur—l@˜—seD exponenteAXIXPAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoU•WY(* * Algoritmo 7.9. Calculo recursivo de Fibo(n) con inmersion de resultados por eficiencia * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYvar nD fi˜D fi˜ent X integerY(* * Pascal no admite que una funcion devuelve un valor de un tipo registro, * Por este motivo la funcion iFibo se ha convertido en un procedimiento con * dos parametros paso por variable *)procedure ipi˜o @n X integerY VAR —D ˜ X integerAY(* PRE n 0 *)(* POST a, b = Fibo(n), Fibo(n-1) *)var fi˜D fi˜ent X integerYbegin if n a I then begin ITES PARANINFO c 136
  • 137. Programas en Pascal. Una introducción a la Programación. — Xa IY ˜ Xa IY (* iF = Fibo(1), Fibo(0) *) end else (* n 1 *) begin ipi˜o @n E ID fi˜D fi˜entAY (* * tenemos: fib = Fibo(n-1) y fibAnt = Fibo(n-2), luego: * Fibo(n) = Fibo(n-1) + Fibo(n-2) = fib + fibAnt * Fibo(n-1) = fib : *) — Xa fi˜ C fi˜entY ˜ Xa fi˜Y endendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.9. Calculo recursivo de Fibo(n) con inmersion *****AY writeln@***** de resultados por eficiencia *****AY writeln@*****AY writelnY write@Termino de la sucesion que se desea calcular ( 0): AY readln@nAY writelnY ipi˜o @nD fi˜D fi˜entAY writeln@El termino D nD -esimo (posicion D nCID ) de la sucesion es: D fi˜AY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoU•IHY(* * Algoritmo 7.10. Funcion interfaz para la funcion del Algoritmo 7.9 * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtY137 c ITES PARANINFO
  • 138. Programas en Pascal. Una introducción a la Programación.var n X integerY(* * Pascal no admite que una funcion devuelve un valor de un tipo registro, * Por este motivo la funcion iFibo se ha convertido en un procedimiento con * dos parametros paso por variable *)procedure ipi˜o @n X integerY VAR —D ˜ X longintAY(* PRE n 0 *)(* POST a, b = Fibo(n), Fibo(n-1) *)var fi˜D fi˜ent X longintYbegin if n a I then begin — Xa IY ˜ Xa IY (* a = Fibo(1), b = Fibo(0) *) end else begin (* n 1 *) ipi˜o @n E ID fi˜D fi˜entAY (* * tenemos: fib = Fibo(n-1) y fibAnt = Fibo(n-2), luego: * Fibo(n) = Fibo(n-1) + Fibo(n-2) = fib + fibAnt * Fibo(n-1) = fib : *) — Xa fi˜ C fi˜entY ˜ Xa fi˜Y endendYfunction pinterf @n X integerA X longintY(* PRE n 0 *)(* POST Finterf (n) = Fibo(n) *)var fi˜D fi˜ent X longintYbegin if n a H then pinterf Xa I else begin (* n 0 *) (* se llama a iFibo y se descarta su segundo resultado *) ipi˜o @nD fi˜D fi˜entAY pinterf Xa fi˜ endendYbegin ™lrs™rY ITES PARANINFO c 138
  • 139. Programas en Pascal. Una introducción a la Programación. writelnY writeln@*****AY writeln@***** Algoritmo 7.10. Funcion interfaz para la funcion *****AY writeln@***** del Algoritmo 7.9 *****AY writeln@*****AY writelnY write@Termino de la sucesion que se desea calcular (= 0): AY readln@nAY writelnY writeln@El termino D nD -esimo (posicion D nCID ) de la sucesion es: D pinterf @nAAY writelnY write @Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoU•IIY(* * Algoritmo 7.11. Funcion potencia natural mejorada * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYvar ˜—se X realY exponente X integerYfunction €otx—t @— X realY n X integerA X realY(* PRE (n = 0) y (n = 0 = a 0) *)(* POST PotNat(a, n) = a elevado a n *)var p X realYbegin if n a H then €otx—t Xa IFH else (* n 0 *) begin p Xa €otx—t @—D n div PAY if n mod P a H then €otx—t Xa p B p139 c ITES PARANINFO
  • 140. Programas en Pascal. Una introducción a la Programación. else €otx—t Xa — B p B p endYendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.11. Funcion potencia natural mejorada *****AY writeln@*****AY writelnY write@Introduzca un real como base de la potencia: AY readln@˜—seAY writelnY write@Introduzca un entero como exponente de la potencia (= 0): AY readln@exponenteAY writelnY writeln@Resultado: D €otx—t@˜—seD exponenteAXIXPAY writelnY write @Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoU•IPY(* * Algoritmo 7.12. Funcion division natural mejorada * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 7. Disenyo recursivo *)uses ™rtYvar dividendoD divisorD ™o™ienteD resto X integerY(* * Pascal no admite que una funcion devuelve un valor de un tipo registro, * Por este motivo la funcion DivNat se ha convertido en un procedimiento * con dos parametros paso por variable *)procedure hivx—t@numD den X integerY VAR ™o™D res X integerAY(* ITES PARANINFO c 140
  • 141. Programas en Pascal. Una introducción a la Programación. * PRE: (num = 0) y (den 0) * POST: DivNat (num, den, c, r) y num = coc * den + res y 0 = res den *)begin if num ` den then begin ™o™ Xa HY res Xa num end else begin hivx—t@numD den B PD ™o™D resAY ™o™ Xa ™o™ B PY if res ba den then begin ™o™ Xa ™o™ C IY res Xa res E den end endendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.12. Funcion division natural mejorada *****AY writeln@*****AY writelnY write@Introduzca el dividendo (= 0): AY readln@dividendoAY writelnY write@Introduzca el divisor ( 0): AY readln@divisorAY hivx—t@dividendoD divisorD ™o™ienteD restoAY writelnY writeln@Resultado: cociente = D ™o™ienteD , resto = D restoAY writelnY write @Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoU•IQY(* * Algoritmo 7.13. Accion recursiva que resuelve el problema de las torres de Hanoi * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico141 c ITES PARANINFO
  • 142. Programas en Pascal. Una introducción a la Programación.* Autores del libro: Jesus J. Garcia Molina* Francisco J. Montoya Dato* Jose L. Fernandez Aleman* Maria J. Majado Rosales* Fecha: 1/9/2005* Capitulo 7. Disenyo recursivo*)uses ™rtYconst weˆ a ISYtype ist—™— a AFFCY (* El tipo Estaca sera un rango de caracteres *)var ndis™os X integerYprocedure r—noi@n X integerY origenD intermedioD destinoX ist—™—AY (* PRE ... la explicada en el texto *) (* POST ... la explicada en el texto *) procedure mover@ˆD ‰X ist—™—AY (* PRE ... la explicada en el texto *) (* POST ... la explicada en el texto *) begin (* de la accion mover *) (* * En nuestro caso la accion mover se limitara a * mostrar por la salida el movimiento realizado. * En general podria involucrar la modificacion del * estado de las estacas, si quisieramos llevar cuenta * del estado del juego en cada momento. Por esta * razon los parametros de tipo Estaca de la accion * Hanoi son de tipo dato-resultado. *) writeln@ mover disco de la estaca D ˆD a la estaca D ‰A endYbegin (* de la accion Hanoi *) case n of I X mover@origenD destinoA else (* n 1 *) begin r—noi@nEID origenD destinoD intermedioAY mover@origenD destinoAY r—noi@nEID intermedioD origenD destinoA end endendY ITES PARANINFO c 142
  • 143. Programas en Pascal. Una introducción a la Programación.begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.13. Accion recursiva que resuelve el *****AY writeln@***** problema de las torres de Hanoi *****AY writeln@*****AY writelnY write@Numero de discos (maximo D weˆD ): AY readln@ndis™osAY writelnY r—noi@ndis™osD AD BD CAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoU•IR•ISY(* * Algoritmo 7.14. Algoritmo de ordenacion rapida de Hoare * Algoritmo 7.15. Accion de particionamiento para la accion de clasificacion rapida * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Capitulo 7. Disenyo recursivo *)(* * HOARE * * Implementa el algoritmo de clasificacion rapida de C. A. R. Hoare. * Solicita los datos para la generacion de los elementos del vector * (valores enteros): semilla aleatoria, numero de elementos que se * desean generar (con un maximo determinado por la constante MAX), y * valor maximo que se generara. Muestra el vector antes y despues de * la clasificacion, y comprueba que efectivamente esta ordenado tras * la llamada a la funcion de clasificacion. *)uses ™rtYconst weˆ a QHHHY143 c ITES PARANINFO
  • 144. Programas en Pascal. Una introducción a la Programación.type „ipof—se a integerY indi™e a IFFweˆY „h—tos a array ‘indi™e“ of „ipof—seYvar t X „h—tosY m—x•re—l X indi™eYprocedure gomprue˜—@v X „h—tosY mr X indi™eAY(* * Comprueba que los mr primeros elementos del vector v esten * efectivamente ordenados. En caso contrario imprime un mensaje * de error indicando la posicion i donde hay una inversion, es * decir, donde v[i] v[i+1]. *)var i X indi™eY error X booleanYbegin i Xa IY error Xa falseY while @i ` mrA and not error do if v‘i“ b v‘iCI“ then begin write@ ERROR (i=D iD )AY error Xa true end else i Xa i C IendYprocedure snit„h—tos@VAR v X „h—tosY VAR mr X indi™eAYvar i X indi™eY seedD m—ximo X integerYbegin write@Semilla aleatoria: AY readln@seedAY ‚—ndƒeed Xa seedY writelnY write@Elementos en el vector (minimo 1, maximo D weˆD ): AY readln@mrAY writelnY write@Generar valores entre cero y: AY readln@m—ximoAY for i Xa I to mr do v‘i“ Xa ‚—ndom@m—ximoCIA ITES PARANINFO c 144
  • 145. Programas en Pascal. Una introducción a la Programación.endYprocedure wostr—r„h—tos@v X „h—tosY mr X indi™eAYvar i X indi™eYbegin i Xa IY write@v‘i“AY while i `b mr do begin write@, AY i Xa i C IY write@v‘i“A endY writelnendYprocedure gl—sifi™—™ion‚—pid—@VAR v X „h—tosY elementos X indi™eAY procedure gl—sifi™—™ion‚—pid—s@VAR v X „h—tosY infD sup X integerAY (* * Los parametros inf y sup son de tipo integer en lugar de * ser de tipo indice porque en las llamadas recursivas que se * hacen en esta funcion con los valores (inf, p-1) y * (p+1, sup) el valor de p+1 podria superar el limite * superior del tipo indice, mientras que el de p-1 podria * caer por debajo de su limite inferior, como asi ocurre, de * hecho. *) var p X indi™eY procedure €—rti™ion@VAR v X „h—tosY infD sup X indi™eY VAR pivote X indi™eAY var izD dr X indi™eY procedure snter™—m˜io@VAR v X „h—tosY iD j X indi™eAY var t X „ipof—seY begin t Xa v‘i“Y v‘i“ Xa v‘j“Y v‘j“ Xa t endY begin iz Xa inf C IY dr Xa supY while iz `b dr C I do begin while @iz `a drA and @v‘iz“ `a v‘inf“A do iz Xa iz C IY145 c ITES PARANINFO
  • 146. Programas en Pascal. Una introducción a la Programación. while @iz `a drA and @v‘dr“ ba v‘inf“A do dr Xa dr E IY if iz ` dr then begin snter™—m˜io@vD izD drAY iz Xa iz C IY dr Xa dr E I end endY snter™—m˜io@vD infD drAY pivote Xa dr endY begin if inf ` sup then begin €—rti™ion@vD infD supD pAY gl—sifi™—™ion‚—pid—s@vD infD pEIAY gl—sifi™—™ion‚—pid—s@vD pCID supA end endYbegin gl—sifi™—™ion‚—pid—s@vD ID elementosAendYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 7.14_15. óOrdenacin rpida de HoareAY writeln@*****AY writelnY snit„h—tos@tD m—x•re—lAY writelnY writeln@Vector antes de la clasificacion:AY wostr—r„h—tos@tD m—x•re—lAY write @Enter para ordenar...AY readlnY gl—sifi™—™ion‚—pid—@tD m—x•re—lAY writelnY writeln@Vector despues de la clasificacion:AY wostr—r„h—tos@tD m—x•re—lAY gomprue˜—@tD m—x•re—lAY writelnY write @Pulse enter para continuarAY readlnendF¦ ¥ ITES PARANINFO c 146
  • 147. Programas en Pascal. Una introducción a la Programación.3.7. Capítulo 8§ ¤program elgoritmoV•IY(* * Algoritmo 8.1. Comprobar el equilibrio de los signos puntuacion de apertura/cierre * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 8. Estructuras de datos dinamicas * Ficheros de prueba: dat8_1A.txt, dat8_1B.txt, dat8_1C.txt y dat8_1D.txt * * SIGNOS * * Comprueba el equilibrio de los signos de puntuacion parentizados * (parentesis, corchetes y llaves) de un fichero cuyo nombre se le * solicita por teclado al usuario. * * A diferencia del algoritmo presentado en el capitulo de EE.DD. * dinamicas, este programa no solo dice si el texto es correto o * no, sino que en este ultimo caso informa ademas del punto del * texto exacto y los signos que causaron el error. * * Para ello, al recorrer la secuencia de entrada se va llevando * cuenta de la posicion por la que en cada momento se va en el reco- * rrido (numero de linea y columna dentro de esta). Cuando se en- * cuentra un signo de apertura, no solo se guarda en la pila el * signo en cuestion, sino tambien el punto (linea y columna) donde * este se encontro. De este modo, ante la ocurrencia de un error * es posible notificar exactamente los signos que lo produjeron y * las posiciones del texto donde estos se encuentran. * * Para detectar la condicion de error, en lugar de llevar una unica * variable booleana llamada error, como en el algoritmo del libro, * utilizaremos dos variables distintas que nos serviran para identi- * ficar el tipo de error exacto. Los nombres y significados de estas * variables son los siguientes: * * error_pila: esta variable se pondra a VERDADERO cuando se encuentre * un signo de cierre y la pila este vacia (es decir, no * haya signos de apertura pendientes de cerrar). * * error_signo: esta variable se pondra a VERDADERO cuando se encuen- * tre un signo de cierre que no se corresponda con el147 c ITES PARANINFO
  • 148. Programas en Pascal. Una introducción a la Programación.* ultimo signo de apertura encontrado en el texto.*)uses ™rtD unitms™IYconst e€i‚„…‚eƒ a ‘ [D (D { “Y (* conjunto de signos de apertura *) gsi‚‚iƒ a ‘ ]D )D } “Y (* conjunto de signos de cierre *)type d—tos•pil— a record signo X charY line—D ™olumn— X integer endY pil—•signos a ”nodo•signosY nodo•signos a record d—tos X d—tos•pil—Y sig X pil—•signos endYvar ƒ X ms™IY p X pil—•signosY d X d—tos•pil—Y nom˜re•fi™hero X stringY error•signoD error•pil— X booleanY line—•—™tu—lD (* linea actual del recorrido *) ™olumn—•—™tu—l X integerY (* columna actual del recorrido *)(* ---------------- Operaciones de la Pila ----------------- *)function €il—†—™i— X pil—•signosYbegin €il—†—™i— Xa xsvendYfunction is€il—†—™i—@p X pil—•signosA X booleanYbegin is€il—†—™i— Xa p a €il—†—™i—endYfunction epil—r@p X pil—•signosY d X d—tos•pil—A X pil—•signosYvar q X pil—•signosY ITES PARANINFO c 148
  • 149. Programas en Pascal. Una introducción a la Programación.begin new@qAY q”Fd—tos Xa dY q”Fsig Xa pY epil—r Xa qendYprocedure gim—@p X pil—•signosY VAR ™ X d—tos•pil—AYbegin ™ Xa p”Fd—tosendYfunction hes—pil—r@p X pil—•signosA X pil—•signosYvar q X pil—•signosYbegin q Xa p”FsigY dispose@pAY hes—pil—r Xa qendYfunction hestruir€il—@p X pil—•signosA X pil—•signosYbegin while not is€il—†—™i—@pA do p Xa hes—pil—r@pAY hestruir€il— Xa pendY(* ---------------- Operaciones del Programa ----------------- *)function ƒignogierre@—pertur— X charA X charY(* * Devuelve el signo de cierre correspondiente al signo * de apertura apertura. * * Pre: el caracter apertura es un signo de apertura *)var res X charYbegin case —pertur— of [ X res Xa ]Y ( X res Xa )Y { X res Xa } endY149 c ITES PARANINFO
  • 150. Programas en Pascal. Una introducción a la Programación. ƒignogierre Xa resendY(* ---------------- Programa Principal ----------------- *)begin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 8.1. Comprobar el equilibrio de los signos puntuacion *****AY writeln@***** de apertura/cierre *****AY writeln@*****AY writelnY „r—t—mientosni™i—l•wƒgI@ƒAY g—rg—r•pi™hero•wƒgI@ƒD dat8_1A.txtAY writeln@La secuencia de entrada es:AY writelnY gomenz—r•wƒgI @ƒAY while @ie•wƒgI @ƒA `b wƒgI•w—r™—pinA do begin if @ie•wƒgI@ƒA a wƒgI•w—r™—pinvine—A then writeln else write@ie•wƒgI@ƒAAY ev—nz—r•wƒgI @ƒA endY writelnY writelnY gomenz—r•wƒgI@ƒAY if ie•wƒgI@ƒA a wƒgI•w—r™—pin then writeln@Secuencia vacia.A else begin p Xa €il—†—™i—Y line—•—™tu—l Xa IY ™olumn—•—™tu—l Xa IY error•signo Xa falseY error•pil— Xa falseY repeat if ie•wƒgI@ƒA in e€i‚„…‚eƒ then begin dFsigno Xa ie•wƒgI@ƒAY dFline— Xa line—•—™tu—lY dF™olumn— Xa ™olumn—•—™tu—lY p Xa epil—r@pD dA end else if ie•wƒgI@ƒA in gsi‚‚iƒ then begin if is€il—†—™i—@pA then error•pil— Xa true else begin gim—@pD dAY ITES PARANINFO c 150
  • 151. Programas en Pascal. Una introducción a la Programación. p Xa hes—pil—r@pAY error•signo Xa ie•wƒgI@ƒA `b ƒignogierre@dFsignoA end end else if ie•wƒgI@ƒA a wƒgI•w—r™—pinvine— then begin line—•—™tu—l Xa line—•—™tu—l C IY ™olumn—•—™tu—l Xa H endY (* * Avanzamos solo si no ha habido error, para preservar * en ese caso los valores de la posicion actual y poder * mostrarlos en el mensaje de error *) if not @error•signo or error•pil—A then begin ev—nz—r•wƒgI@ƒAY ™olumn—•—™tu—l Xa ™olumn—•—™tu—l C I end until @ie•wƒgI@ƒA a wƒgI•w—r™—pinA or error•signo or error•pil—Y (* * Analizamos la razon por la que se detuvo la iteracion: * * error_pila: se encontro (en el EA) un signo de cierre cuando * no habia pendientes de cierre ningun signo de apertura. * * error_signo: se encontro (en el EA) un signo de cierre que * no se corresponde con el ultimo signo de apertura * enontrado (que esta en d). * * no hay error, pero la pila no es vacia: el texto se agoto y * los signos de apertura que quedan en la pila no se * cerraron. * * en otro caso: se alcanzo la marca de fin sin errores, y en * la pila no quedan signos de apertura sin cerrar, luego * el texto es correcto. *) if error•pil— then begin write@Error: signo de cierre D ie•wƒgI@ƒAD en AY writeln@linea D line—•—™tu—lD , columna D ™olumn—•—™tu—lD ,AY writeln@no tiene signo de apertura correspondiente.A end else if error•signo then begin write@Error: signo de cierre D ie•wƒgI@ƒAD en AY writeln@linea D line—•—™tu—lD , columna D ™olumn—•—™tu—lD ,AY write@no se corresponde con signo de apertura AY write@D dFsignoD en linea D dFline—AY151 c ITES PARANINFO
  • 152. Programas en Pascal. Una introducción a la Programación. writeln@, columna D dF™olumn—AY end else if not is€il—†—™i—@pA then begin writeln@Error: se agoto el texto con los siguientes AY writeln@signos de apertura pendientes de cerrar:AY writelnY repeat gim—@pD dAY p Xa hes—pil—r@pAY write@ signo D dFsignoD : linea AY writeln@dFline—D , columna D dF™olumn—A until is€il—†—™i—@pA end else writeln@Texto correcto.AY p Xa hestruir€il—@pA endY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoV•PY(* * Algoritmo 8.2. Crear un archivo secuencial que almacena enteros * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 8. Estructuras de datos dinamicas *)uses ™rtYvar — X file of integerY i X integerY nom˜repi™h X stringYbegin ™lrs™rY writelnY writeln@*****AY ITES PARANINFO c 152
  • 153. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 8.2. Crear un archivo secuencial que *****AY writeln@***** almacena enteros *****AY writeln@*****AY writelnY write@Introduzca el nombre del fichero: AY readln@nom˜repi™hAY writelnY —ssign@—D nom˜repi™hAY rewrite@—AY write@ Introduzca un numero entero (0 para terminar): AY readln@iAY while i `b H do begin write@—D iAY write@ Introduzca un numero entero (0 para terminar): AY readln@iA endY ™lose@—AY writelnY writeln@Fichero D nom˜repi™hD creadoAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoV•QY(* * Algoritmo 8.3. Recorrido de un archivo secuencial de enteros para mostrarlos * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 8. Estructuras de datos dinamicas *)uses ™rtYvar — X file of integerY i X integerY nom˜repi™h X stringYbegin ™lrs™rY writelnY writeln@*****AY153 c ITES PARANINFO
  • 154. Programas en Pascal. Una introducción a la Programación. writeln@***** Algoritmo 8.3. Recorrido de un archivo secuencial de enteros *****A Y writeln@***** para mostrarlos *****AY writeln@*****AY writelnY write@Introduzca el nombre del fichero de entrada: AY readln@nom˜repi™hAY —ssign@—D nom˜repi™hAY writelnY write@El fichero consta de los siguientes elementos: AY (* * Notese que este algoritmo sigue el primer esquema de * recorrido del segundo modelo de acceso secuencial * en el que se tiene: * Iniciar: Reset(a) * EsUltimo: eof(a) * Avanzar: read(a, i) *) reset@—AY while not eof@—A do begin read@—D iAY write@iD A endY ™lose@—AY writelnY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoV•RY(* * Algoritmo 8.4. Acceso directo a un archivo para modificar un elemento * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman * Maria J. Majado Rosales * Fecha: 1/9/2005 * Capitulo 8. Estructuras de datos dinamicas *)uses ™rtYvar — X file of integerY ITES PARANINFO c 154
  • 155. Programas en Pascal. Una introducción a la Programación. pD i X integerY nom˜repi™h X stringYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 8.4. Acceso directo a un archivo para *****AY writeln@***** modificar un elemento *****AY writeln@*****AY writelnY write@Introduzca el nombre del fichero: AY readln@nom˜repi™hAY —ssign@—D nom˜repi™hAY reset@—AY writelnY write@Introduzca la posicion que quiere modificar (= 0): AY readln@pAY writelnY if @p ` HA or @p b pileƒize@—AEIA then writeln@Posicion fuera del archivoA else (* (p = 0) and (p FileSize (a)) *) begin seek@—D pAY read@—D iAY writeln@Valor actual en la posicion D pD : D iAY writelnY write@Introduce nuevo valor: AY readln@iAY seek@—D pAY write@—D iAY writelnY writeln@Fichero D nom˜repi™hD actualizadoAY endY ™lose@—AY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥§ ¤program elgoritmoV•SY(* * Algoritmo 8.5. Anyadir un elemento al final de un archivo * Titulo del libro: Una introduccion a la programacion. * Un enfoque algoritmico * Autores del libro: Jesus J. Garcia Molina * Francisco J. Montoya Dato * Jose L. Fernandez Aleman155 c ITES PARANINFO
  • 156. Programas en Pascal. Una introducción a la Programación.* Maria J. Majado Rosales* Fecha: 1/9/2005* Capitulo 8. Estructuras de datos dinamicas*)uses ™rtYvar — X file of integerY i X integerY nom˜repi™h X stringYbegin ™lrs™rY writelnY writeln@*****AY writeln@***** Algoritmo 8.5. Anyadir un elemento al final de un archivo *****AY writeln@*****AY writelnY write@Introduzca el nombre del fichero: AY readln@nom˜repi™hAY —ssign@—D nom˜repi™hAY reset@—AY writelnY write@Introduzca un dato entero para anyadir al final del fichero: AY readln@iAY seek@—D pileƒize @—AAY write@—D iAY ™lose@—AY writelnY writeln@Fichero D nom˜repi™hD actualizadoAY writelnY write@Pulse enter para continuarAY readlnendF¦ ¥ ITES PARANINFO c 156

×