SlideShare una empresa de Scribd logo
1 de 156
Descargar para leer sin conexión
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
Programas en Pascal. Una introducción a la Programación.




Índice


1. Introducción                                                                                                  3
  1.1.   Guía de usuario para Turbo Pascal 5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          4

  1.2.   Guía de usuario para Dev-Pascal       . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    4


2. Fe de erratas                                                                                                 6


3. 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
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 de
programación todos los algoritmos que aparecen en el libro Una Introducción a la Programación. Un
enfoque algorítmico, según la conversión descrita en el Capítulo 9 del libro. Por tanto, el lector del
libro dispone de los programas que le permiten analizar el comportamiento de los algoritmos durante la
ejecución.

     Los programas han sido creados y probados con las versiones 5.5 y 7.0 de Turbo Pascal de Borland
y con la versión 1.9.2 del entorno Dev-Pascal (compilador Free Pascal) de Bloodshed, sobre los sistemas
operativos Windows 98, 2000 y XP. Si el lector está más habituado a entornos Linux, puede optar por
emplear 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ón
5.5 se puede descargar de forma gratuita del sitio web de Borland
httpXGG™ommunityF˜orl—ndF™omG—rti™leGHDIRIHDPHVHQDHHFhtml                pero no la versión 7.0 que es más
có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 Bloodshed
httpXGGwwwF˜loodshedFnetGdevp—s™—lFhtml.
     El lector puede ejecutar los programas a partir del chero   p—s™—lFzip que se encuentra en el sitio web
junto a este documento. Los programas están distribuidos en carpetas, una por cada capítulo. El nombre
de 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 modelos
de acceso secuencial descritos en el Capítulo 5. Los dos últimos modelos se han construido apoyándonos
en el concepto de secuencia intermedia. En la carpeta    unit están los archivos fuentes y los archivos objeto
de 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 que
indica el tipo de elemento (c, e o r) y un 1 o 2 para indicar el modelo. Por ejemplo, Unitmse2.pas
es la unidad para secuencias de enteros del segundo modelo y Unitmsc1.pas es la unidad para secuencias
de caracteres del primer modelo.

     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 parte
interface del código fuente de cada unidad. El lector interesado también puede escudriñar el código de las
unidades con el objetivo de aprender sobre estructuras de datos dinámicas (se han implementado como
listas).

     Se han creado archivos que almacenan secuencias que se utilizan como ejemplo de entrada en la
ejecució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 se
almacenan como líneas de caracteres y las secuencias de números con un número por línea de entrada. En
la carpeta con los programas del Capítulo 6 se incluyen dos programas (qixpT•IFp—s y       qixpT•RFp—s) que
crean los archivos de datos Pascal para el   Algoritmo 6.1 y el Algoritmo 6.4 (también se proporcionan
los 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 lo




3     c ITES  PARANINFO
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 funciones
del 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 los
ejercicios del libro, así como la implementación de las unidades del tercer y cuarto modelo de acceso
secuencial.



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 para
ejecutar los programas, pero el lector puede consultar esos libros para obtener más detalles. Los pasos
para 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, pero
si 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 abierto
el 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
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 en
el directorio de las unidades se encuentran el archivo fuente de la unidad empleada, ya que se generaría
automáticamente el archivo objeto de la unidad. Si por alguna razón se necesitase compilar las unidades
de 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 última
versió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 el
ejecutable. 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. Este
problema no se tiene con el sistema operativo Windows 98.




5         c ITES  PARANINFO
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 sitio
web del libro iremos actualizando esta fe de erratas en un chero aparte.



Capítulo 4

Algoritmo 4.4

     El segundo argumento de la llamada a la acción   is™ri˜ir que escribe el resultado debe ser sum—Gnumilem
en vez de   sum—Gnum.

Capítulo 6

Algoritmo 6.17

     La función   €osin„—˜l— no coincide en el texto y en el algoritmo. El algoritmo válido es el que aparece
en el texto.

     En la función   godifi™—™ion hay que cambiar nuevo€—rF™          por   nuevo€—rFs   en la segunda asignación
de la cláusula    ix•y„‚y•geƒy de la instrucción ƒiqÚx.

Capítulo 7

Algoritmo 7.13

          ist—™— debe denirse
     El tipo                         fuera de la acción   r—noi,   ya que se utiliza como tipo de los parámetros
origen, intermedio y destino.
                                  r—noi debería ser r—noi@nEID intermedioD origenD destinoA
     La segunda llamada a la acción                                                                            en
vez 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 8

Secció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 tres
nodos:.



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…veA
por:

               ƒs @fus™—r€osi™ionsndi™e@—r™h↑Findi™eD pF™l—veA = €yƒ•x…veA




                                                                                   ITES  PARANINFO c           6
Programas en Pascal. Una introducción a la Programación.




Capítulo 9

Secció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
Programas en Pascal. Una introducción a la Programación.




3.     Listados


3.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 ™rtY

var
   not—„eori— X realY
   not—€r—™ti™— X realY
   not—pin—l X realY

begin
     ™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 continuar'AY
     readln
endF
¦
                                                                                               ¥
§                                                                                               ¤
program elgoritmoP•PY
(*




                                                                 ITES  PARANINFO c        8
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 ™rtY

var
   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
        endY

begin
    ™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 continuar'AY
       readln
endF
¦
                                                                                ¥
§                                                                                ¤
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 algoritmico




9      c ITES  PARANINFO
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 ™rtY
const
    sw€…iƒ„y a HFPHY
    ƒiq…‚y•wihsgy a HFHSY
    gyw€viwix„y•…sx…ixsy a THY
    gyw€viwix„y•ex‰y a TY

var
   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
  endY

procedure 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
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
     endY

begin
     ™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 continuar'AY
     readln
endF
¦
                                                                                    ¥
§                                                                                    ¤
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 ™rtY
const
    sw€…iƒ„y a HFPHY




11     c ITES  PARANINFO
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 TY
var
       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 wordY

begin
    ™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 continuar'AY
       readln
endF
¦
                                                                                                   ¥
§                                                                                                   ¤
program elgoritmoP•SY
(*




                                                                    ITES  PARANINFO c        12
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 ™rtY

var
   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
     endY

begin
    ™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 megabytes'AY
    write@'Introduzca un entero (= 0): 'AY
    readln@nAY
    gonvertirY
    writeln@'La descomposicion es:'AY
    writeln@' Megabytes: 'D m˜AY




13    c ITES  PARANINFO
Programas en Pascal. Una introducción a la Programación.




       writeln@' Kilobytes: 'D k˜AY
       writeln@' Bytes: 'D ˜AY
       writelnY
       write@'Pulse enter para continuar'AY
       readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
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 ™rtY

var
   l—do X integerY

begin
    ™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
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 continuar'AY
     readln
endF
¦
                                                                                    ¥
§                                                                                    ¤
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 ™rtY

var
   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 honor'AY
         IWD IV X     write@'sobresaliente'AY
         IUD IT X     write@'notable'AY
         ISD IR X     write@'aprobado'AY
         else if not— ` IR then write@'suspenso'A
    endY
    writelnY




15   c ITES  PARANINFO
Programas en Pascal. Una introducción a la Programación.




       writelnY
       write@'Pulse enter para continuar'AY
       readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
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 ™rtY

var
         not— X integerY

begin
     ™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 honor'AY
          IWD IV X     write@'sobresaliente'AY
          IUD IT X     write@'notable'AY
          ISD IR X     write@'aprobado'AY
          HFFIQX       write@'suspenso'AY
          else         write@'no valida'AY
     endY
     writelnY
     writelnY
     write@'Pulse enter para continuar'AY
     readln
endF
¦
                                                                                                  ¥




                                                                   ITES  PARANINFO c        16
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 ™rtY

var
   oper—ndoID oper—ndoP X longintY
   oper—dor X charY

begin
     ™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 incorrecto'A
     endY
     writelnY
     write @'Pulse enter para continuar'AY
     readln
endF
¦
                                                                                  ¥
§                                                                                  ¤
program elgoritmoP•IHY
(*




17   c ITES  PARANINFO
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 ™rtY

var
   xD z X longintY
   m—yor X longintY

begin
     ™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 continuar'AY
     readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
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
Programas en Pascal. Una introducción a la Programación.




 * Fecha: 1/9/2005
 * Capitulo 2. Secuenciacion y analisis de casos
 *)

uses ™rtY

var
   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
   endY

begin
    ™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 false




19   c ITES  PARANINFO
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 valida'A
                    else writeln@' no es una fecha valida'AY
       writelnY
       write@'Pulse enter para continuar'AY
       readln
endF
¦
                                                                                                     ¥


§                                                                                                     ¤
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 ™rtY

var
   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
   endY

begin
    ™lrs™rY
    writelnY
    writeln@'*****'AY




                                                                      ITES  PARANINFO c        20
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 valida'A
                     else writeln@ ' no es una fecha valida'AY
       writelnY
       write@'Pulse enter para continuar'AY
       readln
endF
¦
                                                                                            ¥
§                                                                                            ¤
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 ™rtY

const
         ry‚e•xy‚wev a IHY
         ry‚e•iˆ„‚e a IPY




21     c ITES  PARANINFO
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 TY
var
         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 realY

procedure 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 wordY

begin
(* 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—goenyos
endY

procedure 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
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•fety
endY

procedure 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™uentos
endY

begin
     ™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 continuar'AY
     readln
endF
¦
                                                                                        ¥
§                                                                                        ¤
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 Aleman




23   c ITES  PARANINFO
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—phY

type
   €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
   endY

var
   ™ 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 cuadrado'AY
    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@™gDmgD'c:tp'AY (* 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
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—phY
endF
¦
                                                                                         ¥
§                                                                                         ¤
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
    endY
var
   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
     endY

begin
    ™lrs™rY




25     c ITES  PARANINFO
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 valida'A
                      else writeln@' no es una fecha valida'AY
       writelnY
       write@'Pulse enter para continuar'AY
       readln

endF
¦
                                                                                                  ¥




                                                                   ITES  PARANINFO c        26
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 ™rtY

type
    goorden—d— a realY
    €unto a record
                 x X goorden—d—Y
                 y X goorden—d—Y
    endY
var
   pID pPD pQD pR X €untoY
   poD pd X €untoY
   distD perimetro X realY

procedure 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 poFyAA
endY

procedure veer€unto@var xD y X realY n X shortintAY
begin
      write@' Coordenada x del punto 'D nD': 'AY
      readln@xAY
      write@' Coordenada y del punto 'D nD ': 'AY
      readln@yAY
      writeln
endY

begin
    ™lrs™rY
    writelnY




27     c ITES  PARANINFO
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 continuar'AY
       readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
program elgoritmoQ•PY
(*




                                                                   ITES  PARANINFO c        28
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 ™rtY

type
        goorden—d— a realY
        €unto a record
                x X goorden—d—Y
                y X goorden—d—Y
        endY
var
        pID pPD pQD pR X €untoY
        dID dPD dQD dR X realY
        perimetro X realY

procedure 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 poFyAA
endY

procedure veer€unto@var xD y X realY n X shortintAY
begin
      write@' Coordenada x del punto 'D nD':'AY
      readln@xAY
      write@' Coordenada y del punto 'D nD ':'AY
      readln@yAY
      writeln
endY

begin
    ™lrs™rY
    writelnY
    writeln@'*****'AY
    writeln@'***** Algoritmo 3.2. Calcular el perimetro de un *****'AY
    writeln@'*****             cuadrilatero irregular (version 2) *****'AY




29     c ITES  PARANINFO
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 continuar'AY
       readln
endF
¦
                                                                                                     ¥
§                                                                                                     ¤
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 ™rtY

var
      xD yX integerY

procedure snter™—m˜i—r@var —D ˜ X integerAY
(* PRE a, b : Entero, a = A, b = B *)
(* POST a = B, b = A *)
var
   t X integerY
begin
     t Xa —Y




                                                                      ITES  PARANINFO c        30
Programas en Pascal. Una introducción a la Programación.




       — Xa ˜Y
       ˜ Xa t
endY


begin
     ™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 continuar'AY
     readln
endF
¦
                                                                                         ¥
§                                                                                         ¤
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 ™rtY

var
   —D ˜D ™ X integerY

procedure snter™—m˜i—r@var xD y X integerAY
(* PRE x, y : Entero, x = X, y = Y *)
(* POST x = Y, y = X *)
var




31     c ITES  PARANINFO
Programas en Pascal. Una introducción a la Programación.




   t X integerY
begin
     t Xa xY
     x Xa yY
     y Xa t
endY
begin
     ™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 espacios'AY
     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 izquierda'AY
     writelnY
     writeln@'Valor final de a, b y c: 'D —D ', 'D˜D ' y 'D ™AY
     writelnY
     write@'Pulse enter para continuar'AY
     readln
endF
¦
                                                                                               ¥
§                                                                                               ¤
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
Programas en Pascal. Una introducción a la Programación.




 * Capitulo 3. Acciones y funciones
 *)

uses ™rtD gr—phQY

type
    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
    endY
var
   ™e X gu—dr—doY

procedure 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 integerY
begin
     €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
     endY
endY

procedure veer@var ™ X gu—dr—doAY
begin
      writeln@' CUADRADO'AY
      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
      writelnY




33   c ITES  PARANINFO
Programas en Pascal. Una introducción a la Programación.




endY

begin
     ™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 continuar'AY
     readln
endF
¦
                                                                                               ¥
§                                                                                               ¤
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 ™rtY

type
    goorden—d— a realY
    €unto a record
                 x X goorden—d—Y
                 y X goorden—d—Y
    endY
var
   pID pPD pQD pR X €untoY
   perimetro X realY




                                                                ITES  PARANINFO c        34
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 poFyAA
endY
procedure veer€unto@var xD y X realY n X shortintAY
begin
     write@' Coordenada x del punto 'D nD':'AY
     readln@xAY
     write@' Coordenada y del punto 'D nD ':'AY
     readln@yAY
     writelnY
endY

begin
    ™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 continuar'AY
       readln
endF
¦
                                                                                            ¥
§                                                                                            ¤
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 Dato




35     c ITES  PARANINFO
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 ™rtY

var
   xD yD z X longintY

function w—xQ@—D ˜D ™ X longintA X longintY
begin
     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 ™
endY

begin
    ™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 espacios'AY
       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 continuar'AY
       readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
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
Programas en Pascal. Una introducción a la Programación.




 * Capitulo 3. Acciones y funciones
 *)
uses ™rtY

var
   xD yD z X longintY

function w—xP @—D ˜ X longintA X longintY
begin
     w—xP Xa @— C ˜ C —˜s @— E ˜AA div P
endY

function w—xQ @—D ˜D ™ X longintA X longintY
begin
     w—xQ Xa w—xP@ —D w—xP @˜D ™AAY
endY

begin
     ™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 espacios'AY
     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 continuar'AY
     readln
endF
¦
                                                                               ¥
§                                                                               ¤
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
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
    endY
var
   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 HFFIY
begin
     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 THY
endY

begin
    ™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
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 continuar'AY
       readln
endF
¦
                                                                                ¥
§                                                                                ¤
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
    endY
var
   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 un




39     c ITES  PARANINFO
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
 endY

begin (* de SumarDuraciones *)
     gonvertirƒh@gonvertirhƒ@—A C gonvertirhƒ@˜AD resAY
endY

begin
    ™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
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 continuar'AY
       readln
endF
¦
                                                                            ¥
§                                                                            ¤
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 QIAY

type
         pe™h— a record
                      di— X IFFQIY
                      mes X IFFIPY
                      —nyo X wordY
         endY
var
         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 QTHHAY




41     c ITES  PARANINFO
Programas en Pascal. Una introducción a la Programación.




endY

begin
    ™lrs™rY
    writeln@'Introduzca una fecha'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

       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 valida'A
       else writeln@'no es una fecha valida'AY
       writelnY
       write@'Pulse enter para continuar'AY
       readln
endF
¦
                                                                                                  ¥




                                                                   ITES  PARANINFO c        42
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 ™rtY

var
   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 valores'AY




43     c ITES  PARANINFO
Programas en Pascal. Una introducción a la Programación.




    writelnY
    write@'Pulse enter para continuar'AY
    readln
endF
¦
                                                                                               ¥
§                                                                                               ¤
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™IY

var
   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 charY

begin
    ™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@sD'datos4_2.TXT'AY
    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
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 continuar'AY
       readln
endF
¦
                                                                                ¥
§                                                                                ¤
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™IY

var
   sD t X ms™IY

begin
    ™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@sD'datos4_3.TXT'AY
    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@sAY




45     c ITES  PARANINFO
Programas en Pascal. Una introducción a la Programación.




       endY
       w—r™—r•wƒgI@tAY
       ƒ—lv—r•pi™hero•wƒgI@tD'sal4_3.TXT'AY
       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@'Grabado'AY
       writelnY
       write@'Pulse enter para continuar'AY
       readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
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 unitmsrIY

var
   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
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@sD'datos4_4.txt'AY
     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 vacia'AY
     writelnY
     writelnY
     write@'Pulse enter para continuar'AY
     readln
endF
¦
                                                                                         ¥
§                                                                                         ¤
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™IY

var
   s X wƒgIY
   numgeros X integerY (* lleva cuenta del numero de '0' *)




47   c ITES  PARANINFO
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@sD'datos4_5.txt'AY
     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
               '0'X numgeros Xa numgeros C IY
               '1'X 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 continuar'AY
     readln
endF
¦
                                                                                                ¥
§                                                                                                ¤
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
Programas en Pascal. Una introducción a la Programación.




    *)

uses ™rtY

var
   nD i X integerY
   f—™tori—l X longintY

begin
     ™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 continuar'AY
     readln
endF
¦
                                                                               ¥
§                                                                               ¤
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 ™rtY

var




49       c ITES  PARANINFO
Programas en Pascal. Una introducción a la Programación.




    nD i X integerY
    f—™tori—l X longintY

begin
     ™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 continuar'AY
     readln
endF
¦
                                                                                               ¥


§                                                                                               ¤
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 ™rtY

var
   —D ˜D produ™to X longintY
   i X longintY

begin
    ™lrs™rY
    writelnY
    writeln@'*****'AY




                                                                ITES  PARANINFO c        50
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 continuar'AY
       readln
endF
¦
                                                                                            ¥
§                                                                                            ¤
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 ™rtY

var
   pD ™D r X longintY
   q X longintY

begin
    ™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 qAY




51     c ITES  PARANINFO
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 continuar'AY
       readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
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 ™rtY

var
   —D ˜D uD v X wordY

begin
    ™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
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 continuar'AY
       readln
endF
¦
                                                                                       ¥
§                                                                                       ¤
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 ™rtY

var
   x X integerY         (* indice inferior del intervalo de potencias *)
   y X integerY         (* indice superior del intervalo *)
   i X integerY

function €oten™i—P@n X integerAXlongintY
(* PRE: n : Entero = 0 *)
(* POST: Potencia2 = 2^n *)
var
   p X longintY
   j X integerY
begin
     p Xa IY
     for j Xa I to n do
         p Xa p B PY
        (* INV p = 2^j *)
     €oten™i—P Xa p
endY

begin
    ™lrs™rY
    writelnY
    writeln@'*****'AY
    writeln@'***** Algoritmo 4.11. Calculo de las potencias de 2 (version 1) *****'AY




53     c ITES  PARANINFO
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 continuar'AY
       readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
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 ™rtY

var
   x X integerY                (* indice inferior *)
   y X integerY                (* indice superior *)
   poten™i—P X longintY        (* resultado *)
   i X integerY

begin
    ™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
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 continuar'AY
       readln

endF
¦
                                                                                  ¥
§                                                                                  ¤
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 ™rtY

var
   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 XintegerY

begin
    ™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@nAY




55     c ITES  PARANINFO
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 continuar'AY
       readln
endF
¦
                                                                                                  ¥
§                                                                                                  ¤
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 ™rtY

var
   n X longintY         (* dato *)
   j X integerY

begin
    ™lrs™rY
    writelnY
    writeln@'*****'AY




                                                                   ITES  PARANINFO c        56
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 primo'A
       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 primo'A
                else writeln @nD ' no es primo'A
           endY
       writelnY
       write@'Pulse enter para continuar'AY
       readln
endF
¦
                                                                                            ¥
§                                                                                            ¤
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 ™rtY

var
   n X longintY
   j X integerY

begin
    ™lrs™rY
    writelnY
    writeln@'*****'AY
    writeln@'***** Algoritmo 4.15. Comprobar si un numero es primo (version 2) *****'AY
    writeln@'*****'AY
    writelnY




57     c ITES  PARANINFO
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 primo'A
    else if @n b QA and @@n mod   PA a HA then writeln@nD' es par, no es primo'A
    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 primo'A
                                   else writeln@nD ' no es primo'AY
     endY
    writelnY
    write@'Pulse enter para continuar'AY
    readln
endF
¦
                                                                                                 ¥
§                                                                                                 ¤
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 ™rtY

var
   nD r™ X longintY (* n dato de entrada, rc parte entera de la raiz *)
   i X longintY

begin
    ™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
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 continuar'AY
       readln
endF
¦
                                                                                         ¥
§                                                                                         ¤
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 ™rtY

var
   nD r™ X longintY             (* n dato, rc resultado *)
   impD iD ™ X longintY

begin
    ™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 @nAY




59     c ITES  PARANINFO
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal
ejercicios-resueltos-en-pascal

Más contenido relacionado

La actualidad más candente

Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Jsrfs Montemayor
 
Expresiones regulares
Expresiones regularesExpresiones regulares
Expresiones regularesJordan-P
 
Base de datos colegio
Base de datos colegioBase de datos colegio
Base de datos colegioCarlos Buezo
 
¿Qué hacer para dominar el arte del levantamiento de requerimientos?
¿Qué hacer para dominar el arte del levantamiento de requerimientos?¿Qué hacer para dominar el arte del levantamiento de requerimientos?
¿Qué hacer para dominar el arte del levantamiento de requerimientos?Software Guru
 
Informe Proyecto Final
Informe Proyecto FinalInforme Proyecto Final
Informe Proyecto FinalJorge Ramon
 
Habilidades para utilizar software de sistemas
Habilidades para utilizar software de sistemasHabilidades para utilizar software de sistemas
Habilidades para utilizar software de sistemasLuis Engallo Jr.
 
Programación en c++
Programación en c++Programación en c++
Programación en c++K-rlos Pac
 
Practica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQLPractica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQLIvan Luis Jimenez
 
Requerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no FuncionalesRequerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no Funcionalessullinsan
 
Diagramas de colaboracion
Diagramas de colaboracionDiagramas de colaboracion
Diagramas de colaboraciond-draem
 

La actualidad más candente (20)

Punteros
PunterosPunteros
Punteros
 
Trabajo poo
Trabajo poo Trabajo poo
Trabajo poo
 
Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)
 
Expresiones regulares
Expresiones regularesExpresiones regulares
Expresiones regulares
 
Base de datos colegio
Base de datos colegioBase de datos colegio
Base de datos colegio
 
¿Qué hacer para dominar el arte del levantamiento de requerimientos?
¿Qué hacer para dominar el arte del levantamiento de requerimientos?¿Qué hacer para dominar el arte del levantamiento de requerimientos?
¿Qué hacer para dominar el arte del levantamiento de requerimientos?
 
Informe Proyecto Final
Informe Proyecto FinalInforme Proyecto Final
Informe Proyecto Final
 
examen de base de datos
examen de base de datosexamen de base de datos
examen de base de datos
 
Diagrama de Colaboración
Diagrama de ColaboraciónDiagrama de Colaboración
Diagrama de Colaboración
 
Habilidades para utilizar software de sistemas
Habilidades para utilizar software de sistemasHabilidades para utilizar software de sistemas
Habilidades para utilizar software de sistemas
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
TABLA DE SÍMBOLOS
TABLA DE SÍMBOLOSTABLA DE SÍMBOLOS
TABLA DE SÍMBOLOS
 
Practica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQLPractica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQL
 
Requerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no FuncionalesRequerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no Funcionales
 
Diagramas de colaboracion
Diagramas de colaboracionDiagramas de colaboracion
Diagramas de colaboracion
 
Controles iso27002 2005
Controles iso27002 2005Controles iso27002 2005
Controles iso27002 2005
 
Tkinter pdf
Tkinter pdfTkinter pdf
Tkinter pdf
 
Jlex y cup en java
Jlex y cup en javaJlex y cup en java
Jlex y cup en java
 
Unidad v algebra relacional
Unidad v   algebra relacionalUnidad v   algebra relacional
Unidad v algebra relacional
 
Simulador de ensamble
Simulador de ensambleSimulador de ensamble
Simulador de ensamble
 

Similar a ejercicios-resueltos-en-pascal

Manual Pascal
Manual PascalManual Pascal
Manual PascalCEUNISAL
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladoresSheyli Patiño
 
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADArquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADAlex Gomez
 
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADArquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADAlex Gomez
 
Actividad 3.4.lizeth carmona,jessica diaz,susana sanchez equipo9
Actividad 3.4.lizeth carmona,jessica diaz,susana sanchez equipo9Actividad 3.4.lizeth carmona,jessica diaz,susana sanchez equipo9
Actividad 3.4.lizeth carmona,jessica diaz,susana sanchez equipo9jessidi
 
Workshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesWorkshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesVisual Engineering
 
Actividad 03.1 unix essentials file system basics.
Actividad 03.1 unix essentials  file system basics.Actividad 03.1 unix essentials  file system basics.
Actividad 03.1 unix essentials file system basics.RastaAliria
 
Actividad 03.1 unix essentials file system basics.
Actividad 03.1 unix essentials  file system basics.Actividad 03.1 unix essentials  file system basics.
Actividad 03.1 unix essentials file system basics.camilaml
 
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Diego Paúl Cuenca Quezada
 

Similar a ejercicios-resueltos-en-pascal (20)

Freepascal
FreepascalFreepascal
Freepascal
 
Hola mundorafaelnavarroprieto
Hola mundorafaelnavarroprietoHola mundorafaelnavarroprieto
Hola mundorafaelnavarroprieto
 
Manual Pascal
Manual PascalManual Pascal
Manual Pascal
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Conceptos estructuras de datos
Conceptos estructuras de datosConceptos estructuras de datos
Conceptos estructuras de datos
 
Ejecutables en Netbeans
Ejecutables en NetbeansEjecutables en Netbeans
Ejecutables en Netbeans
 
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADArquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
 
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNADArquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
Arquitectura de Computadores - Laboratorios 1,2 y 3 - UNAD
 
Actividad 3.4.lizeth carmona,jessica diaz,susana sanchez equipo9
Actividad 3.4.lizeth carmona,jessica diaz,susana sanchez equipo9Actividad 3.4.lizeth carmona,jessica diaz,susana sanchez equipo9
Actividad 3.4.lizeth carmona,jessica diaz,susana sanchez equipo9
 
Manual tecnico umasoft
Manual tecnico umasoftManual tecnico umasoft
Manual tecnico umasoft
 
Workshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesWorkshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensiones
 
Ap01 java
Ap01 javaAp01 java
Ap01 java
 
Net3
Net3Net3
Net3
 
Netbeans manual 3
Netbeans manual 3Netbeans manual 3
Netbeans manual 3
 
Actividad 03.1 unix essentials file system basics.
Actividad 03.1 unix essentials  file system basics.Actividad 03.1 unix essentials  file system basics.
Actividad 03.1 unix essentials file system basics.
 
Actividad 03.1 unix essentials file system basics.
Actividad 03.1 unix essentials  file system basics.Actividad 03.1 unix essentials  file system basics.
Actividad 03.1 unix essentials file system basics.
 
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
 
Notas de sistemas operativos/Saade Sergio
Notas de sistemas operativos/Saade SergioNotas de sistemas operativos/Saade Sergio
Notas de sistemas operativos/Saade Sergio
 
Admin Manual
Admin ManualAdmin Manual
Admin Manual
 
UNIDAD 3
UNIDAD 3 UNIDAD 3
UNIDAD 3
 

Último

4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTESaraNolasco4
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfpatriciavsquezbecerr
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxLudy Ventocilla Napanga
 

Último (20)

4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
La luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luzLa luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luz
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdf
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
recursos naturales america cuarto basico
recursos naturales america cuarto basicorecursos naturales america cuarto basico
recursos naturales america cuarto basico
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
 

ejercicios-resueltos-en-pascal

  • 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. Índice 1. Introducción 3 1.1. Guía de usuario para Turbo Pascal 5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2. Guía de usuario para Dev-Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Fe de erratas 6 3. 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 de programación todos los algoritmos que aparecen en el libro Una Introducción a la Programación. Un enfoque algorítmico, según la conversión descrita en el Capítulo 9 del libro. Por tanto, el lector del libro dispone de los programas que le permiten analizar el comportamiento de los algoritmos durante la ejecución. Los programas han sido creados y probados con las versiones 5.5 y 7.0 de Turbo Pascal de Borland y con la versión 1.9.2 del entorno Dev-Pascal (compilador Free Pascal) de Bloodshed, sobre los sistemas operativos Windows 98, 2000 y XP. Si el lector está más habituado a entornos Linux, puede optar por emplear 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ón 5.5 se puede descargar de forma gratuita del sitio web de Borland httpXGG™ommunityF˜orl—ndF™omG—rti™leGHDIRIHDPHVHQDHHFhtml pero no la versión 7.0 que es más có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 Bloodshed httpXGGwwwF˜loodshedFnetGdevp—s™—lFhtml. El lector puede ejecutar los programas a partir del chero p—s™—lFzip que se encuentra en el sitio web junto a este documento. Los programas están distribuidos en carpetas, una por cada capítulo. El nombre de 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 modelos de acceso secuencial descritos en el Capítulo 5. Los dos últimos modelos se han construido apoyándonos en el concepto de secuencia intermedia. En la carpeta unit están los archivos fuentes y los archivos objeto de 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 que indica el tipo de elemento (c, e o r) y un 1 o 2 para indicar el modelo. Por ejemplo, Unitmse2.pas es la unidad para secuencias de enteros del segundo modelo y Unitmsc1.pas es la unidad para secuencias de caracteres del primer modelo. 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 parte interface del código fuente de cada unidad. El lector interesado también puede escudriñar el código de las unidades con el objetivo de aprender sobre estructuras de datos dinámicas (se han implementado como listas). Se han creado archivos que almacenan secuencias que se utilizan como ejemplo de entrada en la ejecució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 se almacenan como líneas de caracteres y las secuencias de números con un número por línea de entrada. En la carpeta con los programas del Capítulo 6 se incluyen dos programas (qixpT•IFp—s y qixpT•RFp—s) que crean los archivos de datos Pascal para el Algoritmo 6.1 y el Algoritmo 6.4 (también se proporcionan los 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 lo 3 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 funciones del 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 los ejercicios del libro, así como la implementación de las unidades del tercer y cuarto modelo de acceso secuencial. 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 para ejecutar los programas, pero el lector puede consultar esos libros para obtener más detalles. Los pasos para 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, pero si 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 abierto el 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 en el directorio de las unidades se encuentran el archivo fuente de la unidad empleada, ya que se generaría automáticamente el archivo objeto de la unidad. Si por alguna razón se necesitase compilar las unidades de 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 última versió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 el ejecutable. 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. Este problema 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 sitio web del libro iremos actualizando esta fe de erratas en un chero aparte. Capítulo 4 Algoritmo 4.4 El segundo argumento de la llamada a la acción is™ri˜ir que escribe el resultado debe ser sum—Gnumilem en vez de sum—Gnum. Capítulo 6 Algoritmo 6.17 La función €osin„—˜l— no coincide en el texto y en el algoritmo. El algoritmo válido es el que aparece en el texto. En la función godifi™—™ion hay que cambiar nuevo€—rF™ por nuevo€—rFs en la segunda asignación de la cláusula ix•y„‚y•geƒy de la instrucción ƒiqÚx. Capítulo 7 Algoritmo 7.13 ist—™— debe denirse El tipo fuera de la acción r—noi, ya que se utiliza como tipo de los parámetros origen, intermedio y destino. r—noi debería ser r—noi@nEID intermedioD origenD destinoA La segunda llamada a la acción en vez 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 8 Secció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 tres nodos:. 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…veA por: ƒ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 9 Secció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. Listados 3.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 ™rtY var not—„eori— X realY not—€r—™ti™— X realY not—pin—l X realY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var 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 endY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 algoritmico 9 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 ™rtY const sw€…iƒ„y a HFPHY ƒiq…‚y•wihsgy a HFHSY gyw€viwix„y•…sx…ixsy a THY gyw€viwix„y•ex‰y a TY var 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 endY procedure 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 endY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY const sw€…iƒ„y a HFPHY 11 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 TY var 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 wordY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var 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 endY begin ™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 megabytes'AY write@'Introduzca un entero (= 0): 'AY readln@nAY gonvertirY writeln@'La descomposicion es:'AY writeln@' Megabytes: 'D m˜AY 13 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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var l—do X integerY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var 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 honor'AY IWD IV X write@'sobresaliente'AY IUD IT X write@'notable'AY ISD IR X write@'aprobado'AY else if not— ` IR then write@'suspenso'A endY writelnY 15 c ITES PARANINFO
  • 16. Programas en Pascal. Una introducción a la Programación. writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var not— X integerY begin ™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 honor'AY IWD IV X write@'sobresaliente'AY IUD IT X write@'notable'AY ISD IR X write@'aprobado'AY HFFIQX write@'suspenso'AY else write@'no valida'AY endY writelnY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ 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 ™rtY var oper—ndoID oper—ndoP X longintY oper—dor X charY begin ™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 incorrecto'A endY writelnY write @'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var xD z X longintY m—yor X longintY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var 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 endY begin ™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 false 19 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 valida'A else writeln@' no es una fecha valida'AY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var 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 endY begin ™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 valida'A else writeln@ ' no es una fecha valida'AY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY const ry‚e•xy‚wev a IHY ry‚e•iˆ„‚e a IPY 21 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 TY var 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 realY procedure 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 wordY begin (* 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—goenyos endY procedure 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•fety endY procedure 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™uentos endY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 Aleman 23 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—phY type €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 endY var ™ 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 cuadrado'AY 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@™gDmgD'c:tp'AY (* 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—phY endF ¦ ¥ § ¤ 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 endY var 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 endY begin ™lrs™rY 25 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 valida'A else writeln@' no es una fecha valida'AY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ 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 ™rtY type goorden—d— a realY €unto a record x X goorden—d—Y y X goorden—d—Y endY var pID pPD pQD pR X €untoY poD pd X €untoY distD perimetro X realY procedure 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 poFyAA endY procedure veer€unto@var xD y X realY n X shortintAY begin write@' Coordenada x del punto 'D nD': 'AY readln@xAY write@' Coordenada y del punto 'D nD ': 'AY readln@yAY writeln endY begin ™lrs™rY writelnY 27 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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY type goorden—d— a realY €unto a record x X goorden—d—Y y X goorden—d—Y endY var pID pPD pQD pR X €untoY dID dPD dQD dR X realY perimetro X realY procedure 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 poFyAA endY procedure veer€unto@var xD y X realY n X shortintAY begin write@' Coordenada x del punto 'D nD':'AY readln@xAY write@' Coordenada y del punto 'D nD ':'AY readln@yAY writeln endY begin ™lrs™rY writelnY writeln@'*****'AY writeln@'***** Algoritmo 3.2. Calcular el perimetro de un *****'AY writeln@'***** cuadrilatero irregular (version 2) *****'AY 29 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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var xD yX integerY procedure snter™—m˜i—r@var —D ˜ X integerAY (* PRE a, b : Entero, a = A, b = B *) (* POST a = B, b = A *) var t X integerY begin t Xa —Y ITES PARANINFO c 30
  • 31. Programas en Pascal. Una introducción a la Programación. — Xa ˜Y ˜ Xa t endY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var —D ˜D ™ X integerY procedure snter™—m˜i—r@var xD y X integerAY (* PRE x, y : Entero, x = X, y = Y *) (* POST x = Y, y = X *) var 31 c ITES PARANINFO
  • 32. Programas en Pascal. Una introducción a la Programación. t X integerY begin t Xa xY x Xa yY y Xa t endY begin ™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 espacios'AY 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 izquierda'AY writelnY writeln@'Valor final de a, b y c: 'D —D ', 'D˜D ' y 'D ™AY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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—phQY type 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 endY var ™e X gu—dr—doY procedure 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 integerY begin €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 endY endY procedure veer@var ™ X gu—dr—doAY begin writeln@' CUADRADO'AY 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 writelnY 33 c ITES PARANINFO
  • 34. Programas en Pascal. Una introducción a la Programación. endY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY type goorden—d— a realY €unto a record x X goorden—d—Y y X goorden—d—Y endY var 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 poFyAA endY procedure veer€unto@var xD y X realY n X shortintAY begin write@' Coordenada x del punto 'D nD':'AY readln@xAY write@' Coordenada y del punto 'D nD ':'AY readln@yAY writelnY endY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 Dato 35 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 ™rtY var xD yD z X longintY function w—xQ@—D ˜D ™ X longintA X longintY begin 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 ™ endY begin ™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 espacios'AY 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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var xD yD z X longintY function w—xP @—D ˜ X longintA X longintY begin w—xP Xa @— C ˜ C —˜s @— E ˜AA div P endY function w—xQ @—D ˜D ™ X longintA X longintY begin w—xQ Xa w—xP@ —D w—xP @˜D ™AAY endY begin ™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 espacios'AY 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 continuar'AY readln endF ¦ ¥ § ¤ 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 endY var 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 HFFIY begin 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 THY endY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 endY var 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 un 39 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 endY begin (* de SumarDuraciones *) gonvertirƒh@gonvertirhƒ@—A C gonvertirhƒ@˜AD resAY endY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 QIAY type pe™h— a record di— X IFFQIY mes X IFFIPY —nyo X wordY endY var 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 QTHHAY 41 c ITES PARANINFO
  • 42. Programas en Pascal. Una introducción a la Programación. endY begin ™lrs™rY writeln@'Introduzca una fecha'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 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 valida'A else writeln@'no es una fecha valida'AY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ 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 ™rtY var 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 valores'AY 43 c ITES PARANINFO
  • 44. Programas en Pascal. Una introducción a la Programación. writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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™IY var 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 charY begin ™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@sD'datos4_2.TXT'AY 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 continuar'AY readln endF ¦ ¥ § ¤ 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™IY var sD t X ms™IY begin ™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@sD'datos4_3.TXT'AY 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@sAY 45 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@tD'sal4_3.TXT'AY 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@'Grabado'AY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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 unitmsrIY var 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@sD'datos4_4.txt'AY 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 vacia'AY writelnY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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™IY var 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@sD'datos4_5.txt'AY 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 '0'X numgeros Xa numgeros C IY '1'X 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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var nD i X integerY f—™tori—l X longintY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var 49 c ITES PARANINFO
  • 50. Programas en Pascal. Una introducción a la Programación. nD i X integerY f—™tori—l X longintY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var —D ˜D produ™to X longintY i X longintY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var pD ™D r X longintY q X longintY begin ™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 qAY 51 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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var —D ˜D uD v X wordY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var x X integerY (* indice inferior del intervalo de potencias *) y X integerY (* indice superior del intervalo *) i X integerY function €oten™i—P@n X integerAXlongintY (* PRE: n : Entero = 0 *) (* POST: Potencia2 = 2^n *) var p X longintY j X integerY begin p Xa IY for j Xa I to n do p Xa p B PY (* INV p = 2^j *) €oten™i—P Xa p endY begin ™lrs™rY writelnY writeln@'*****'AY writeln@'***** Algoritmo 4.11. Calculo de las potencias de 2 (version 1) *****'AY 53 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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var x X integerY (* indice inferior *) y X integerY (* indice superior *) poten™i—P X longintY (* resultado *) i X integerY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var 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 XintegerY begin ™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@nAY 55 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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var n X longintY (* dato *) j X integerY begin ™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 primo'A 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 primo'A else writeln @nD ' no es primo'A endY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var n X longintY j X integerY begin ™lrs™rY writelnY writeln@'*****'AY writeln@'***** Algoritmo 4.15. Comprobar si un numero es primo (version 2) *****'AY writeln@'*****'AY writelnY 57 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 primo'A else if @n b QA and @@n mod PA a HA then writeln@nD' es par, no es primo'A 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 primo'A else writeln@nD ' no es primo'AY endY writelnY write@'Pulse enter para continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var nD r™ X longintY (* n dato de entrada, rc parte entera de la raiz *) i X longintY begin ™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 continuar'AY readln endF ¦ ¥ § ¤ 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 ™rtY var nD r™ X longintY (* n dato, rc resultado *) impD iD ™ X longintY begin ™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 @nAY 59 c ITES PARANINFO