ejercicios-resueltos-en-pascal

10,202 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
10,202
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
181
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

ejercicios-resueltos-en-pascal

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×