P. 1
Buen Manual de Pascal[1]

Buen Manual de Pascal[1]

|Views: 785|Likes:
Publicado porMejia Alejandro

More info:

Published by: Mejia Alejandro on Nov 26, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/23/2013

pdf

text

original

Sections

  • Prefacio
  • Introducción a la programación en Borland Pascal
  • 1.2 Estructura de un programa en pascal
  • 1.3 Palabras reservadas
  • 1.6 Variables y Constantes
  • 1.7 Operadores aritméticos , lógicos y de relación
  • 1.8 Funciones estándar de Pascal
  • 1.9 Tipos de errores
  • 1.10 Convertir expresiones y fórmulas matemáticas en expresiones Pascal
  • 1.12 Ejercicios de autoevaluación
  • 1.13 Respuestas de ejercicios de autoevaluación
  • 2.1 Estructura de control lineal
  • 2.2 Instrucciones de escritura, lectura y asignación
  • 2.3 Solución de problemas lineales
  • 2.4 Estructura de control condicional. Simple, doble y múltiples
  • 2.5 Solución de problemas condicionales
  • 2.6 Generación de números aleatorios
  • 2.7 Estructura de control iterativa. For, While y Repeat
  • 2.8 Solución de problemas iterativos
  • 2.9 Rastreo de programas
  • 2.11 Ejercicios de autoevaluación
  • 2.12 Respuestas de ejercicios de autoevaluación
  • 2.13 Ejercicios propuestos
  • 3.1 Datos estructurados
  • 3.2 Arreglos de una dimensión
  • 3.3 Operaciones con arreglos
  • 3.4 Arreglos de dos dimensiones
  • 3.6 Ejercicios de autoevaluación
  • 3.7 Respuestas de ejercicios de autoevaluación
  • 1.8 Ejercicios propuestos
  • 4.2 Definición de tipos de registros
  • 4.5 Constructor del tipo de dato file
  • 4.6 Operaciones con ficheros
  • 4.8 Ejercicios de autoevaluación
  • 4.9 Respuestas de ejercicios de autoevaluación
  • 5.1 Principios de modularidad. Ventajas
  • 5.2 Procedimientos. Estructura de un procedimiento
  • 5.3 Paso de parámetro por valor y por referencia
  • 5.4 Ejemplos de procedimientos creados por el programador
  • 5.5 Funciones. Estructura de una función
  • 5.6 Ejemplos de funciones creadas por el programador
  • 5.7 Recursividad. Funciones recursivas
  • 5.9 Ejercicios de autoevaluación
  • 5.10 Respuestas de ejercicios de autoevaluación
  • 5.11 Ejercicios propuestos

APRENDA PASCAL

AUTORES:

Prof. Rodiert Zayas Alzamora.

Prof. Reinier Escobar Santiesteban.

“AÑO 49 DE LA REVOLUCIÓN”

Índice Prefacio ............................................................................................................. 1 Capítulo 1 Introducción a la programación en Borland Pascal.......................... 2 Introducción al Borland Pascal........................................................................... 3 Estructura de un programa en pascal................................................................. 3 Palabras reservadas........................................................................................... 4 Identificadores..................................................................................................... 4 Tipos de datos.................................................................................................... 5 Variables y Constantes....................................................................................... 6 Operadores aritméticos , lógicos y de relación................................................... 8 Funciones estándar de Pascal.......................................................................... 11 Tipos de errores................................................................................................ 12 Convertir expresiones y fórmulas matemáticas en expresiones Pascal........... 12 Resumen........................................................................................................... 13 Ejercicios de autoevaluación............................................................................ 15 Respuestas de ejercicios de autoevaluación.................................................... 17 Ejercicios propuestos........................................................................................ 18 Capítulo 2 Estructuras básicas de control....................................................... 22 Estructura de control lineal............................................................................... 23 Instrucciones de escritura, lectura y asignación............................................... 23 Solución de problemas lineales........................................................................ 25 Estructura de control condicional. Simple, doble y múltiples............................ 29 Solución de problemas condicionales............................................................... 33 Generación de números aleatorios................................................................... 37 Estructura de control iterativa. For, While y Repeat…………………………….. 39 Solución de problemas iterativos...................................................................... 43 Rastreo de programas...................................................................................... 46 Resumen........................................................................................................... 48 Ejercicios de autoevaluación............................................................................ 51 Respuestas de ejercicios de autoevaluación.................................................... 53 Ejercicios propuestos........................................................................................ 55 Capítulo 3 Estructuras de datos....................................................................... 60 Datos estructurados.......................................................................................... 61 Arreglos de una dimensión............................................................................... 61 Operaciones con arreglos................................................................................. 63 Arreglos de dos dimensiones........................................................................... 74 Resumen........................................................................................................... 77 Ejercicios de autoevaluación............................................................................ 78 Respuestas de ejercicios de autoevaluación.................................................... 79 Ejercicios propuestos........................................................................................ 80

Capítulo 4 Registros y Ficheros....................................................................... 82 Registros........................................................................................................... 83 Definición de tipos de registros......................................................................... 83 Arreglos de registros......................................................................................... 85 Ficheros............................................................................................................ 87 Constructor del tipo de dato file........................................................................ 87 Operaciones con ficheros................................................................................. 88 Resumen........................................................................................................... 92 Ejercicios de autoevaluación............................................................................ 93 Respuestas de ejercicios de autoevaluación.................................................... 95 Ejercicios propuestos........................................................................................ 96 Capítulo 5 Modularidad.................................................................................... 98 Principios de modularidad. Ventajas................................................................. 99 Procedimientos. Estructura de un procedimiento............................................. 99 Paso de parámetro por valor y por referencia................................................ 102 Ejemplos de procedimientos creados por el programador............................. 104 Funciones. Estructura de una función............................................................ 105 Ejemplos de funciones creadas por el programador...................................... 106 Recursividad. Funciones recursivas............................................................... 109 Resumen......................................................................................................... 111 Ejercicios de autoevaluación.......................................................................... 112 Respuestas de ejercicios de autoevaluación.................................................. 114 Ejercicios propuestos...................................................................................... 116 Bibliografía.................................................................................................... 118

para alumnos con poca o ninguna experiencia en programación. Este libro cuenta con una gran recopilación de ejemplos. les agradeceríamos (los autores) sus correcciones. ya que con este se forman los principios básicos de la programación estructurada. Cualquier error que se encuentren en este texto por mínimo que sea. críticas. utilizando una herramienta tan poderosa el mundo de la programación como es la enseñanza mediante ejemplos. que estuviera al nivel de las exigencias actuales de los Institutos Politécnicos de Informática (IPI). ya que teniendo la lógica del trabajo en un lenguaje no visual como este. pero que también ofreciera un tratamiento riguroso a la teoría “trabajo con algoritmos” que se requiere para programar con mayor eficiencia. ayuda. Espero que les sea de mucha utilidad.Prefacio Este material ha sido creado por la gran necesidad de contar con un libro de texto de programación en Pascal para nivel medio. en especial para los alumnos del primer año. no presentarán ningún problema para cuando lleguen a un lenguaje visual. ejercicios y programas de diversos campos. comentarios y sugerencias para mejorar el producto. Por favor dirija toda su correspondencia a cualquiera de estas direcciones electrónicas: rzayasa@ispij. Cuenta con ilustraciones de algoritmos y programas completos.0. Los autores. o sea. recomendación o crítica será bien recibida.rimed. para motivar al estudiante a resolver problemas relacionados con la vida real. pero en cualquier otro compilador de Pascal se pueden utilizar.cu Cualquier información. 1 .rimed. Todos estos programas y ejemplos aquí presente fueron diseñados para ser ejecutados en Borland Pascal 7. se convirtió en una de las herramientas más utilizadas para la enseñanza de la programación. Pascal desde su creación.cu rescobar@ipiij.

3 Palabras reservadas. lógicos y de relación. 1. lógicos y de relación. 1. 1.11 Resumen. 1. Fray Luis de León Sinopsis 1. 1. • Declarar variables y definir constantes. • Identificar los componentes básicos Pascal. • Familiarizarse con las funciones básicas del lenguaje. 1. Nelson Mandela ◘ Mucha gente persigue lo que posee y está esclavizada por las mismas cosas que desea conseguir. Goethe. 2 .12 Ejercicios de autoevaluación. palabras reservadas. 1. 1. • Conocer los operadores aritméticos. 1.8 Funciones estándar de Pascal. • Convertir expresiones matemáticas en expresiones Pascal.13 Respuestas de ejercicios de autoevaluación. Anwar el Sadat ◘ No hay caminos para la paz. ◘ Después de escalar una montaña muy alta descubrimos que hay muchas otras montañas por escalar.6 Variables y Constantes.Capítulo 1 _____________________________________________________________ Introducción a la programación en Borland Pascal _____________________________________________________________ Objetivos • Familiarizarse con el Borland Pascal y su estructura para programar. identificadores. tales como.9 Tipos de errores.7 Operadores aritméticos . 1. 1.14 Ejercicios propuestos. así como los tipos de datos fundamentales.5 Tipos de datos. 1. Pensamientos ◘ Nada es más valioso que el día de hoy.4 Identificadores. ◘ Estar en paz consigo mismo es el medio más seguro de comenzar a estarlo con los demás. 1. la paz es el camino.2 Estructura de un programa en Pascal. Mahatma Gandhi.10 Convertir expresiones y fórmulas matemáticas en expresiones Pascal.1 Introducción al Pascal.

1.0 (BP7) es estructurado. tanto interpretado como compilado.1” aparece las partes o módulos del Lenguaje de Programación (LP) BP7.0. Todas las instrucciones van escritas entre las reservadas begin y end.1 Partes de un programa en BP7. matemático y filósofo francés del siglo XVII que creó la primera calculadora. La aceptación y el uso de Pascal se incrementó considerablemente en 1984. y se utiliza muy a menudo en medios educativos. una versión avanzada orientada a objetos. un entorno de programación visual. En los últimos años su popularidad ha decrecido. Recuerde que un programa no es más que un conjunto de instrucciones que se le da al ordenador para resolver un problema determinado. lo que significa que cada programa requiere una forma específica de escritura para que sea entendido por el compilador. el conocidísimo Object Pascal.2 Estructura de un programa en pascal. Cabecera Declaraciones Sentencias Figura 1. en vez de las tradicionales herramientas en línea de comandos. disponible en numerosas versiones. se trata de un lenguaje estructurado. entre ellos. Ejemplo: Program Nombre. basado en Turbo Pascal para Windows y que usa las extensiones de Object Pascal. Se trataba de un compilador de Pascal. En la “Figura 1. incluía un entorno de desarrollo IDE. El producto comercial actual más conocido es Borland Delphi. cuando Borland International (actualmente Inprise Corp. Pascal. Declaraciones: Aquí se le indica al compilador todos los indentificadores y unidades que utilizará nuestro programa. Sentencias: Aquí se escriben todo el código de instrucciones que realizará nuestro programa. 1.) introdujo Turbo Pascal. Cabecera: En esta sección de programa solo lleva el nombre del programa.1 Introducción al Pascal. Existen también versiones para desarrollos bajo Linux. aunque sigue comercializándose. diseñado a principios de la década de 1970 por el profesor Niklaus Wirth como un elemento de aprendizaje. De Pascal se derivan diversos lenguajes. Pascal es un lenguaje de programación de alto nivel. El lenguaje utilizado en Borland Pascal 7. En este libro se trabaja bajo la base del Borland Pascal 7. 3 . para sistemas MS-DOS. se denominó así en honor a Blaise Pascal. de alta velocidad y bajo costo. entre otros.

Los "identificadores" son palabras que usaremos para referirnos a una variable. el nombre de una función o de un procedimiento. No puede tener tilde en ningún momento. Puedes ver la relación entre ambas estructuras. 4 . junto con algunos pocos símbolos especiales.2” son propias de cada lenguaje.3 se muestran algunos identificadores válidos y otros no válidos. Deben seguir las siguientes características: • • • • • • No podrán empezar con un número. 1. PROGRAM RECORD REPEAT SET THEN TO TYPE UNTIL VAR XOR WHILE WITH En la Figura 1. Estos nombres o "identificadores" serán combinaciones de letras y/ o números.4 Identificadores. No puede tener espacios intermedios.3 Palabras reservadas. 1. sin Ñ. una constante. AND DO FUNCTION NIL ARRAY DOWNTO GOTO NOT BEGIN ELSE IF OF CASE END IN OR CONST FILE LABEL PACKED DIV FOR MOD PROCEDURE Figura 1. como el guión bajo (_). No pueden ser palabras reservadas del LP. Pseudocódigo Algoritmo Nombre { Cabecera } { Declaraciones } Inicio { Sentencias } Fin Las palabras BEGIN y END representan inicio y fin del programa. esto. No pueden existir dos identificadores con el mismo nombre. Todo LP cuenta con una serie de palabras reservadas que son las que le permite al programador poder comunicarse con el mismo. Estas palabras reservadas “Figura 1. entre otras cosas.2 Palabras reservadas de Pascal.Z.La estructura del programa quedaría de la siguiente forma: Pascal PROGRAM Nombre. etc. al nombre del programa. lleva consigo a establecer una diferencia marcada entre un lenguaje y otro aunque existen palabras que son muy comunes en todos los lenguajes. Puede tener cualquier carácter alfabético A.. { Cabecera } { Declaraciones } BEGIN { Sentencias } END.

lógicos. En programación. estos últimos serán objeto de estudio en el “Capítulo 3 Estructuras de datos”. etc. empleado para Texto String almacenar y representar mensajes de más de una letra (hasta 255). Los datos simples son elementos individuales(números. Pseudocódigo Borland Pascal 5 . no está compuesto de otras estructuras.. el tipo de dato (data type en Inglés) especifica el rango de valores que puede contener una variable o una constante.3 Ejemplo de identificadores válidos (Izquierda) y no válidos (Derecha). y se almacena esa información en la memoria de la computadora. Descripción Número entero comprendido entre Enteros Integer -32768 hasta 32767. Cadena de caracteres.4”. y que por tanto su representación sobre el ordenador es de forma directa.Identificadores válidos: Identificadores no válidos: Programa_1 1_Programa Mi_Programa Mi Programa Suma Sum@ Tarea_2 2 Tarea Area Área Numeros_Primos #_Primos ParImpar Par o Impar Positivo_Negativo Positivo_Negativo. estos deben ser numéricos. Figura 1. Nota: Pascal no diferencia las minúsculas de las mayúsculas.5 Tipos de datos. Los dato de tipo simple. 1. AreaTriangulo ÁreaTriángulo ArregloN Array Figura 1.4 Tipos de datos estándar de Pascal. Real Real Es un número real.) que se asocian a identificadores únicos en correspondencia uno a uno. El Pascal puede adquirir muchos tipos diferentes de datos. Ejemplo los identificadores NUMEROS y numeros son completamente iguales. Entre ellos están los datos simples y los datos estructurados. cadenas de caracteres. etc. que no sean los bits. caracteres. A la hora de guardar los datos en la computadora. Es una variable lógica. Lo que quiere decir que deben ser almacenados con un tipo de dato. Vamos a ver por ahora los datos simples “Figura 1. que puede valer Lógico Boolean TRUE (verdadero) o FALSE (falso).

. Edad: Integer. Para declarar una variable “Figura 1.Aquí se pone el nombre de la variable a declarar.) y nombres más largos (y que expliquen mejor su contenido). o sea. Ejemplo: Se tienen las siguientes situaciones: • Tenemos necesidad de almacenar el nombre y la edad de una persona. 5. Variables: Una variable equivale a la clásica incógnita "x" que todos hemos usado en las matemáticas.Los dos puntos es un separador e indica el tipo de dato que tendrá la variable a declarar. Respuesta: Var Nombre: String. Esto puede parecer incómodo. el nombre de una variable es un indentificador.5 Estructura general para declarar variables.. cadenas de textos. números enteros. 6 . En Pascal tenemos que declarar las variables que vamos a usar. etc. 4. tenemos que emplear la palabra clave var. etc. 2. Ahora nuestras variables podrán tener cualquier valor (no sólo un número: también podremos guardar textos.. Figura 1.Palabra clave para declarar variables.Especifica al ordenador qué tipo de valor va a almacenar la variable(números reales.1. 3. y del tipo de datos que va a almacenar esa variable.6 Variables y Constantes..5”. fichas sobre personas o libros. Además.. luego escribimos el nombre que vamos a dar a la variable. que puede ser cualquier número.).Fin de la declaración. Los nombres de las variables siguen las reglas que ya habíamos mencionado para los identificadores en general. pero en la práctica ayuda a conseguir programas legibles y más fáciles de corregir o ampliar. Una variable es una posición de memoria a la que nosotros asignamos un nombre y en la que podremos almacenar datos que pueden ser modificados a lo largo de todo el programa. evita los errores que puedan surgir al emplear variables incorrectas.. 1.

diciéndole que almacena la suma de las variables B y C.En la línea (A = B + C) se le asigna un nuevo valor a la variable “A”.En las tres primeras líneas A. en B es 28 y en C es 46. B y C comienzan con 5.• Queremos almacenar el valor de las precipitaciones caída de un día. B y C diga qué valor queda almacenado en cada una de ellas: A=5 B=8 C = 10 A=B+C B=A+C C=A+B Respuesta: El valor que queda almacenado en A es 18.En la línea (C = A + B) se le asigna un nuevo valor a la variable “C”. es decir 18 + 28. 7 . quedando almacenado en A el número 18. los valores que quedan almacenados son 18. 8 y 10 respectivamente. . Si deseas declarar varias variables de un mismo tipo puedes separarlas con una coma y luego decir el tipo de dato. Variable3: Integer. el valor que queda almacenado en ella es el último que se le asigna. quedando almacenado en B el número 46. . Variable2. Respuesta: Var UJC: Boolean. diciéndole que almacena la suma de las variables A y B.En la línea (B = A + C) se le asigna un nuevo valor a la variable “B”. B y C. Nota: En una variable. . Ejemplo: Var Variable1. Al no asignarle más ningún valor a las variables A. Respuesta: Var Prec: Integer. es decir 18 + 10. Para entender mejor esto analice el siguiente ejemplo: ♣ Dadas las variables A. quedando almacenado en B el número 28. es decir 8 + 10. 28 y 46 respectivamente. Al que no le dio así que observe el análisis que les muestro a continuación: . diciéndole que almacena la suma de las variables A y C. • Almacenar si un estudiante es de la Unión de Jóvenes Comunista (UJC) o no lo es. En este caso tenemos tres variables que van a almacenar números enteros.

• Definir una constante que almacene el descuento de un trabajador que es de $100 mensuales. Entonces podemos definir que una constante es una posición de memoria a la que nosotros asignamos un nombre y un valor que no puede ser modificado a lo largo de todo el programa. 4.. Respuesta: Const Pi = 3.Palabra reservada para definir constantes. En Pascal hay una manera especial de definir las constantes “Figura 1. Figura 1. En la Figura 1. sino que su valor es constante. Pascal tiene una serie de operadores que les permitirá desarrollar los cálculos necesarios un tu aplicación.El valor que va a tener la constante. Ejemplo: Se tienen las siguientes situaciones: • Se quiere definir una constante que almacene el valor de Π. Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o reales. que es con la palabra reservada const.7 Operadores aritméticos . Respuesta: Const Descuento = 100..10” también juegan un papel fundamental en la elaboración de un programa en Pascal.14.6”. Los operadores relación “Figura 1. 2.Aquí se pone el nombre de la constante a definir. 5.Constantes: Cuando desarrollamos un programa.Operador (=) que indica asignación (Solo en estos casos). 8 . Una constante en programación es similar al valor de la constante Π que todos conocemos. 1.9” al igual que los operadores de lógicos “Figura 1..Representa el fin de la definición de la constante. cuyo valor no cambia en ningún momento. nos podemos encontrar con que hay variables que realmente "no varían" a lo largo de la ejecución del programa.6 Estructura general para definir constantes... Los nombres de las constantes siguen las reglas que ya habíamos mencionado para los identificadores en general. 3.7 aparecen los operadores aritméticos que utiliza Pascal. lógicos y de relación. 1.

Descripción Ejemplo Adición X:= Y + Z Sustracción X:= Y - Z Multiplicación X:= Y * Z División real X:= Y / Z División entera X:= Y div Z Resto de una mod X:= Y mod Z división Figura 1.7 Operadores aritméticos y ejemplo de su utilización.

Operador + * / div

Y 5 5 5 5 5 5

Z 2 2 2 2 2

X 7 3 10 2.5 2

2 1

Puedes observar que en la columna Ejemplo de la Figura 1.7 se utilizó el operador := que es el de asignación. En los primeros tres ejemplo espero que no tengan ningún tipo de duda ya que a la variable X se le asigna un valor, el de la Suma, la Resta y la Multiplicación de las variables Y y Z respectivamente. Los ejemplos 4 y 5 tienen una diferencia significativa y es que en el caso del / es una división real y por lo tanto el valor de la variable X tiene que ser Real, y el div realiza una división entera y con esto me refiero a que al dividir el toma el resultado de la división y elimina los lugares después de la coma, dejando así solo el valor entero del resultado, en este caso X tiene que ser declara como Integer. El operador mod devuelve el resto o residuo de una división de enteros. Analice el ejemplo que se muestra en la Figura 1.7 y observe la explicación en la Figura 1.8.

Figura 1.8 Ejemplo del valor devuelto al usar el operador mod. Operador Descripción = Igual a > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que <> Distinto de Figura 1.9 Operadores de relación en Pascal. Ejemplo del uso de operadores de relación: ♣ Dadas las variables A y B, diga cuando la expresión puede ser evaluada como verdadera y cuando como falsa. Ejemplifique. a) A = B b) A > B c) A < B d) A >= B e) A <= B f) A <> B

9

Repuestas: a) Verdadera si A y B son iguales, ejemplo A = 8 y B = 8. Falsa si A y B son diferentes, ejemplo A = 5 y B = 8. b) Verdadera si A es mayor que B, ejemplo A = 10 y B = 8. Falsa si A es menor o igual que B, ejemplo A = 3 y B = 5. c) Verdadera si A es menor que B, ejemplo A = 10 y B = 18. Falsa si A es mayor o igual que B, ejemplo A = 6 y B = 6. d) Verdadera si A es mayor o igual que B, ejemplo A = 10 y B = 10. Falsa si A es menor que B, ejemplo A = 1 y B = 6. e) Verdadera si A es menor o igual que B, ejemplo A = 10 y B = 10. Falsa si A es mayor que B, ejemplo A = 12 y B = 6. f) Verdadera si A es diferente a B, ejemplo A = 5 y B = 8. Falsa si A igual que B, ejemplo A = 1 y B = 1. En los operadores de relación espero que no halla ninguna duda, así que prestaré toda mi atención en los operadores lógicos. Significado La expresión es verdadera (True) si al menos un operando es verdadero y falsa (False) si todos or o los operando son falsos. La expresión es falsa si al menos un operando es falso y verdadera si todos los operando son and y verdaderos. La expresión es verdadera si solo un operando xor o exclusivo es verdadero y falsa en cualquier otro caso. Este operador se usa como prefijo para negar un not negación operando booleano. Figura 1.10 Operadores lógicos en Pascal. Or: En español significa “o”. Con este operador el valor de la expresión es verdadero si al menos una de las preguntas es verdadera de lo contrario es falsa, o como ya estudiaste en las primeras unidades cuando estamos ante una disyunción Figura 1.11 a. And: En español significa “y”. Con este operador el valor de la expresión es verdadero si todas las proposiciones son verdaderas, de lo contrario es falsa, o como se dice cuando estamos ante una conjunción Figura 1.11 b. Xor: En español significa “o exclusivo”, a diferencia del “or”, este solo es verdadero cuando existe un solo valor verdadero entre varias proposiciones o preguntas lógicas, como quieras llamarlas. Not: En español significa “no” o “negación”, y se utiliza para negar el valor de una expresión Figura 1.11 c. Operador Descripción

10

Figura 1.11 Tablas de la verdad. a)Disyunción. b) Conjunción. c) Negación. Nota: Para evitar ambigüedades en el orden de realización de las operaciones lógicas, los operandos boléanos deben ir encerrados entre paréntesis, aunque en ocasiones no necesariamente los lleve. Ejemplo de uso de los operadores lógicos: ♣ Dadas las variables A y B, diga si la expresión es evaluada como verdadera o como falsa si conocemos que A = -2 y B = 120. Explique. a) (A > 0) or (B > 100) b) (A <= 0) and (B > 100) c) (A = -2) xor (B = 120) d) not(A <> B) Respuestas: a) Verdadera. Porque el segundo operando es verdadero. b) Verdadera. Porque los dos operando son verdaderos. c) Falsa. Porque uno y solo de los operando tiene que ser verdadero. d) Falsa. Porque el valor del operando es verdadero pero el operador not niega su valor y por tanto el valor resultante es falso. 1.8 Funciones estándar de Pascal. Pascal al igual que todo lenguaje de programación cuenta con una serie de funciones que hacen posible un funcionamiento adecuado del mismo sin tener que crear nuevamente conjuntos de códigos para que realicen una determinada tarea. En la Figura 1.12 se muestran algunas de las funciones estándar, las que estudiarás su uso en otros capítulos. Función Efecto abs(x) Calcula el valor absoluto de x chr(x) Determina el carácter representado por x en el código ASCII. cos(x) Calcula el coseno de x en radianes. sen(x) Calcula el seno de x en radianes. odd(x) Determina si x es impar. round(x) Redondea el valor de x al entero más próximo. sqr(x) Calcula el cuadrado de x. sqrt(x) Calcula la raíz cuadrada de x (x>0). trunc(x) Trunca x (suprime la parte decimal). copy Retorna una subcadena de una cadena dada. pos Localiza una determinada cadena dentro de otra. lenght Devuelve el tamaño de una cadena. concat Une las cadenas pasadas como parámetro. Figura 1.12 Funciones estándar de Pascal. 11

Cuando terminas de escribir el código de tu programa este necesita ser compilado para poder visualizar tu creación y así ver si cumple con las expectativas deseadas. en lo cual difiere con un intérprete. Por tanto. Error lógico: Este es error más difícil de divisar de todos. Mientras más horas se le dedique a la programación más habilidades se logran y disminuyen las posibilidades errores sintácticos y de ejecución al igual que los errores lógicos. referencias a variables no declaradas. 1.10 Convertir expresiones y fórmulas matemáticas en expresiones Pascal. presionando la combinación de teclas Ctrl. 12 . Errores de ejecución: Este tipo de error se ocasionan cuando utilizas tipos de datos incompatibles en un argumentos de una función estándar usada. entre otros que ya chocarás con ellos en el transcurso del aprendizaje. según sea apropiado.Existen otras funciones estándar que se mostrarán en su debido tiempo.9 Tipos de errores. una división por 0. etc. Un compilador traduce todo un programa a lenguaje de máquina. Este tema va a estar destinado a la adquisición de habilidades en la traducción de expresiones algebraicas y lógicas en expresiones del lenguaje de programación Pascal. El compilador es un programa que traduce un Lenguaje de Alto Nivel como C o Pascal a un programa de lenguaje de máquina. no se emiten mensajes de error ya que la estructura de programa y la implementación de la escritura está correcta. Esto sin duda. Teniendo la base de estas conversiones les ayudará a disminuir los errores de programación en la ejecución de sus programas. uso de variables cuyo tipo no corresponda con el tipo de dato que se le asigna. + F9. En BP7 la compilación se realiza cuando se ejecuta el mismo. el programa sólo se puede ejecutar después que este proceso se haya completado. favorecerá en gran medida a adelantar en los próximos capítulos cuando se empiece la programación. En estos casos el programador debe hacer un chequeo de su programa sentencia a sentencia y que cada una de estas se correspondan con el algoritmo diseñado. uso incorrecto de los puntos y comas. Errores sintácticos o gramaticales: Varios de los errores más usuales que surgen de la compilación suelen ser variables o constantes incorrectamente declaradas. 1. pero no ofrece el resultado esperado. y simultáneamente verifica la sintaxis y muestra mensajes de error o de advertencia. intentar cambiar el valor a una constante. que traduce una línea a la vez e inmediatamente la ejecuta. ya que al compilarse el programa.

Representa las siguientes expresiones en una expresión Pascal: • Suma de tres números diferentes. • y=a+b z–x R/: y:= (a + b) / (z . Antecesor:= Num – 1. • Sucesor y antecesor de un número. R/: Sucesor:= Num + 1. • Una persona del sexo masculino y de edad menor que 25. R/: Area:= A * B / 2. De Pascal derivan diversos lenguajes de programación como Ada y Object Pascal. Pascal fue diseñado para enseñar programación estructurada en contextos académicos. demostrablemente correctos y fáciles de modificar. R/: (Sexo = ‘M’) and (Edad < 25). R/: (Num > 0) or (Num mod 2 = 0). La programación estructurada es un método disciplinado de escribir programas que resulten claros. • Promedio de cuatro notas de un alumno. 1. R/: Prom:= (Nota1 + Nota2 + Nota3 + Nota4) / 4. 13 . ó C:= Num * Num + 5. R/: Suma:= N1 + N2 + N3.11 Resumen. R/: C:= Sqr(Num) + 5.x). • x= 3y + 5 R/: x:= 3 * y + 5. Declaraciones y Sentencias. Un programa en Pascal está dividido en tres partes o zonas: Cabecera. • Número positivo o que sea par.Aquí aparecerán una serie de ejemplos de conversión de expresiones matemáticas en expresiones Pascal. • Cuadrado de un número aumentado en 5. • Área del triángulo.

. empleado para almacenar y representar mensajes de Texto String más de una letra (hasta 255). Operador Descripción = Igual a > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que <> Distinto de Pseudocódigo Borland Pascal 14 . En una variable. Puede tener cualquier carácter alfabético A. Es una variable lógica.Z. que puede valer Lógico Boolean TRUE (verdadero) o FALSE (falso). Deben seguir las siguientes características: No podrán empezar con un número. Operador Descripción + Adición Sustracción * Multiplicación / División real div División entera mod Resto de una división El operador de asignación que utiliza Pascal es :=. Operadores de relación en Pascal.4 Tipos de datos estándar de Pascal. Descripción Número entero comprendido entre Enteros Integer -32768 hasta 32767. Cadena de caracteres. El tipo de dato (data type en Inglés) especifica el rango de valores que puede contener una variable o una constante.Los identificadores son combinaciones de letras y/ o números. sin Ñ ni acentos. y se almacena esa información en la memoria de la computadora. No pueden ser palabras reservas del LP. Figura 1. junto con algunos pocos símbolos especiales. No puede tener espacios intermedios. Real Real Es un número real. el valor que queda finalmente almacenado en ella es el último valor que se le asigna. No puede tener acentuación. Operadores aritméticos. No pueden existir dos identificadores con el mismo nombre. Una constante es una posición de memoria a la que nosotros asignamos un nombre y un valor que no puede ser modificado a lo largo de todo el programa. Una variable es una posición de memoria a la que nosotros asignamos un nombre y en la que podremos almacenar datos que pueden ser modificados a lo largo de todo el programa.

. diseñado a principios de la década de 1970 por el profesor ____________. Errores de ejecución. e) _____ Pueden existir dos identificadores con el mismo nombre.2 Coloque verdadero o falso en cada una de las siguientes proposiciones en correspondencia con las características que debe seguir un identificador: a) _____ Podrán empezar con un número. b) _____ Pueden tener espacios intermedios. matemático y filósofo francés del siglo XVII que creó la primera calculadora. Por tanto.12 Ejercicios de autoevaluación. f) _____ Puede tener cualquier carácter alfabético A. c) _____ Pueden tener tilde en algunos momentos. el programa sólo se puede ejecutar después que este proceso se haya completado. como quieras llamarlas. 15 . c) Las partes de un programa en BP7 son ____________. sin Ñ.1 Llene los espacios en blanco de cada una de los siguientes incisos: a) Pascal es un ____________________ de alto nivel. Xor: En español significa “o exclusivo”. El resultado final de una compilación es un ejecutable. __________ y ____________. este solo es verdadero cuando existe un solo valor verdadero entre varias proposiciones o preguntas lógicas. el cual convierte el código fuente de un programa de alto nivel (línea por línea) en enunciados del lenguaje de máquina. Con este operador el valor de la expresión es verdadero (True) si al menos una de las proposiciones es verdadera de lo contrario se evalúa como falsa (False). b) Se denominó Pascal en honor a _____________. los operandos boléanos deben ir encerrados entre paréntesis. Los tipos de errores son: Errores sintácticos o gramaticales. un intérprete traduce y ejecuta cada línea a la vez. de lo contrario es falsa. Para evitar ambigüedades en el orden de realización de las operaciones lógicas.Z. y se utiliza para negar el valor de una expresión. Un compilador traduce todo un programa a lenguaje de máquina. 1. a diferencia del “or”. Con este operador el valor de la expresión es verdadero si todas las proposiciones son verdaderas. 1. según sea apropiado. 1. Errores lógicos. d) _____ No pueden ser palabras reservadas del LP. Not: En español significa “no” o “negación”. Un intérprete es un traductor incluido en un lenguaje de programación.• • • Or: En español significa “o”. y simultáneamente verifica la sintaxis y muestra mensajes de error o de advertencia. And: En español significa “y”. La diferencia de un compilador y un intérprete radica en que compilador debe traducir el programa completo antes de que pueda comenzar la ejecución.

4 Son completamente iguales los identificadores “EJERCICIOS” y “ejercicios”. 16 .1.5 Los tipos de datos se clasifican en _______ y _____________.9 En BP7 la compilación se realiza cuando se ejecuta el mismo. Para los no válidos (si es que existe alguno)explique por qué no puede serlo: a) Programa_1 b) Begin c) @rea d) 1_Programa e) triángulo f) MOD g) CUADRADO 1. 1. a) b) 1.8 Linealice las siguientes expresiones matemáticas en expresiones Pascal. 1. 1.7 Dadas las variables A.6 Para declarar variables se utiliza la palabra reservada _______ y para definir una constante _______. presionando la combinación de teclas _____________.3 Diga cuáles de los identificadores siguientes pueden son válidos y cuáles no. C y D diga qué valor queda almacenado en cada una de ellas al finalizar estas líneas: A=2 B = Sqr(A) C = 10 A=B+C B = A div 2 C=A+B D=A 1. B.

3. No se pueden tildar en ningún momento. 1.5 Simples. En ningún momento pueden tener tilde. 1. una división por 0. entre otros. 1. B = 7..10 3. 1. C = 21 y D = 14. 1.3 a) Válido. Mod es una palabra reservada de Pascal. c) No válido. 1. Falso.Error sintáctico o gramatical. Falso.Error de ejecución. Falso.6 Var.1 a) Lenguaje de Programación.c)) / (a / (b + c)). No puede comenzar con número. cuando se intenta cambiar el valor a una constante. ?.4 Si. + F9. ¿. Estructurados. f) No válido. No se puede utilizar símbolos como @. Verdadero.2 a) b) c) d) e) f) 1. 1.8 a) x:= (a + b + c) / (a + b / c). d) No válido. b) x:= a + b + c / d + (a / (b . ____ Cuando se hace referencias a variables no declaradas. Nunca puede un identificador comenzar con número. 2. Falso. ____ Error más difícil de distinguir de todos. $.13 Respuestas de ejercicios de autoevaluación. c) Cabecera. Begin es una palabra reservada de Pascal. b) Blaise Pascal. 1. 2. !. e) No válido. Const.Error lógico. No se puede dejar espacios intermedios.1. 17 . La compilación del programa no emite ningún mensaje de error pero no ofrece el resultado esperado.10 Enlace la columna A con la B según corresponda: Columna A Columna B ____ Error que se produce cuando utilizas tipos de datos incompatibles 1.7 A = 14. No pueden existir dos identificadores con nombres iguales. Verdadero. 1. b) No válido. 1.. en un argumentos de una función determinada.9 Ctrl. Declaraciones y Sentencias. Variables o constantes incorrectamente declaradas. Niklaus Wirth. etc.. 1. g) Válido. uso incorrecto de los puntos y comas.

1. c) Para almacenar un número real. 1.12 Diga cuáles de los identificadores siguientes son válidos y cuáles no. b) Almacenar el nombre.1. b y c? d) a 8 c) a 8 b 2 b 7 c 18 c 5 d 18 d 8 a a+b a a+b–c+d b a-b b a+b–c+d c a*b c a+b–c+d d a mod b d a+b–c+d a a-b a a+b–c+d b Sqr(a) + b b a+b–c+d c a-b c a+b–c+d d a + Sqr(b) d a+b–c+d ¿Qué valores quedan almacenados en las ¿Qué valores quedan almacenados en las variables a. y si un trabajador es del PCC o no.16 Definas las siguientes constantes: a) Representa el valor de . b) Diez es el valor máximo de una lista. g) Variable que determina si un número es par o no. la edad y el sexo de una persona. b y c? a=b/2 b = b div 2 c=c/2 ¿Qué valores quedan en las variables a.13 A partir de la definición de variable cite ejemplos donde tengas que hacer uso de las mismas. a) a = 10 b) a = 1 b = 20 b=2 c = 10 c=3 a = a + 15 a=a+2 b = b + 12 b=a+2+b c=a*c c=a+2+c ¿Qué valores quedan en las variables a.16 Ejercicios propuestos. 1. e) Variable que determina si un estudiante pertenece a la UJC o no. 1. c y d? variables a.15 Declare las variables que serán necesarias para resolver las siguientes situaciones: a) Para almacenar el nombre de una persona. Para los no válidos (si es que existe alguno) proponga un válido sin que pierda su significado: Área IMAGENES Suma_$ Calle Martí Calculo Diccionario Triangulos= VALIDARDATOS EntrarNotas A_TrianG ProyectoSOFT Contar C A Array Juego 1. f) Promediar las estaturas de dos estudiantes.17 Los siguientes incisos deberán resolverse utilizando las reglas de la aritmética.11 Elabore la estructura de un programa con nombre Calculadora. 1. c) Constante que muestre “El resultado final es: ”. b c y d? 18 . d) Para almacenar la suma de dos números enteros. b. 1.14 A partir de la definición de constante cite ejemplos donde tengas que hacer uso de estas para ganar en eficiencia y claridad en tu prorama.

c) A:= 100 – 60 / (25 + 5) * 40.19 Complete la siguiente tabla: Operadores Aritméticos Operador Descripción Adición Multiplicación / div Resto de una división 1. En cada uno de los siguientes incisos escribir el orden en que el computador realizaría las operaciones.1. a) A:= 12 + 40 div 2.22 Diga qué valor queda en A después de leer las siguientes expresiones por separadas.23 Complete la tabla siguiente: Operadores de Relación Operador Descripción Igual a > Menor que Mayor o igual que <= Distinto de 19 . A) D) B) E) C) F) 1.18 Linealice las siguientes expresiones (no se olvide que linealizar significa escribir una expresión algebraica en una sola línea). b) A:= 10 mod 2.20 Diga el orden de precedencia de los operadores aritmético. 1. 1.21 ¿Cuál es el operador de asignación que utiliza Pascal? 1.

10) Tipo de dato que almacena una cadena de caracteres. y simultáneamente verifica la sintaxis. 14) (Horizontal) Función que haya el cuadrado de un número. 21) Función que devuelve el tamaño de una cadena.25 a) b) c) d) e) f) g) Escriba en una expresión pascal las siguientes expresiones: Un número menor o igual a otro número. Representar un número impar. 2) Palabra reservada para definir una constante. 22) Operador aritmético utilizado para dividir número enteros y devuelve un entero. 13) Traductor incluido en un lenguaje de programación. (Vertical) Función que haya la raíz cuadrada de un número. 11) Tipo de dato que almacena números enteros. etc. Representar un número par. 23) Se utiliza para referirnos a una variable. 12) Función que determina si un número es impar. 16) Programa que traduce todo un programa a lenguaje de máquina. el cual convierte el código fuente en enunciados del lenguaje de máquina.1.24 Complete el siguiente crucigrama: 1) Operador lógico que la expresión es verdadera cuando todas las proposiciones son verdaderas. 20) Tipo de dato para almacenar valores verdaderos o falsos. 18) (Horizontal) Palabra reservada para declarar variables. 1. Representar un número negativo. Representar un número positivo. Sinónimo de software. el nombre de una función o de un procedimiento. 4) Operador lógico que expresa negación. 19) Función que devuelve una subcadena de una cadena dada. 6) Operador aritmético que devuelve el resto de una división. al nombre del programa. 15) Identificador al que le asignamos un valor que no puede ser modificado a lo largo de todo el programa. 7) Palabra reservada para indicar el fin de un bloque. 5) Función que redondea el valor de x al entero más próximo. (Vertical) Identificador al que le asignamos un valor que puede ser modificado a lo largo de todo el programa. 9) Operador lógico que es verdadero cuando existe un solo valor verdadero entre varias expresiones. una constante. 17) Secuencia de instrucciones que puede ejecutar una computadora. Un texto cualquiera es igual al texto “FIDEL”. Número de carné de identidad distinto de otro. 8) Función que localiza una determinada cadena dentro de otra. 20 . 3) Palabra reservada para indicar el inicio de un bloque.

Número comprendido entre 100 y 200. Un número N mayor que el sucesor de un número K o menor que el sucesor del propio número K.1. Respuesta del crucigrama 21 . Un texto distinto de “NO” e igual a “SI”.26 a) b) c) d) Escriba en una expresión pascal las siguientes expresiones: Un número mayor que 10 y menor o igual que 50. e) Un número distinto de 0 y que sea menor o igual que 5.

3 Solución de problemas lineales. • Rastrear programas.8 Rastreo de programas. queridos.9 Resumen. ◘ La meta en si no es lo importante. While y Repeat.12 Ejercicios propuestos.5 Solución de problemas condicionales. 2.4 Estructura de control condicional. Charles Dickens. 2. 2. While y Repeat. • Utilizar instrucciones simples de entrada. Simple. 2.6 Estructura de control iterativa. doble y múltiples. Malcom Forbes. 2. For. ◘ La sabiduría es esa cualidad que nos refrena de meternos en situaciones donde es necesario actuar con sabiduría. La forma como se hace el viaje es lo que le da sentido a la vida. Doug Larson. lectura y asignación. • Codificar enunciados donde se utilice los diferentes tipos de toma de decisiones.Capítulo 2 _____________________________________________________________ Estructuras básicas de control _____________________________________________________________ Objetivos • Escribir programas simples de computación en Pascal. 2. y habréis conquistado la naturaleza humana. salida y asignación.11 Respuestas de ejercicios de autoevaluación. ◘ Muchísimas personas sobrestiman lo que no son y subestiman lo que son. 2.1 Estructura de control lineal. 2. Lord Byron. Pensamientos ◘ Dominad vuestros apetitos. 2.10 Ejercicios de autoevaluación. 22 .6 Generación de números aleatorios.2 Instrucciones de escritura. ◘ El mejor profeta del futuro es el pasado. Sinopsis 2. • Generar números aleatorios. • Utilizar las estructuras iterativas For. 2. 2. 2. María Esther Erosa.7 Solución de problemas iterativos.

Se imprime en pantalla suponiendo que NOTA sea igual a 100: Mi nota en la prueba de LTP fue: 100 La instrucción WRITELN es muy parecida a WRITE. Instrucciones de escrituras (WRITE y WRITELN): La instrucción WRITE realiza una impresión de datos en la pantalla. la estructura de un programa general. cómo se operan estos y cómo se imprimen los resultados. los tipos de datos. Es de gran importancia el conocimiento de cómo trabaja esta estructura ya que las demás estructuras también trabajan con esta. NOTA).2. Condicional y Cíclica). entre otros aspectos de vital importancia en el mundo de la programación.2 Instrucciones de escritura. En este sección estudiarás en que consiste la estructura de control lineal y en la siguiente sección a cómo utilizarlas. Para la creación de un programa es necesario conocer cómo se introducen los datos. WRITE( ‘Mi nota en la prueba de LTP fue: ’ . . Las cadenas de caracteres deben ir encerradas entre apóstrofo (‘’).Instrucciones de lectura. En el capítulo anterior se dieron a conocer los elementos esenciales en Pascal como son: los identificadores.’). Estos datos (que son datos de salida) pueden ser cadenas de caracteres. la forma de escribir las expresiones. . .Instrucciones de asignación. números o variables. . Esto hace que la próxima instrucción que ejecute lo haga en la línea siguiente ya sea de escritura o de lectura. La estructura de control lineal está compuesta solamente por: . la diferencia es que escribe un indicador de fin de línea después del último dato.1 Estructura de control lineal. Confeccionaremos programas sencillos en el lenguaje de programación BP7 y se mostrarán algunas aplicaciones de ejemplos que les servirán para profundizar en cuanto a la estética del programa a elaborar. 23 .Instrucciones de escritura. Cuando se desea imprimir datos que son más de uno deben ir separados por comas.Se imprime en pantalla: Hola Mundo. lectura y asignación. En esta sección se abordarán las de instrucciones de escritura. 2. Ejemplo del uso de WRITE: WRITE( ‘Hola Mundo. Pero también conocemos de estudios anteriores que existen diferentes estructuras de control (Lineal. lectura y asignación. La filosofía de trabajo de esta es igual a la anterior y con la práctica vas a entender cuando es más factible utilizar una cuando otra.

BegIn BEGIN Writeln('Linea 1. El :2 representa la cantidad de lugares decimales después del punto. Figura 2. Ejemplo: Write( ‘El promedio de las notas del grupo es de: ’. En figura 2. Figura 2. END. Ejemplo: read (variable).’). Write('Linea 1. Write('Linea 2. PROGRAM Uso_Writeln. Las variables de tipo booleanas no pueden incluirse en la lista de variables de entrada. Si es más de un variable de entrada. Readln. Ejemplo de una sentencia read: read( a. simula una entrada de datos. END.En ocasiones deseamos mostrar un número real de la manera que solo aparezcan dos lugares después de la coma.'). Primer programa Nuestro primer programa es conocido Hola Mundo. estas van separadas por comas.'). El :5 representa el ancho de separación entre el texto y la variable. Readln. END. PROM:5:2). recuerde que puedes ver el resultado de lo escrito compilando en programa presionando Ctrl. Writeln('Linea 2. Para ganar en organización siempre que vallas a realizar un programa cree una carpeta con el nombre del programa que vas a elaborar con el objetivo de guardar en esta nuestro programa. Aquí se muestra el texto. después de la coma la variable. b. En la figura puedes apreciar cómo queda elaborado nuestro primer programa.2 se muestran dos ejemplos de programas para que puedas observar la diferencia que existe entre “Write” y “Writeln”. Figura 2.89367929.').'). En el programa aparece la instrucción Readln que se utiliza para que realice una espera. Este programa consiste en mostrar en pantalla el texto Hola Mundo. Para esto analice el siguiente ejemplo. 24 . PROGRAM Hola_Mundo. Esto solo es posible si la variable es real.1.c). Fin Readln.1 Programa y Algoritmo Hola Mundo. donde PROM es una variable real que almacena el valor 4.” Write(‘Hola Mundo. + F9. Algoritmo Hola Mundo Inicio BEGIN Mostrar “Hola Mundo. Instrucciones de lectura (READ y READLN): La instrucción read lee un dato de entrada y luego se lo asigna a una variable.2 Diferencia entre Write y Writeln. PROGRAM Uso_Write.

Mens. Var Nombre: Texto. le pide al usuario que entre dos nombre y muestra un mensaje donde concatena cadenas.N2). Nom2: String.3 Programa y algoritmo Bienvenido. Var Nom1. Mostrar Nom1. se usa para leer los datos de entrada y luego asignarlos a variables. Nom2: Texto. Leer N1. Algoritmo Bienvenido PROGRAM Bienvenido. La instrucción Readln es parecida a la read.3 Solución de problemas lineales.Esta sentencia hace que se lean 3 datos de entrada y sean asignados a las variables a. Fin Readln. Leer Nombre Readln(Nombre). Inicio BEGIN Mostrar “Entre un nombre: ” Write(‘Entre un nombre: ‘). Var Nombre: String. END. La diferencia está en que la instrucción Readln comienza leyendo los datos en una línea después. N2 Readln(N1. Inicio BEGIN Mostrar “Entre dos números: ” Write(‘Entre dos números: ’). S Writeln(‘La suma es: ’. En la Figura 2. Nom2 Writeln(Nom. Writeln(‘Bienvenido a Pascal ’. N2. Const Mens =” estudia con ”.3 aparece un ejemplo de programa y su algoritmo que solicita al usuario su nombre y luego le da la bienvenida a Pascal.Nom2). Leer Nom2 Readln(Nom2). Inicio BEGIN Mostrar “Introduzca su nombre: ” Write(‘Introduzca su nombre: ’).Mens. Leer Nom1 Readln(Nom1).Nombre).S: Integer. Figura 2. S: Entero. Algoritmo Concatenar PROGRAM Concatenar. Var N1. Mostrar “La suma es: ”. 25 . S). Solución 1: Algoritmo Suma PROGRAM Suma.4). Fin Readln. c respectivamente. b. En el programa siguiente (Figura 2. Const Mens = ‘ estudia con ’. Mostrar ”Bienvenido a Pascal “. Figura 2. END. END.4 Programa y algoritmo Concatenar.Nombre Fin Readln.N2. Con el tiempo verás cuando utilizas Read y cuando Readln. En este epígrafe se mostrarán problemas resueltos mediante algoritmos y su paso al BP7. Var Nom1. 1) Confeccione un programa que pida al usuario dos números y muestre su suma. Mostrar “Entre otro nombre: ” Write(‘Entre otro nombre: ‘). Var N1. También se mostrarán en algunas soluciones aspectos nuevos que te servirán para hacer un programa más eficiente. S := N1 + N2 S:= N1 + N2. 2.

La instrucción CLRSCR se utiliza para borrar la pantalla completa y sitúa el cursor en la esquina superior izquierda. Leer N1.D : Integer. Nota: Recuerde colocar un ponto y coma al final de cada línea. esto reduce el código y no se necesita declarar ninguna variable para almacenar esta suma. Var A. N1 + N2 Writeln(‘La suma es: ’. Las Llave “{” y “}” le indica al compilador que está en presencia de un comentario. { Limpia la pantalla } Write(‘Entre cuatro números: ’). Sqr(B)). { Almacena cuatro números } Writeln(‘Suma del primero y el último: ’. esto se utiliza para ganar en claridad en cuanto al significado de cada línea de código.N2). la línea Uses CRT. pueden ser utilizados por el programa principal sin necesidad de reescribir el código que contienen. {Raíz cuadrada de C} Readln. Todo el texto que se escriba entre llaves no será interpretado por el compilador. aunque no son ejecutables por si mismos. Uses CRT. C.B. Fin Readln. De ahora en adelante siempre la usaremos para ganar en estética. declara y habilita para su uso a la unidad CRT.N2: Integer. Para la utilización de estos "subprogramas" es necesaria su declaración. {Muestro el cuadrado de B } Writeln(‘Raíz cuadrada del tercero: ’. el cuadrado del segundo y la raíz cuadrada del tercero.Otra forma de resolver este problema: Algoritmo Suma PROGRAM Suma. Mostrar “La suma es: ”. END. 2) Confeccione un programa que pida al usuario cuatro números y este muestre la suma del primero con el último. BEGIN CLRSCR. Sqrt(C)).{Muestro la suma de A y D} Writeln(‘Cuadrado de segundo: ’. Solución PROGRAM Numero. Var N1. N1 + N2). N2: Entero. Primero. B. { Simula la entrada de datos } END. En este programa aparecen aspectos que nunca han visto. Readln(A. siempre que se valla a utilizar esta instrucción debe ser declarada primeramente la unidad CRT. Inicio BEGIN Mostrar “Entre dos números: ” Write(‘Entre dos números: ’).C. N2 Readln(N1. D). La palabra reservada USES cumple el propósito de declarar las unidades. Explicación: En la primera solución se almacena la suma de los números N1 y N2 en la variable S para posteriormente mostrarla. A + D). Las unidades son módulos independientes del programa que. 26 . En la segunda solución la suma de N1 y N2 se realiza en el momento en que se muestra. Nota: El algoritmo de este se los dejo a ustedes. Var N1.

BEGIN ClrScr.’). Inicio Leer radio.3) Escribir un programa en Pascal que calcule el área de un rectángulo.14 por lo tanto solo necesitamos el valor del radio para resolver este problema. Lado2. USES CRT. Solución: Para calcular la longitud de la circunferencia tenemos que: longitud de la circunferencia = 2 * PI * radio Para calcular el área de la circunferencia tenemos que: área de la circunferencia = PI * radio2 Sabemos que PI es una constante de valor 3. area:=lado1* lado2. { Limpiamos la pantalla } {Este programa nos va a servir para calcular el área de un rectángulo} {Entran los valores necesarios} Writeln(‘Para calcular el Área de un Rectángulo.area: INTEGER.lado2. area: Real. {Calculamos el área} Writeln(‘El área de este rectángulo es: ’.14. Write(‘Entre el valor del lado1: ’). Readln(lado1). Algoritmo Área y Longitud de una Circunferencia Var radio. {Lo mostramos en pantalla} Readln. longitud. area). END. Solución: Para calcular el área de un rectángulo tenemos que conocer su fórmula: Área del rectángulo = lado1 * lado2 Algoritmo Área del rectángulo Var Lado1. 4) Escribir un programa que calcule la longitud y el área de una circunferencia. Area = 2* PI * radio Longitud = PI * radio * radio Mostrar Area. Readln(lado2). Write(‘Entre el valor del lado2: ’). VAR lado1. Inicio Leer Lado1.Lado2 Area = Lado1 * Lado2 Mostrar Area Fin PROGRAM Area_Rectangulo. longitud Fin 27 . Area : Enteros. Const PI = 3.

USES CRT.longitud. END. area:=PI*SQR(radio). minutos. n: INTEGER. 28 .’). Writeln ('ÁREA DE LA CIRCUNFERENCIA: '. Const PI = 3.} Writeln(‘Para calcular el número de horas. minutos y segundos que hay en N segundos. longitud:5:2).' segundos.'). . minutos y segundos que hay en N segundos.’).' minutos y ’. area:5:2).14. segundos:= (n mod 3600) – minutos * 60. 5) Escribir un programa en Pascal que calcule el número de horas. USES CRT. segundos. WRITE (horas.minutos. {Se muestran los resultados} Writeln ('LONGITUD DE LA CIRCUNFERENCIA: '. minutos:= (n mod 3600) div 60.area:REAL.n. Write(‘Entre la cantidad de segundos: ’). PROGRAM Hora_Minutos. Var horas.1 hora tiene 3600 segundos.’ segundos hay: '). minutos y segundos. por lo tanto. BEGIN ClrScr. BEGIN ClrScr. si dividimos la cantidad de segundos entre 60 tendremos la cantidad de minutos. Write(‘Entre el valor del radio: ’).PROGRAM Area_y_Long_Circunf.1 minuto tiene 60 segundo. por lo tanto. { Limpiamos la pantalla } {Calcula el número de horas. VAR radio. Nota: El algoritmo se los dejo para que lo realicen. END. { Limpiamos la pantalla } {Este programa nos calcula el área y la longitud de una circunferencia} {Entra el valor necesario} Writeln(‘Para calcular el área y la longitud de una circunferencia. Readln(radio). si dividimos la cantidad de segundos entre 3600 tendremos la cantidad de horas. WRITELN ('En ‘. Readln. Readln(n).' hora con '. horas:= n div 3600. Readln.segundos. longitud:=2*PI*radio. Solución: .

Aquí se lee un número y a continuación se pregunta si es mayor que cero. que expresa bastante bien lo que podemos hacer con ella.6 Estructura de condicional simple compuesta por varias órdenes verdaderas...2. En diversas ocasiones tenemos que comparar datos para poder controlar nuestro programa. AcciónN Acción2. se deben escribir entre las palabras reservadas begin y end. esto se resuelve mediante las estructuras de control condicional. Su Cuadrado es: 64 . Pascal Pseudocódigo Si Condición Entonces If Condición Then Acción1 begin Acción2 Acción1. Esto se debe a que las "sentencias u órdenes" pueden ser simples o una compuestas. La primera construcción que trataremos es la estructura selectiva simple (Figura 2... 5). Simple. Dobles y Múltiples). Después de la palabra Then no se pone punto y coma. Pascal If Condición Then Acción verdadera.6).7.Programa Terminado. Pero en caso que se entre un 0 el programa imprime en pantalla: . En caso de que se deseen poner más de una orden después del Then.. si se cumple lo que se pregunta.. 29 . ya que la expresión continúa y este se coloca al final de la expresión. Ahora pruebe usted con un número negativo y responda qué resultado imprime en pantalla y por qué. En este tema vamos a ver cómo podemos evaluar condiciones desde Pascal.4 Estructura de control condicional. Condicional Simple: Existen tres tipos (Simples. doble y múltiples. Ejemplo: Observe el programa de la figura 2.5 Estructura de condicional simple.. En caso que se entre un 8 el programa imprime en la pantalla: El 8 es positivo.Programa Terminado. Pseudocódigo Si Condición Entonces Acción verdadera Fin_Si Figura 2. o sea.(Figura 2. end.. La orden que está después del Then se ejecutará si y solo si la condición planteada entre el If y el Then es “Verdadera”. Fin_Si AcciónN. Las sentencias compuestas se forman agrupando varias simples entre begin y end. Figura 2.

end.9..7 Ejemplo del uso de la estructura condicional simple. End.’) Readln. La estructura selectiva simple es muy fácil de usar y muy común pero en ocasiones tenemos necesidad de decirle al programa para si no se cumple una condición que nos realice una determinada tarea y si se cumple nos haga otra.Program Positivo.. Aquí se lee un número y a continuación se pregunta si es mayor que cero... Acción_Falsa 1 end Acción_Falsa 2 Else Acción_Falsa N begin Fin_Si Acción_Falsa 1. pero se vuelve un programa muy largo.num.8). Ejemplo: Observe el programa de la figura 2. más complejo y a la vez mucho menos eficiente. Acción_Falsa N.’). Con la simple es posible hacerlo.8 Estructura condicional doble..Programa Terminado. writeln(‘. Var num: Integer.sqr(num)). end. if num>0 then begin writeln(‘El ‘. Acción_Falsa 2..’ es positivo. writeln(‘Su Cuadrado es: ’. Acción_Verd N Acción_Verd 2. podemos ver que si se cumple la condición se ejecutan un grupo acciones y si no las otro grupo.. En caso que se entre un 5 la expresión se evalúa como TRUE y el programa imprime en la pantalla: El 5 es positivo. Pascal Pseudocódigo Si Condición Entonces If Condición Then Acción_Verd 1 begin Acción_Verd 2 Acción_Verd 1. Figura 2.. Begin readln(num). Sino Acción_Verd N. Figura 2. En esta tipo de estructura si la condición planteada no es verdadera no se ejecuta la o las acciones verdaderas y el programa continúa con las demás acciones. Condicional Doble: En la construcción de una estructura condicional doble (Figura 2. Su Cuadrado es: 25 . 30 .Programa Terminado.

Programa Terminado.’) Readln. writeln(‘Su Cuadrado es: ’.. end.num. Por ejemplo el programa de la figura 2.. Figura 2.. Su Inverso es: 9 . Ahora pruebe usted con el número cero y responda qué resultado imprime en pantalla y diga si este programa es completamente correcto....10 imprime “Excelente” para cuando la nota de un estudiante dado es 5.12.9 Ejemplo del uso de la estructura condicional doble. “Suspenso” para cuando sea 2 y “Fuera de Rango” para cualquier valor que sea distinto a esto valores mencionados. como aparece en la figura 2. else) dentro de las estructuras (If . Si se desea dar más de una orden para un valor verdadero. debe ir encerrado entre begin y end. Aquí se puede observar un programa más simple que el anterior. Para estos casos.10 lo que se hace utilizando esta nueva estructura..’ es positivo’). writeln(‘Su Inverso es: ’..11 aparece un ejemplo que resuelve el mismo problema de la figura 2.. of): Hay otro tipo de estructura múltiple llamada Case . En la figura 2. Then . en BP7 al igual que mochos LP. else).. “Bien” para cuando sea 3.. Condicional Múltiple: En determinados momentos una sola condición no permite al programador satisfacer sus necesidades. Fíjense que en el programa no se coloca el punto y coma hasta que se termina la expresión.En caso que se entre un -9 la expresión se evalúa como FALSE y el programa imprime en pantalla: El -9 es negativo. writeln(‘. 31 . of. es posible anidar las estructuras condicionales. “Muy Bien” para cuando sea 4.Programa Terminado.num*(-1)).. Estructura (Case . Begin readln(num).num. Var num: Integer... pero tenga en cuenta que esta estructura se debe utilizar solo en caso necesarios ya que trabaja solo con valores enteros o lógicos... Program Positivo_Negativo. colocando estructuras (If .then .. if num>0 then begin writeln(‘El ‘. End. end else begin writeln(‘El ‘..sqr(num))..’ es negativo’).

’). end. en este caso cuando A sea igual 3.Pascal Pseudocódigo Algoritmo Calificación 1 Program Calificación_1. AcciónN.” 3: Writeln(‘Bien’).. Var Nota: Entero. Inicio Var Nota: Integer. Sino 2: Writeln(‘Suspenso. End.” If Nota = 5 Then Sino Nota = 4 Entonces Writeln(‘Excelente.. 2: Mostrar “Suspenso.ELSE.12 Estructura Case que ejecuta varias órdenes si la condición se evalúa como verdadera.’).” 4: Writeln(‘Muy Bien. Leer Nota Begin Caso Nota Readln(Nota).’).11 Ejemplo del uso de la estructura condicional múltiple utilizando Case .. 32 .” 5: Writeln(‘Excelente.’).” Case Nota of 4: Mostrar “Muy Bien. 5: Mostrar “Excelente. Uses CRT. Fin end.’) Mostrar “Bien.” Else Fin_Si Writeln(‘Fuera de Rango..” Else if Nota = 4 Then Sino Nota = 3 Entonces Writeln(‘Muy Bien. Acción2.” Else if Nota = 2 Then Sino Writeln(‘Suspenso. Mostrar “Excelente. Var Nota: Entero. Inicio Var Nota: Integer.” Else if Nota = 3 Then Sino Nota = 2 Entonces Writeln(‘Bien’) Mostrar “Suspenso. Readln. Uses CRT. Pascal Pseudocódigo Algoritmo Calificación 2 Program Calificación_2. Leer Nota Begin Si Nota = 5 Entonces Readln(Nota).” Else Fin_Caso Writeln(‘Fuera de Rango.. Figura 2.10 Ejemplo del uso de la estructura condicional múltiple utilizando IF . End.THEN . Figura 2. Fin Readln.’). Mostrar “Fuera de Rango.’) Mostrar “Fuera de Rango. Caso A of 3: begin Acción1. 3: Mostrar “Bien. of.’) Mostrar “Muy Bien. Figura 2.

’).’) Else Writeln(‘Número IMPAR. Nota: División . Begin ClrScr. División – 63.5Kg Hasta 145 lb. Uses CRT. Begin ClrScr.’) Else Writeln(‘Número IMPAR. Readln. { Limpiamos la pantalla } {Clasifica un número en Par o Impar} Write(‘Para clasificar un número en ‘). se sabe que oscila entre 124 lb. Writeln(‘Par o Impar. Write(‘Entre un número: ’). Leer Num Inicio Si Num mod 2 = 0 Then Leer Num Mostrar “Número Par. Inicio Par: Boolean. Readln(Num).” Par:= Num mod 2 = 0 Sino Si Par = True Then Mostrar “Número Impar.. Se conoce el peso en libras de un atleta de boxeo. If Par = True Then Writeln(‘Número PAR. 33 . Algoritmo Par_Impar2 Algoritmo Par_Impar1 Var Var Num: Entero. Writeln(‘Par o Impar.2. Solución: Conociendo que todo número par es múltiplo de 2. y 140 lb. se desea precisar si el atleta está en la división de los 57.’)..Escribir un programa que determine si un número introducido es par o es impar. Var Num: Integer. Var Num: Integer. Desde 124 hasta 129 lb. Par:= Num mod 2 = 0.” Fin_Si Sino Fin Mostrar “Número Impar. División . Num: Entero. Program Par_Impar2. { Limpiamos la pantalla } {Clasifica un número en Par o Impar} Write(‘Para clasificar un número en ‘). Par: Boolean. llegamos a la conclusión que PAR = Num mod 2 = 0. 2. Write(‘Entre un número: ’). Uses CRT.60 Kg. Si esto es verdadero entonces Num es Par y si no es Impar. 60 ó 63.” Mostrar “Número Par. Hasta 137 lb.Elabore el programa que resuelva el siguiente problema. Readln.5 Solución de problemas condicionales.57 Kg. Readln(Num).’).” Fin_Si Fin Program Par_Impar1. End.’). 1. If Num mod 2 = 0 Then Writeln(‘Número PAR.5 Kg. End.

Var Peso: Real. If (Peso >= 124) and (Peso <= 129) Then Begin TextColor(1). esta se usa para seleccionar el color del texto en la pantalla. end Else Begin TextColor(60). end Else If Peso <= 137 Then Begin TextColor(2). En la figura 2.Program Boxeadores1. Begin ClrScr. Writeln(‘DIVISIÓN 63. Constante Valor Color Black Blue Green Cyan Red Magenta Brown Light Gray 0 1 2 3 4 5 6 7 Negro Azul Verde Cyan Rojo Magenta Marr n Gris claro Constante Dark gray Light Blue Light Green Light Cyan Light Red Light Magenta Yellow White Valor Color 8 9 10 11 12 13 14 15 Gris oscuro Azul claro Verde claro Cyan claro Rojo claro Magenta claro Amarillo Blanco Figura 2.’). end.5 KG. Readln. 34 .’). Writeln(‘DIVISIÓN 60 KG. end Else If Peso <= 140 Then Begin TextColor(3). Writeln(‘DIVISIÓN 57 KG. End. { Limpiamos la pantalla } {División de un boxeador} Write(‘Para clasificar al boxeador ‘). Write(‘Entre su peso en libras: ’). Readln(Peso).13 Constantes de colores definidas en BP7.13 aparece las constantes definidas en BP7 para los colores.’). En el programa se encontraron con la instrucción TextColor. Writeln(‘NO PUEDE BOXEAR’). Para hacer uso de esta instrucción se debe llamar primer a la unidad CRT. Uses CRT.

Muy bien 96. {Clasifica la nota de un estudiante} Writeln(‘Para clasificar su nota en matemática‘).59: begin Textcolor(Red).89:Writeln('Bien. Writeln(‘Nota no Válida.').'). end. program Clasificar_Nota..Bien 90. Solución: Para dar respuesta a este problema se debe conocer la desigualdad triangular que plantea (entre otras palabras) que para poder formar un triángulo. 4...75------. Write('Entre su nota: ').100:Writeln('Excelente. 96.Excelente Cualquier otra nota será una nota no válida.100----.. Readln(N).'). 90. Nota: Mediante la instrucción TextBackGround selecciona el color del fondo de la pantalla..').. 35 .95:Writeln('Muy bien. end. Writeln('Suspenso.Regular 76.Clasifique la nota final de matemática de un estudiante en cuanto a: 0.. Uses CRT. Begin ClrScr.95------. 60.Nota: Pruebe con valores numéricos mayores de 16 para que vea su función.Conociendo la longitud de tres segmentos de rectas. 3. Los valores que puede utilizar son del 0 al 7.59 -------..Suspenso 60. Case N of 0. determinar si con ellos se puede formar un triángulo. end.75:Writeln('Regular.').. else TextColor(20). Var N: Integer.89------. 76..'). también es posible utilizar las constantes predefinidas para los colores.. la suma de dos lados tiene que ser mayor que el tercero. Readln..

Write('Entre el valor del Lado1: '). Writeln(‘formar un triángulo. Fin_si {Para saber si se puede formar un Fin triángulo o no teniendo tres segmentos} Write(‘Para saber si se puede ‘). L2. Writeln. Readln(L3). Mostrar “Se puede formar. L3: Integer.. L2 . Readln(L2). Program Formar_Triang.’. End. Readln(L1). Inicio Leer L1.’. Sino Begin Mostrar “No se puede formar.L3 Si ((L1 + L2)> L3) y ((L2 + L3)> L1) y ((L1 + L3)> L2) Entonces Se_Puede = ‘Se puede formar un Triángulo. Write('Entre el valor del Lado3: ').Algoritmo Formar un triángulo Var L1.‘). L2.Escriba un programa que pregunte al usuario en qué sentido se desea realizar la conversión de Radianes a Grados o de Grados a Radianes.” No_Puede =‘No se puede formar un Triángulo. Uses CRT.” ClrScr. If ((L1+L2)>L3) and ((L2+L3)>L1) and ((L1+L3)>L2) Then Writeln(Se_Puede) Else Writeln(No_Puede). Para convertir de Grados a Radianes: VR=(Π*VG)/180 Para convertir de Radianes a Grados: VG=(180*VR)/Π 36 . Readln. Write('Entre el valor del Lado2: '). Var L1. Const 5. y luego pida el valor necesario. L3 : Entero.

Por ejemplo. requeriría de enteros aleatorios del rango de 1 a 6. Writeln(‘Entre 0.’). que es el valor máximo de un entero. según la conversión: ’).’). a menudo son distintos de lo que requiere para una aplicación específica. end Else If C = 0 Then begin Write(‘Entre los Radianes: ’).‘).6 Generación de números aleatorios.’). La función Random genera un número entero entre 0 y MAX –1. que simule la tirada de un dado de seis caras.Readln(VR). El rango de valores producidos directamente por Random. Write(‘Entre 1 ó 2. Existe en la vida cotidiana un elemento llamado “suerte”. Writeln(‘Entre 1.14. donde se tenga que hacer uso de dados. lanzar una moneda. En un programa Pascal este elemento puede ser introducido mediante una función llamada RANDOM. un programa que simule lanzar una moneda al aire pudiera requerir solo de 0 para “caras” y 1 para “escudo”. {Espacio} If C = 1 Then begin Write(‘Entre el valor del Grado: ’). Begin ClrScr. entre muchas otras. Var VR. Writeln(‘Valor en Radianes: ’. El valor de MAX debe ser un entero no mayor a 32767. Write(‘Programa para convertir de Radianes a Grados o de Grados a Radianes. Writeln. PI * VG / 180:5:2). Writeln(‘Valor en Grados: ’. Considere el siguiente enunciado: A:= Random(MAX). escoger un carta al azar. Const PI = 3. etcétera.Program Convertir. Este elemento se ve mucho en juegos.Readln(VG). End. Uses CRT.Readln(C). end Else Writeln(‘Conversión no válida. C: Integer. para convertir de Radianes a Grados. 180 * VR / PI:5:2). 37 . VG: Real. Readln. 2. Un programa de juegos de dados. para convertir de Grados a Radianes. que a todo tipo de persona le gustaría tener.

se generará un número aleatorio de 0 a 5. Writeln(‘Primer tiro: ’. Begin ClrScr.Readln. Randomize. Readln. End.El programa de la figura 2. Write(‘Presione Enter para lanzar un dado.Readln. Var Dado: Integer. Dado:= Random(6) + 1. Dado:= Random(6) + 1. Write(‘Presione Enter para lanzar otro dado. Figura 2. Siempre que se utilice la función Random es necesario colocar antes el procedimiento Randomize.15 Utilización de la Randomize y la función Random. Pero cuando ejecutamos este programa varias veces nos percatamos que siempre genera los mismos números. simula la tirada de un dado dos veces. Write(‘Presione Enter para lanzar otro dado.Dado). Uses CRT. Este problema se resuelve mediante el procedimiento Randomize. Writeln(‘Segundo tiro: ’. Readln. Figura 2. Dado:= Random(6) + 1. Uses CRT. 38 .14. Dado:= Random(6) + 1.Readln.’).Dado). Var Dado: Integer.’). Si nos limitamos a Random(6) solamente.Dado). Write(‘Presione Enter para lanzar un dado. En la figura 2.).14 Utilización de la función Random. por lo que con Random(6)+1 garantizamos que el resultado general sea un número comprendido entre 1 y 6 que son los números reales de cada cara de un dado. Program Aleatorio.15 reparamos este problema generado en el programa anterior. Begin ClrScr. y realmente esto no es lo que se quiere.’).’). Writeln(‘Primer tiro: ’. se generan dos números aleatorios de 1 a 6 en líneas diferentes mediante (Dado:= Random(6) + 1. En el programa “Aleatorio”. Writeln(‘Segundo tiro: ’. End.Dado).Readln. Program Aleatorio.

De esta forma el código puede simplificarse notablemente. 39 . se les ocurría pedirnos que listáramos una lista de números del uno al millón.. Nuestro objetivo es mostrar un cuadrado de 5 filas por 5 columnas trazado con cualquier carácter.7 Estructura de control iterativa.17 Diferentes algoritmos para elaborar el programa Dibujo. While y Repeat. Begin ClrScr.For.Repeat. Uses CRT. . Writeln(‘* * * * *’). For. Supongamos que nos piden que realicemos un dibujo sencillo que se despliegue en la pantalla. Writeln(‘* * * * *’).17 cómo podemos realizar el programa dibujo en pseudocódigo utilizando una estructura iterativa de tres formas: Algoritmo Dibujo3 Algoritmo Dibujo2 Algoritmo Dibujo1 Var I:Entero.16 Dibujo de un cuadrado de 5 x 5. Readln. End.2. Writeln(‘* * * * *’). Var I:Entero. Una iteración consiste en una repetición de un bloque de sentencias un número determinando de veces o hasta que se cumpla una condición. Var I:Entero. Inicio Inicio Inicio I := 0 I := 1 Para I:=1 a 5 hacer Repetir Mientras I<=5 hacer Mostrar ("*****") Mostrar ("*****") Mostrar ("*****") Fin_Para I:= I + 1 I:= I + 1 Fin Hasta I = 5 Fin_Mientras Fin Fin Figura 2. Pero. Básicamente este programa cumple con el objetivo. En la figura 2. ¿No perciben que algo anda mal? Aquí se repitió cinco veces la misma instrucción. Figura 2. También imagínense lo que tardaríamos en escribirlo.While. . Son las estructuras de iteración. Estos son: . veremos en la Figura 2. Sin embargo tenemos un recurso para acudir en cuanto surjan estos problemas. Writeln(‘* * * * *’). Program Dibujo. Antes de entrar en los detalles de la implementación en BP7.. Y si en vez de una figura . el código sería inmenso. ¿Qué sucedería si nos pidieran una figura más grande? Tendríamos que agregar más líneas de código. BP7 cuenta con tres tipos de Bucles (estructuras iterativas). Writeln(‘* * * * *’). 16 se muestra la solución de este programa utilizando los elementos de programación que ya conocemos.

Nota: 1. Var I: Integer. Begin For I:=9 downto 0 do begin Write(' '. . estos tienen elementos que les son comunes.. . Puede contar en forma ascendente (To) y en forma descendente (Downto) Figura 2. For: Este es el bucle más usado. Figura 2.18 Estructura general del bucle For. Uses CRT. Conteo descendente Program For_Descendente. Aunque existan tres tipos de bucles. end.Un cuerpo.Una prueba de condición que determina cuando debe concluir el ciclo.”. que contiene la o las acciones que se quieren repetir. end. End. 2. end. Acciones o acción a repetir..18. Ciclo For Ascendente Ciclo For Descendente For valor_inicial to valor_final do For valor_inicial Downto valor_final do begin begin Acciones o acción a repetir. Readln. Ejemplo del bucle "For": Conteo ascendente Program For_Ascendente. La palabra to indica que “I” se va a aumenta de uno en uno hasta llegar al valor final que en este caso es 9.I). 40 .Un punto de terminación. Elementos comunes de los ciclos. Lo que está entre “begin” y “end. Var I: Integer. o bien.Si el cuerpo contiene varias líneas.Un punto de inicio. Uses CRT. Todo bucle tiene: . End. Until (en caso del Repeat).Nota: Todo lenguaje de programación cuenta con estructuras de control repetitivas. Begin For I:=0 to 9 do begin Write(' '. Readln. Toma dos parámetros: los valores inicial y final.El punto de terminación del ciclo puede ser la palabra clave end (en el caso de los ciclos For y While). deberá estar bloqueado con instrucciones Begin y End (con la excepción del ciclo Repeat).I). end. va a mostrar el valor de “I” en cada iteración o repetición del bucle. Explicación del conteo ascendente: Aquí le asignamos a la variable “I” el valor 0 que va a ser el valor inicial del ciclo. .

21(A) aparece el programa Dibujo resuelto de una manera más eficiente utilizando el bucle FOR. iniciamos la variable “I” con valor 0. En tanto la condición de prueba sea verdadera (True). La palabra Downto indica que “I” se va a decrementar de uno en uno hasta llegar al valor final que en este caso es 0. Figura 2. Readln. end. Ejemplo del bucle While: Program Bucle_While. el ciclo continúa operando. Begin I:=0. 41 . Uses CRT. End. este será infinito y tendrás un programa bloqueado y hay que tener cuidado con esto. Var I: Integer.Aquí no era necesario las palabras begin y end porque se utiliza una solo línea de código a repetir. Figura 2. lo que hace es aumentar la variable “I” de uno en uno en cada iteración del ciclo. lo que en este caso lo realizamos con un ciclo While. Fíjense. end. Nota: Si no haces este incremento en cada repetición del ciclo. En la figura 2.21(B) aparece el programa Dibujo resuelto de una manera más eficiente utilizando el bucle While. En la figura 2. Al comenzar el ciclo hay una condición que mientras esta sea verdadera.19 Estructura del bucle While. While: Este ciclo difiere del For en que contiene una condición de prueba que se verifica al inicio de cada iteración.19. ya que este no lo hace por si solo como el For. se van repetir las acciones que están entre las palabras “begin” y “end. I:= I + 1. Referente a la línea “I:= I + 1”. Recuerden que los ciclos tienen que ser finitos y siempre hay que buscar la manera de que la condición del ciclo sea falsa para que termine de operar.I). Explicación del conteo descendente: Aquí le asignamos a la variable “I” el valor 9 que va a ser el valor inicial del bucle. While < condición > do begin Acciones o acción a repetir. While I < 10 do Begin Write(' '. Este programa hace lo mismo que el programa “For_Ascendente”.”.

La diferencia es que en este. usted está en condiciones de elaborar un programa que realice la misma operación que el programa “For_Descendente” pero utilizando el bucle Repeat. Repeat: Este ciclo es casi idéntico al While. 42 .20 Estructura del bucle Repeat. la expresión condicional se verifica al final del ciclo. lo que quiere decir esto que cuando utilizamos este ciclo. I:=I+1. begin I:=0. Figura 2. En la figura 2.21(C) aparece el programa Dibujo resuelto de una manera más eficiente utilizando el bucle Repeat. end. Until I=10. Repeat Write(' '.20. el cuerpo de este se va a ejecutar al menos una vez. Until < condición >. Bueno con lo aprendido hasta ahora del bucle Repeat. Readln. Este programa hace lo mismo que el programa “For_Ascendente”. Repeat Acción o acciones a repetir. esto hace que las acciones que están en el cuerpo del bucle se ejecutan al menos una vez. la condición del ciclo está al final. Var I: Integer. Ejemplo del ciclo "Repeat" : program Ciclo_Repeat.I). lo que en este caso lo realizamos con un ciclo Repeat.Bueno con lo aprendido hasta ahora. Este ciclo se lee así “Repite (Repeat) estas acciones hasta (Until) que la condición sea verdadera”. usted está en condiciones de elaborar un programa que realice la misma operación que el programa “For_Descendente” pero utilizando el ciclo While. Figura 2. Fíjense. iniciamos la variable “I” con valor 0. Uses CRT.

que la variable “I” se iba aumentar de uno en uno en cada iteración de ciclo.-----.Igual que I:= I-10. Uses CRT. y me refiero a la línea “I:= I + 1.10).22 (A). Uses CRT. Solución: 43 . Until I = 5. La función DEC. En cada problema se utiliza un bucle para que usted elabore su propio programa utilizando cualquiera de los otros estudiados en este epígrafe. Ver la figura 2.22 (B). -----. La función INC. Mostrar ("*****"). Readln. 2. Los problemas se pueden resolver de muchas formas. -----. begin I:= I + 1.Igual que I:= I+10. Dec(I). Program Dibujo2. ♠ Prueba cada una de estas funciones en los programas anteriores para que veas que es más cómodo de trabajar utilizando estas funciones. Var I: Integer. cuenta con funciones que nos permite hacer esto de una manera más fácil. incrementa una variable dada en un número específico. End. End.A Program Dibujo1. Var I: Integer. Readln. Decrementa de una variable dada en un número específico. Uses CRT. Figura 2. B C Program Dibujo3. I:= I + 1. A B Inc(I). Begin Begin I := 0. Figura 2. Repeat While I <=5 do Writeln ("*****"). aquí se muestra un vía que puede resultar fácil de entender. Hasta ahora hemos utilizado el incremento de variables en un valor constante. I := 1.Escribir un programa que visualice en pantalla los números pares entre 1 y 25. 1. o sea. Ver la figura 2.22 Ejemplo del uso de las funciones INC y DEC. Var I: Integer. Readln.”. Pascal. End.Igual que I:= I-1.Igual que I:= I + 1. al igual que otros lenguajes de programación. Begin For I:=1 To 5 do Writeln ("*****").10).21 Programa Dibujo resuelto mediante los tres tipos de bucles. Dec(I. end. -----. Funciones Inc y Dec.. Inc(I.8 Solución de problemas iterativos.

AT:= AT + Aprt. end. Var num: Entero.Escriba un programa que calcule el aporte total de las MTT de un grupo de 10 estudiantes. Mostrar “Entre el aporte “. AT: Real. Var I: Integer. Var num:integer. Leer Aprt For I:= 1 to 10 do AT:= AT + Aprt begin Fin_Para Write (‘Entre el aporte ’.AT:0:2). Mostrar num num:= 5. Algoritmo Pares Menores que 25 Var num: entero. Solución: Algoritmo Aporte MTT Program Aporte_MTT. Writeln(‘Aporte del grupo: ’. Mostrar “Aporte del grupo: ”. Begin clrscr. Readln.Escribir un programa en Pascal que visualice en pantalla los números múltiplos de 5 comprendidos entre 1 y 100. Uses crt.”: ” AT:= 0. 3. Readln. Inicio num:= 5 Begin Mientras num <= 100 hacer Clrscr. Inicio num:=2 Repetir Mostrar num num:= num + 2 Hasta num = 26 Fin 2. num:=2. End. end. Aprt. Inicio AT:= 0 Begin Para I:= 1 a 10 hacer Clrscr. num:= num + 2. Var num:integer.I.5). AT: Real. Uses crt. Program Mult_25. Solución: Algoritmo Multíplos 25. AT Readln(Aprt). Readln. Aprt. Var I: Entero. Repeat Writeln (num).Program Pares_M25.’: ’). Fin Inc(num.. Uses crt. 44 . Until num= 26. Fin end.I.. end. num:= num + 5 While num <= 100 do Fin_Mientras begin writeln (num).

4. I. Var Respuesta: Texto. 3. Writeln. Uses crt.Prom:0:2). CRT. Leer N Begin Sum:=0 ClrScr. Var Prom. 9. Fin Readln(Nota). Sum.11. Sum.Nota: Real.‘). Inicio Mostrar “Entre la cantidad de notas:” I. Algoritmo Promedio Program Promedio. 9 no es número primo.Escribir un programa que detecte si un número es primo o no.Nota: Real.7. Var Respuesta: String. Solución: Un número es primo si sólo es divisible por sí mismo y por la unidad (1). Var Uses Prom. Readln.I.. 6. Sum:= Sum + Nota Readln(N). {El sumador comienza con 0} Prom:= Sum / N For I:=1 to N do Mostrar “El promedio es: ”. Prom:= Sum / N. Para I:=1 a N hacer Write(‘Programa para promediar las Mostrar “Entre la nota “. Sum:= Sum + Nota. Fin Readln (Respuesta). Agréguele la posibilidad de promediar las notas del grupo.4. End. Ejemplo: 2. Inicio Repetir Begin Mostrar “¿Desea continuar: s/n?” Clrscr.13.’: ’). 5. Until Respuesta = 'n'. al final dividimos la suma entre N para obtener el promedio. N: Integer.Confeccione un programa para leer las notas de un grupo de N estudiantes.{Almacena la suma} end. Writeln ('¿Desea continuar: s/n?'). Solución: Algoritmo Salida Program Salida. N: Entero.3. Writeln(‘El promedio es: ’. Leer Nota Write(‘Entre la cantidad de notas: ’). Solución: Aquí necesitamos conocer la cantidad de estudiantes y almacenar este valor en la variable N. Prom begin Write(‘Entre la nota ’. 45 .17 son números primos.Escribir un programa que realice la pregunta ¿Desea continuar S/N? y que no deje de hacerla hasta que el usuario teclee N. I.. Leer Respuesta Repeat Hasta Respuesta =”n” Writeln. porque es divisible por 1. End. luego pedimos las N notas mediante un bucle y las vamos sumando. {Espacio} Fin_Para Sum:=0.. “: ” notas de un estudiante.

claro que si se siguen los pasos lógicos para resolver un problema mediante un lenguaje de programación esto se debe realizar en cuanto se desarrolle el algoritmo. Var I. Todos los primos son impares. Los números primos son enteros mayores que 1 sin divisores enteros positivos. Repeat P:=True. N:Integer. Begin Clrscr. end.’). Inc(I).4. I:=2. 46 .. ‘ es un número primo. Esto se hace dando como datos valores reales. exceptuando el 1 y ellos mismos. End.9 Rastreo de programas. Respuesta: String. Program Primo. El rastreo consiste en realizar un recorrido por el programa paso a paso e ir anotando la operación que realiza cada línea que se ejecuta.’) else Writeln(N. etc. Readln(N). para ver si se tienen los resultados esperados. Until Respuesta = 'n'.23 aparece el rastreo del programa Aporte_MTT. P: Boolean.3.’). ‘ no es un número primo. Uses crt. While (I < N) and (P=True) do begin If N mod I = 0 Then P:=False. Esta operación se realiza para comprobar si su programa está correctamente elaborado. En la figura 2. en caso de que no de cómo se esperaba entonces se busca en qué línea está el error lógico. Writeln ('¿Desea continuar: s/n?'). Writeln. Readln (Respuesta). En BP7 se puede hacer esto presionando la tecla F8 o en el menú RUN escoger la opción Step Over. Write(Entre un número: ). If (P=True) and (N<>1) Then Writeln(N. hasta el propio número. excepto el 2. Writeln(‘Para determinar si un número es primo o no.El algoritmo para resolver este problema está en dividir sucesivamente el número estudiado por 2. 2.

Delay: Detiene la ejecución del programa durante un tiempo determinado. estas antes de ser utilizadas se tiene que llamar la unidad CRT. Sound: Genera un sonido en la bocina de la computadora a una frecuencia determinada por el valor pasado como parámetro. Begin Writeln('Retardo de aproximadamente 5 segundos').24 Ejemplo de la instrucción Delay. Instrucciones Delay.50 4 5 35.95 9 20 70. 47 . El intervalo válido es desde 0 hasta 65535.40 37.23 Rastreo del programa Aporte_MTT.95 10 30 100. End.'). Writeln('Fin del retardo. Program Espera. Al igual que la instrucción TextColor. Figura 2.50 3 20 30. Para detener el sonido es necesario ejecutar la instrucción NoSound.50 2 10 10.24 hay un ejemplo donde el programa espera aproximadamente 5 segundos y luego ejecuta la próxima orden. la precisión del retardo depende de la precisión del reloj interno de la computadora. En la figura 2.I:=1 a 10 Leer Aprt AT:= AT + Aprt 0 1 0.50 5 2. Ahora solo cada de parte de usted la ejercitación de esta operación.25 presenta un programa donde se pone a disposición de ustedes ejemplos de sonidos combinando estas instrucciones con estructuras cíclicas. podemos crear sonidos para darle un ambiente a nuestro programa más agradable. NoSound y Delay.90 6 3. ya que conociendo con claridad que sucederá cuando se ejecuta cada una de la órdenes siempre se obtendrán los resultados esperados. Uses crt.95 11 Figura 2.05 40. Sound y NoSound: A partir de las estructuras cíclicas conocidas y con las instrucciones Sound.95 7 10 50. Delay(5000).95 Esta es una habilidad que debe dominar un programador de punta a cabo. Este tiempo se da en milisegundos.50 0. Readln. AT I Mostrar AT 100. La figura 2.95 8 0 50.

Uses CRT. La estructura de control lineal está compuesta solamente por: . Write(‘Presione Enter para escuchar un sonido ganador. Delay(200). 48 . nosound. nosound. 2. sound(600). sound(480). for i:=1 to 1 do begin for j:=1 to 3 do begin sound(200). for i:=1 to 2 do begin sound(500). NoSound. Readln. Var I.’). Figura 2. end. delay(150). NoSound.Instrucciones de escritura.J: Integer. sound(200). End. end.sound(200). delay(150).Instrucciones de lectura. .delay(180). delay(500). Condicionales y Cíclicas. Delay(200).delay(500). sound(150). end.10 Resumen. for i:=1 to 2 do begin sound(600). NoSound. . delay(500). delay(150).’).Program Sonidos.Readln. Write(‘Presione Enter para escuchar un sonido. Write(‘Presione Enter para escuchar un sonido perdedor. sound(300). De ahora en adelante puede crear sus propios sonidos para sus programas. delay(150).sound(250).25 Ejemplo de sonidos. Begin CLRSCR.Readln. Las estructuras de controles son Simples. sound(280).’).delay(200). nosound.Instrucciones de asignación.Readln. end.

49 . end. Pascal Pseudocódigo If Condición Then Si Condición Entonces Acción verdadera.Las instrucciones de escrituras son: . La unidad CRT tiene un conjunto de instrucciones que facilitan el trabajo a la hora de programar y no tener que crear instrucciones que ya existen. Acción_Falsa N. Acción_Falsa 2. y se toman diferentes acciones. . Las estructuras condicionales se clasifican en tres tipos: . Acción_Verd N Acción_Verd 2. Acción verdadera Fin_Si Estructura condicional doble.Read: Lee un dato de entrada y luego se lo asigna a una variable. Recuerde poner punto y coma al final de cada orden. La palabra reservada USES tiene el propósito de declarar las unidades.Writeln: Realiza una impresión de datos en la pantalla y coloca el cursor en la línea siguiente.Of. . .Simples. Antes de finalizar el programa se debe colocar la instrucción Readln para que el programa realice un espera. Siempre que utilices la instrucción CLRSCR debe declarar primeramente la unidad CRT..Write: Realiza una impresión de datos en la pantalla y coloca el cursor al final de la línea. esto garantiza la visualización de los resultados.Dobles. .Múltiples. Las instrucciones de lecturas son: . La instrucción CLRSCR borra la pantalla completa y sitúa el cursor en la esquina superior izquierda.Readln: Parecida a la read. La estructura Case. Pascal Pseudocódigo Si Condición Entonces If Condición Then Acción_Verd 1 begin Acción_Verd 2 Acción_Verd 1. Los comentarios se escriben entre llaves “{” y “}”. la diferencia está en que la instrucción Readln comienza leyendo los datos una línea después. maneja una serie de decisiones en las cuales una variable o expresión particular se prueba para cada uno de los valores que puede asumir. Estructura de condicional simple. Acción_Falsa 1 end Acción_Falsa 2 Else Acción_Falsa N begin Fin_Si Acción_Falsa 1. Sino Acción_Verd N.

deberá estar bloqueado con instrucciones Begin y End (con la excepción del ciclo Repeat). end.TextColor: Instrucción que se usa para seleccionar el color del texto en la pantalla. Estructura del bucle Repeat: Repeat Acción o acciones a repetir. Until < condición >. NoSound: Desactiva el sonido iniciado con la instrucción Sound. El punto de terminación del bucle puede ser la palabra clave end (en el caso de los bucles For y While). o bien. 50 . .Un punto de inicio. Un ciclo o bucle es una repetición de un bloque de sentencias un número determinando de veces o hasta que se cumpla una condición. Rastreo: Consiste en realizar un recorrido por el programa paso a paso para comprobar si está correctamente elaborado En BP7 se puede hacer esto presionando la tecla F8 o en el menú RUN escoger la opción Step Over.Un punto de terminación. end. Estructura del bucle While: While < condición > do begin Acciones o acción a repetir.Repeat. que contiene la o las acciones que se quieren repetir. Estructura del bucle For: Ciclo For Ascendente Ciclo For Descendente For valor_inicial Downto valor_final do For valor_inicial to valor_final do begin begin Acciones o acción a repetir. Until (en caso del Repeat). end. Random: Instrucción que genera un número aleatorio de un rango numérico dado como parámetro. TextBackGround: Instrucción que permite seleccionar el color del fondo de la pantalla. Si el cuerpo del bucle contiene varias líneas.For. Tipos de bucles de BP7: . . Acciones o acción a repetir.While. Sound: Genera un sonido en la bocina de la computadora a una frecuencia determinada. .Una prueba de condición que determina cuando debe concluir el ciclo. Randomize: Instrucción que prepara a Random para que la selección de los número no sean siempre la misma secuencia cada ves que se inicie el programa. . Elementos comunes de los bucles: . Delay: Detiene la ejecución del programa durante un tiempo especificado en milisegundos. .Un cuerpo.

i) ___ se utiliza para comenzar un comentario y ___ para terminarlo. c) If N = 10 Writeln(número igual a 10) d) Suma = N1 + N2. Writeln(‘Reinier. b) Declare las variables X. b) Realn A). __________ y ___________.2 Diga que imprimiría en pantalla las siguientes líneas de código: a) Write(‘** Estoy aprendiendo PASCAL **’).3 Escriba un enunciado para cumplir con cada uno de los siguientes incisos: a) Declare un programa con el nombre Promedio. Y.2. c) Writeln(‘Mi nombre es: ’). b) La estructura de control lineal está compuesta solamente por instrucciones de _________ . d) La instrucción _______ es parecida a la Read. se usa para leer los datos de entrada y luego asignarlos a variables. 1. e) Calcule el promedio de las variables X. 1.1 Llene cada uno de los siguiente espacios vacíos: a) Las estructuras de control se clasifican en estructuras __________ . g) Para utilizar instrucciones como CLRSCR y TextColor hay que declarar la unidad _______ . g) Realice una espera de cuatro segundos. Z y P que sean de tipo entero. d) Lea tres enteros y almacénelos en las variables X.’). e) La instrucción _________ se usa para seleccionar el color del texto en la pantalla y __________ para seleccionar el color del fondo de la pantalla. c) Indíquele al usuario que escriba tres números. d) Writeln. b) Write(‘Mi nombre es: ’). 1. 1. f) Imprima en pantalla “El promedio es: ” seguido de la variable P. Y y Z y asígnaselo a la variable P.4 Corrija los errores (si es que existe alguno) de cada uno de los siguientes enunciados: a) Write ‘Hola Mundo’. Write(‘Rodiert. h) Se llama ________ al recorrido que se hace por el programa paso a paso para ver la operación que realiza cada línea de código. c) La instrucción ________ realiza una impresión de datos en la pantalla y __________ realiza la misma acción pero coloca el cursor en la línea siguiente.11 Ejercicios de autoevaluación. f) ________ se utiliza para generar un número aleatorio. Y y Z. 51 .’). ____________ y ____________.

e) ___ Un punto de terminación. Se produce la siguiente salida: ###### $$$$$$ &&&&&& 52 . Writeln(‘&&&&&&’). If (Y = 10) and (Z = 7) Then Writeln(‘@@@@@@’) Else Writeln(‘######’). Se produce la siguiente salida: @@@@@@ &&&&&& d) Suponiendo que Z =7 y Y =7. 1. a) Suponiendo que Z =7 y Y =10. b) ___ Un cuerpo. Se produce la siguiente salida: @@@@@@ c) Suponiendo que Z =7 y Y =10. Writeln(‘$$$$$$’). d) ___ Un cuerpo se repite infinitamente. que contiene la o las acciones que se quieren repetir. g) ___ No poseen punto de terminación.7 Escriba un programa utilizando el bucle For que muestre en pantalla una figura de color azul igual a la que sigue: * ** *** **** ***** ****** 1.5 Diga cuáles de las siguientes afirmaciones pertenecen a los elementos comunes de los ciclos: a) ___ Un prueba lógica que se verifica siempre al inicio.6 Escriba un programa utilizando estructuras secuenciales que muestre en pantalla una figura de color rojo igual a la siguiente: ********** ********** ********** ********** 1. 1. c) ___ Una prueba de condición que determina cuando debe concluir el ciclo. No puedes hacer ningún cambio a excepción de inserción de begin y end.e) For I = 1 do 20 to f) While I<31 do I:= I+1.8 Utilice las técnicas apropiadas para garantizar la salida para cada uno de los siguientes incisos. Se produce la siguiente salida: @@@@@@ $$$$$$ &&&&&& b) Suponiendo que Z =7 y Y =10. Pudiera ser posible que no se requiera de ninguna modificación. f) ___ Un punto de inicio.

Total:= 0. Total:= Total + Y.12 Respuestas de ejercicios de autoevaluación. Lineales o secuenciales. end.9 ¿Qué es lo que escribe el siguiente programa? Program Ejercicio. While X<= 10 do begin Y:= X * X. TextColor y TextBackGround. X).1. Readln(X.3 a) Program Promedio. Var X. P:= (X + Y + Z) DIV 3. Writeln(‘El promedio es: ’. Var X. Escritura. Random. Z: Integer. Begin X:= 1. P). INC(X). 2. 1. Readln. Rastreo. Writeln(‘El total es ’. Y. Y. Readln. Condicionales y Cíclicas. CRT. d) Aparece la línea en blanco.2 a) ** Estoy aprendiendo PASCAL ** b) Mi nombre es: Rodiert. Asignación y Lectura. “{ “ y “} “ 53 . 1. Begin b) c) d) e) f) End. Writeln(‘El valor final de X es: ’.1 a) b) c) d) e) f) g) h) i) 1. Z). Write(‘Entre tres números: ’). c) Mi nombre es: Reinier. End.Total). Total: Integer. Write y Writeln. Y.

For I:=1 to 6 do begin For J:=1 to I do Write(‘*). Readln. 1. c) If N = 10 Then Writeln(‘número igual a 10’). b) If (Y = 10) and (Z = 7) Then Writeln(‘@@@@@@’) Else begin Writeln(‘######’). 54 . J: Integer. f) Si. 1. Writeln. g) No. Readln. Uses CRT.8 a) No requiere modificación. Uses CRT.7 Program Figura2. e) For I:= 1 to 20 do f) No tiene errores.9 El total es 385 El valor final de X es: 11 d) No requiere modificación. end. Begin TextColor(Red). Writeln(‘$$$$$$’).4 a) Write (‘Hola Mundo’). end. Writeln(‘**********). Writeln(‘$$$$$$’).g) Delay(4000). 1. 1. Begin TextColor(Blue). 1. Writeln(‘**********). c) If (Y = 10) and (Z = 7) Then Writeln(‘@@@@@@’) Else begin Writeln(‘######’). End. Writeln(‘&&&&&&’).6 Program Figura1. b) Readln (A). e) Si.5 a) No. Writeln(‘&&&&&&’). end. b) Si. End. 1. Writeln(‘**********). Var I. d) No. c)Si. d) Suma := N1 + N2. Writeln(‘**********).

1. De ser iguales mostrar un mensaje referente al caso. S = VT 1.21 Escribir un programa que detecte si un número introducido desde le teclado es positivo o negativo. . 1.11 Elabore un programa que calcule el área de un rectángulo. Confecciones un programa que calcule la cantidad de meses demorará en pagar el artículo.23 Dado tres números determinar el mayor y el menor o si son iguales. multiplicación y división de los dos.El sucesor. . Expresar el resultado en metros /segundo.14 Queremos construir un programa que pida los datos necesarios para calcular y mostrar por pantalla el volumen de una cisterna.13 Elabore un programa que calcule el área de un triángulo.El cuadrado. 1. 55 ( ( ) ) . 1. VC = πR2h 1.15 Confeccione un programa para calcular el volumen de un cilindro circular recto. 1.El inverso.El antecesor. b) Si se han introducido en orden decreciente.24 Dado tres números cualquiera determinar: a) Si se han introducido en orden creciente.2.20 Escribir un programa que teniendo los datos necesarios evalúe la siguiente expresión: a) (a+7 *c) / (b+2-a)+2 *b b) (a + 5) * 3 / b – 1 c) − b + b 2 − 4 * a * c / (2 * a ) 1. Velocidad = espacio / tiempo 1.22 Elaborar un programa que pida dos números y este devuelva cuál es el mayor y cuál el menor. . d) Si son iguales.13 Ejercicios propuestos. 1. si sabemos que mensualmente le descontarán el 15% de su salario.La raíz cuadrada. resta. c) Si se han introducido desordenadamente. .12 Elabore un programa que calcule la longitud y el área de una circunferencia. . 1.El opuesto.19 Escribir un programa que calcule la velocidad de un proyectil que recorre E kilómetros en T minutos. 1. Si es cero mostrar un mensaje referente al caso. 1. 1.18 Elabore un programa que pide al usuario un número y de este muestre: . 1.16 Confeccione un programa para calcular la distancia recorrida por un automóvil.10 Realice un programa donde pida al usuario dos números y muestre la suma.17 A un trabajador se le entrega un artículo electrodoméstico para pagarlo por descuento.

28 Escribir un programa que lea desde teclado el importe bruto de una factura y determine el importe neto según los siguientes criterios.36 Elabore un `programa que muestre los números del 0 al 100 con saltos de 10. 1.45 * x + 2 si -1 <= x <0 F(x)= x * 1/3 + 6 si x>= 0 1. Desde 124 hasta 129 lb.29 Conociendo la longitud de tres segmentos de rectas. y luego pida el valor necesario. se desea precisar si el atleta está en la división de los 57. impar o si es neutro. 60 ó 63. Si esto es posible clasifíquelos en equiláteros. División – 63.34 Elabora un programa que pida el nombre de usuario y una contraseña. y 140 lb. se sabe que oscila entre 124 lb. Hasta 137 lb.5 Kg.36 para que muestre cada número en línea diferentes.32 Se conoce el peso en libras de un atleta de boxeo. Si se entra cualquier otro número el programa emitirá un mensaje de error.60 Kg. determinar si con ellos se puede formar un triángulo.27 Confeccione un programa que dado un número del 1 a 7 escriba el correspondiente nombre del día de la semana. 1. Ejemplo: 0 10 20 30 40 50 60 70 80 90 100 1. 56 . 1. 1.5Kg hasta 145 lb. 1. 1. determinar si el mismo es par.26 Dado un número entero cualquiera entrado por el usuario. isósceles o escaleno.31 Construir un programa para evaluar la función: F(x)= 0 si x< -1 F(x)= 0.1. Si el nombre de usuario y la contraseña coinciden el programa mostrará un mensaje de bienvenida y en caso contrario un mensaje de error. Nota: El nombre del usuario es: batalla La contraseña es: ideas 1.37 Modifique el programa del ejercicio 1. 1. · Importe bruto menor de 2 00 -> sin descuento · Importe bruto mayor o igual de 2 00 -> 15% de descuento 1. c) Si son diferentes los tres determinar cuál es el mayor y cuál el menor.33 Escriba un programa que pregunte en que sentido se desea realizar la conversión de Radianes a Grados o de Grados a Radianes.35 Elabore un programa que muestre los números sucesivos del 0 al 100 utilizando cualquiera de los tres tipos de bucles y la función INC. División . Para convertir de Grados a Radianes: VR =(π* VG)/180 Para convertir de Radianes a Grados: VG =(180* VR)/ π 1. Nota: División .30 Dado tres números cualesquiera: a) Si los tres son iguales calcular su suma b) Si solo dos de ellos son iguales calcular la media de los tres.57 Kg.25 Crear un programa que pida dos números A y B y muestre si A es múltiplo de B o no.

42 Hacer un programa que permita determinar la cantidad de días en los que las precipitaciones caídas estuvieron por encima de 44 milímetros. Calcular el aporte realizado por los estudiantes. c) Si todas las brigadas limpiaron más de 10 caballerías clasificar el trabajo voluntario en “TRABAJO VOLUNTARIO PRODUCTIVO” 57 .41 Partiendo del ejercicio 1.39 para que cicle mientras que el usuario quiera seguir calculando.00 y cuál fue el mayor aporte realizado.43 En una lista se tiene el aporte hecho por N estudiante a las MTT. 1. en caso afirmativo el programa se vuelve a ejecutar y si no se cierra.40 Modifique el programa 1.38 Modifique el programa del ejercicio 1. 1.37 para que muestre el siguiente resultado mediante un conteo descendente con la función DEC: 100 90 80 70 60 50 40 30 20 10 0 1. 1.39 Cree un programa que pida al usuario un número entero y devuelva su tabla de multiplicación del 0 al 10. Si el usuario se equivoca cuatro veces entonces el programa emitirá un mensaje diciendo “Usted no puede entrar” y el programa se sierra automáticamente después de esperar unos tres segundos. cuántos estudiantes han aportado más de $10. Ejemplo: Entre un número: 6 0*6=0 1*6=6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 7 * 6 = 42 8 * 6 = 48 9 * 6 = 54 10 * 6 = 60 1. El programa muestra la tabla del número introducido y pregunta si desea introducir otro número.1.34. b) Cuántas brigadas limpiaron más de 10 caballerías.44 En un trabajo voluntario en la caña part6iciparon N brigadas. Conociendo que la cantidad de precipitaciones caídas por días se encuentran expresadas en un dato cuyo final esta dado por -1. Modifique este programa para que cicle la escritura del nombre de usuario y su contraseña mientras esta sea incorrecta. Se conoció la cantidad de caballerías que limpió cada brigada y se quiere hacer un programa que calcule: a) El total de caballerías que limpiaron en total. 1.

El programa imprimirá la siguiente tabla: Número Cuadrado Cubo 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 1. ala. 1. tome como base al primero y como exponente al segundo. 1.183381.etc. mientras los mismos no excedan de 100. sallas. ana.1. como 1331. oso.50 Realice un programa que pida al usuario una palabra y este determine si es palíndromo o no. El programa mostrará en pantalla la potencia que representa esos números.Factorial de 6 = 720 (porque 1*2*3*4*5*6=720) 1.898.8 en este capítulo.53 Elabore un programa que pida al usuario un número entero positivo y devuelva su equivalente en el sistema numérico binario.52 En pascal mediante la función SQR podemos obtener el cuadrado de un número cualquiera. Por ejemplo: . octal y hexadecimal. Ejemplo de programa para el número 20. 1.46 Calcule los múltiplos de un número A.54 Elabore un programa que pida al usuario un número entero positivo y devuelva su equivalente en el sistema numérico binario. Ejemplos de palabras palíndromo: reinier. escriba un programa que calcule los cuadrados y los cubos de los números del 1 al 10. Capicúa: Un número que es igual leído de izquierda a derecha que de derecha a izquierda. Para realizar este ejercicio puedes ver el ejercicio 6 del tema 2. la mayor y la menor edad. 1.47 Utilizando las técnicas aprendidas en este capítulo. Entre un número entero positivo: 20 Decimal Binario Octal Hexadecimal 20 10100 24 14 58 . 1. Palíndromo: Palabra o frase que se lee igual de izquierda a derecha.45 Dadas las edades de un grupo de N alumnos elabore un programa que determine la edad promedio del grupo.51 Realice un programa que pida al usuario un número y este determine si es capicúa o no. que de derecha a izquierda. 121. 1.333. 1. anilina.Factorial de 3 = 24 (porque 1*2*3*4=24) . Agregue la posibilidad de contar la cantidad que hay.49 Elabore un programa que muestre todos los números primos que hay entre NI y NF.48 Escribir un programa que calcule el factorial de un número. pero ¿qué pasa si queremos calcular 45 ó 67? Elabore un programa que le pida al usuario dos números.

Su programa verifica la respuesta. A continuación deberá escribir una pregunta que le indique al pionero que debe multiplicar los dos números y escribir la respuesta. el programa debe ejecutarse nuevamente y si es no.Muy bien. ---------------------Respuestas correctas: .No se rinda . Realice un programa que ayudaría a un alumno de una escuela primaria a ejercitar su habilidades a la hora de multiplicar.Excelente.Buen trabajo.1.En caso que el número generado sea menor que el número introducido: Respuesta: “El número a adivinar es menor.En caso que el número generado sea mayor que el número introducido: Respuesta: “El número a adivinar es mayor. El programa deberá general dos números aleatorios de 0 a 10.56 Elabore un programa que simule el juego “Adivine el Número”. Siempre que el jugador escribe un número incorrecto el programa responde de las siguientes formas: . Intente una vez más . Si el jugador consume todos los intentos sin haber adivinado el número. . .No. saldrá de inmediato. Si la respuesta es incorrecta. Si la respuesta es si. . ---------------------Respuestas incorrectas: . Cuando termine el juego independientemente del resultado el programa debe preguntar si se desea adivinar otro número. siga intentando ---------------------1.Incorrecto.” . Su programa escoge un número al azar en el rango del 1 al 1000. Por favor intente de nuevo. el programa mostrará el número generado en pantalla parpadeando y un mensaje indicando que perdió.” El jugador gana cuando adivine el número generado por el programa y aparecerán los dos números parpadeando en pantalla.55 La computadora está jugando un papel creciente en la educación.No. Si es correcta. 59 . . imprimirá de manera aleatoria una de las respuestas incorrecta que aparecen al final y a continuación permitirá que el alumno vuelva a intentar responder la misma pregunta. imprime de manera aleatoria una de las respuestas correctas que aparecen al final y a continuación solicita otra multiplicación.¡OH! Sigue así. hasta que al final conteste correctamente. El jugador tendrá 10 intentos para adivinar el número.

1 Datos estructurados. sobre todo cuando uno es el que comete el error. Eliminación y Ordenamiento). Inserción. 3. ◘ Dos pueden lograr lo que resulta imposible para uno. Abigail Adams. Sinopsis 3. Proverbio Árabe.6 Ejercicios de autoevaluación. ◘ Un hombre es rico en proporción a las cosas que puede tener por sí mismo. 3. Henry D. Thoureau. Norman Schwarzkopf. 3. ◘ No podemos ayudar a otros a subir una montaña si acercarnos a la cima nosotros mismos. Hay que buscarlo con afán y alimentarlo con diligencia.8 Ejercicios propuestos.7 Respuestas de ejercicios de autoevaluación.3 Operaciones con arreglos. 3. 3.Capítulo 3 _____________________________________________________________ Estructuras de datos _____________________________________________________________ Objetivos • Caracterizar las estructuras de datos.5 Resumen.2 Arreglos de una dimensión. Pensamientos ◘ El saber no se obtiene por azar. 60 . • Hacer referencia a los elementos de un arreglo. 3. J. • Realizar operaciones básicas con arreglos(Recorrido. ◘ “Errar es humano”. 3. Búsqueda.4 Arreglos de dos dimensiones. Soares. • Declarar arreglos unidimensionales y bidimensionales.

pero nunca una combinación de distintos tipos. es decir. 4) se pueden ver forma abstracta en la figura 3. etcétera). Un arreglo llamado Notas que tenga espacio para almacenar cinco notas(5.. el tercero.3.Multidimensionales.Bidimensionales. 3. el segundo elemento. . Un arreglo unidimensional puede ser considerado como una lista(es decir.y el enésimo elemento. esto realmente no es conveniente por el gran trabajo que esto requiere. que llamaremos rango. La cantidad de elementos del arreglo se específica cuando se crea éste. (Vectores) .Unidimensionales. pero si además del promedio se necesitara obtener un listado ordenado con los nombres y las notas alcanzadas por los estudiantes para conformar un escalafón. Finita: Todo Array tiene un límite. (Matrices) . Un arreglo (Array) se define como una colección finita. lo resolveríamos con las herramientas de programación que hasta ahora se han estudiado. diferenciaremos los siguientes tipos de arreglos: . Homogéneo: Todos los elementos de un Array son del mismo tipo( todos enteros. máximo de elementos que formarán parte del Array. homogénea y ordenada de elementos. los simples como se estudió en temas anteriores pueden almacenar un único valor en cada variable y los compuestos o estructurados están formados por tipos de datos simples. en la zona de declaraciones del programa. 2.1 Datos estructurados. 2. los Arreglos. a los que colectivamente nos referiremos mediante un nombre. Según sea este número. ya las cosas se enredarían porque se utilizarían un gran número de variables para la obtención de este fin. Los datos pueden ser simples o estructurados. Si tuviéramos la necesidad de hacer un programa que hallara el promedio alcanzado en una asignatura determinada de un grupo de N estudiantes. En este tema se trabajará con una de las estructuras de datos más utilizadas a la hora de programar. una columna) de datos del mismo tipo. 5. El estudio de estas estructuras comprenden un análisis de cómo se combinan las estructuras simples para formar las compuestas.1. Ordenada: Se puede determinar cual es el primer elemento. en Pascal existe un tipo de dato que permite la facilidad del trabajo con listas de datos por lo que resolvería este problema de manera sencilla.. 61 . definiendo el número de dimensiones o número de índices del mismo y los límites máximo y mínimo que cada uno de ellos puede tomar. todos boleanos. debe determinarse cual será el número.2 Arreglos de una dimensión.

{ Muestra en pantalla Ecuador } Readln. { Muestra en pantalla Cuba } Writeln (Paises[7]).'Venezuela'. Ejemplo: En el programa de la Figura 3.3 Ejemplo de cómo acceder a un elemento de un arreglo. LS=8.Valor_Final] of Tipo de dato. Uses CRT.. se realiza en la zona de declaraciones.'Ecuador'. Podemos imaginarnos el arreglo Grupo como una fila de diez elementos del tipo que hemos especificado (Integer). 'Hondura').3 se declara un Arreglo llamado Paises y se asigna en el momento de su declaración los elementos que lo componen. Begin CLRSCR. Var Grupo : Array [1.2. al igual que para declarar las variables se coloca Var. 62 .1 Ejemplo de arreglo de una dimensión expresado de forma abstracta. Para acceder a un elemento cualquiera de un arreglo se hace mediante el nombre del arreglo y el número del elemento a través el subíndice del mismo.Notas 5 2 3 2 4 Figura 3.LS] of String =( 'Cuba'.. End.. Const LI=1. 1 2 3 4 5 6 7 8 9 10 Elementos.'Bolivia'. Para declarar un arreglo de un dimensión Figura 3. Figura 3.'México' .2 Estructura general de un arreglo unidimensional.'Panamá'. Program Array_Paises. Figura 3. El arreglo Grupo quedaría así: Grupo Número de orden.10] of Integer. El ejemplo que se pone a continuación define la variable Grupo como un arreglo que contiene 10 datos de tipo Integer. Var Paises: ARRAY [LI.'Chile'. la palabra reservada Array y dentro de corchetes el rango de elementos que tendrá dicho arreglo seguido del tipo de dato. Writeln (Paises[1]). Var Nombre : Array [Valor_Inicial. luego el nombre con que se identificará el arreglo.

3. 63 . los elementos que lo compone son todos de texto.4 recorren el arreglo Paises y van mostrando cada uno de sus elementos. Inserción. Mezcla.4.4 Algoritmos recorrido del arreglo Paises. nos referimos a un arreglo de una dimensión o unidimensional. Combinar dos listas en una. Vamos a ver cada una de estas operaciones: Recorrido: La operación de recorrido consiste en visitar todos los elementos del arreglo por lo menos una vez. Procesamiento de cada elemento de la lista.3 Operaciones con arreglos. Ahora en el elemento 6 del arreglo Nombre contiene el valor Antonio. Búsqueda de la posición ocupada por un elemento con un determinado valor. Organizar los elementos de la lista de acuerdo con algún tipo de orden. Cuando se habla de lista en esta sección. Los algoritmos de la Figura 3. En la Figura 3. Pseudocódigo Inicio Para I:= LI hasta LS hacer Escribir Paises[I] Fin_Para Fin Diagrama de flujo Figura 3. Borrado. Eliminación de un elemento de la lista. Este arreglo cuenta con un límite inferior LI y un límite superior LS.Para asignar un valor a un elemento de un arreglo. Las operaciones que se suelen utilizar habitualmente sobre una estructura lineal son las siguientes: Recorrido. Ordenación. Adición de un nuevo elemento a la lista. Búsqueda. La variable I es la que va recorriendo el arreglo. podemos hacerlo de la siguiente forma: Nombre[6] := ‘Antonio’.5 se presenta el programa que realiza el recorrido del arreglo Paises partiendo de los algoritmos de la Figura 3.

I: Integer. i es la variable que controla en ciclo y Elemento es el elemento buscado. Figura 3. Los algoritmos de la Figura 3. Const LI=1..'Ecuador'.'México' .'Panamá'. Uses CRT. Readln. End.7 realizan una búsqueda. para entender estos algoritmos debemos tener claro que Dato es el nombre del arreglo. Búsqueda: En ciertas ocasiones es necesario saber si un elemento cualquiera está o no en un arreglo.6 Programa que rellena un arreglo con números aleatorios y los muestra. Writeln(Arr_num[i]). Var i: INTEGER. For I:=LI to LS do Writeln (Paises[I]).10] of INTEGER. LS=8.Program Recorrido. Begin Randomize. Begin CLRSCR. 64 . 'Hondura'). Uses CRT.LS] of String =( 'Cuba'. Var Arr_num: ARRAY [1. N es la cantidad de elementos que lo componen. End. { Muestra en pantalla el contenido del elemento I } Readln.5 Programa Recorrido. Program Rellena_Muestra. Estos algoritmos muestran la posición del elemento buscado las veces que esté.'Chile'.'Bolivia'. Figura 3. For i:=1 to 10 do begin Arr_num[i]:=Random(100)+1. end..6 un programa que rellena y muestra un arreglo de 10 elementos con números aleatorios comprendidos entre 1 y 100. A continuación se muestra en la Figura 3.'Venezuela'. Var Paises: ARRAY [LI.

10] of Integer =(34.7 Algoritmos Búsqueda. Estos algoritmos se utilizan para saber la posición que ocupa un elemento determinado.. el algoritmo anterior no es eficiente ya que el programa no realiza ninguna acción si el elemento buscado no está en lista. Elemento: INTEGER. end. End. donde asumimos que dicho elemento siempre aparece en el arreglo. es decir.74.21. Hay:Boolean. Program Buscar. Lug:=1. En la práctica nos percatamos que no siempre el elemento que se busca aparece en el arreglo. Figura 3. N. Write ('Entre el número a buscar: ').90. en el arreglo.60. end.87. Readln. 65 . Lug:=Lug+1. Writeln('En la posición '.34.Lug).41.Lug.10). El programa de la Figura 3. Uses CRT.Readln(Elemento). While Lug < 10 do begin If Dato[Lug]=Elemento Then begin Hay:=True.8 se encarga de validar estos pequeños detalles que en el mundo de la programación se le conoce como tratamiento de errores. If Hay = False Then Writeln('El elemento buscado no esta en la lista').8 Programa que realiza una búsqueda.Pseudocódigo Diagrama de flujo Inicio i=1 Mientras i <= N hacer Si Dato[i] = Elemento Entonces Escribir i Fin_Si i = i +1 Fin_Mientras Fin Figura 3. Var Dato: Array [1. Begin Hay:=False.I.33.

66 . For i:=2 to 7 do begin If NUM[i] >= mayor then begin Mayor := NUM[i]. posi_mayor.posi_menor:3). VAR i. posi_menor: INTEGER. Writeln ('').posi_mayor:3). end end. determina las posiciones del en las que se encuentran el valor máximo y el valor mínimo.9 Programa que muestra el valor mayor y el menor de un arreglo de números. pero que además muestre cuáles son estos valores. Program Mayor_Menor. Writeln ('El numero menor es: '. 45.68.10. 15 y 4) a al arreglo NUM. mayor.. { Buscamos el menor } Menor := NUM[1]. posi_mayor :=i.4). 68. Figura 3. menor.menor:3). end end. posi_menor := i. 99. For i:=2 to 7 do begin If NUM[i] <= menor then begin Menor := NUM[i]. si queremos insertar en un arreglo llamado Notas. Uses CRT. Writeln ('Su posición es: '.mayor:3). además la posición de cada uno de ellos.7] of INTEGER=(23. Inserción: A la hora de realizar una inserción de un elemento en un arreglo equivale a una simple asignación indicándole la posición en la que se quiere insertar.9 se muestra un programa que después de asignar los números (23. CONST NUM: ARRAY [1. Writeln ('Su posición es: '. 10. Writeln ('El número mayor es: '.En la Figura 3. Por ejemplo. el número 100 en la posición 5 se haría de la siguiente forma: Notas[5]:= 100. Begin { Buscamos el mayor } Mayor := NUM[1]. End.99.45.15. Readln.

La inserción se complica cuando tenemos un arreglo de 10 elementos (por citar un ejemplo), de ellos solo están ocupados 6 y queremos insertar el número 100 en la posición 3, de forma tal que los elementos que están en la posiciones 3, 4, 5 y 6 se trasladen una posición más arriba. Observe el ejemplo en la Figura 3.10. Arreglo Notas antes de la inserción 95 60 85 98 100 78
100

Arreglo Notas después de la inserción 95 60 100 85 98 100 78

Figura 3.10 Ejemplo de inserción en un arreglo. Como ves, luego de insertar el 100 en la posición Notas[3], los elementos se corrieron un elemento hacia la derecha. El algoritmo de la figura 3.11 les permite insertar un elemento en una posición determinada, donde Notas es el nombre del arreglo, N es la cantidad de elementos no vacíos que lo componen (6 en el ejemplo de la figura 3.10), K es la posición en la que queremos insertar el elemento, i es un controlador y Elemento es el nuevo dato que queremos insertar. Pseudocódigo Diagrama de flujo

Inicio I=N Mientras I >= K hacer Notas[I+1]=Notas[I] I =I-1 Fin_Mientras Notas[K]=Elemento N=N+1 Fin

Figura 3.11 Algoritmos Inserción. En el programa de la Figura 3.12 se muestra la operación de inserción mediante un arreglo conformado por nombres de personalidades de nuestra revolución. Cuando arranca el programa le asignamos siete nombres al arreglo Personalidades para que luego el usuario introduzca el nombre de alguna otra personalidad en la posición que desee. En el programa se explica que acción realiza cada operación.

67

Program Array_Insert; Uses CRT; var Personalidades: ARRAY [1..8] of String; N,I,K:Integer; Elemento: String; Begin Personalidades [1]:='Fidel Castro'; Personalidades [2]:='Raúl Castro'; Personalidades [3]:='Camilo Cienfuegos'; Personalidades [4]:='Ernesto Guevara'; Personalidades [5]:='Juan Almeida'; Personalidades [6]:='Celia Sánchez'; Personalidades [7]:='Magali Montané'; I:=1; N:=0; While Personalidades [I]<> '' do { Para tener la cantidad de } begin { elementos no vacíos del arreglo. } N:=N+1; I:=I+1; end; For I:=1 to n do {Para mostrar los elementos del arreglo.} Writeln(LA[I]); Writeln(''); Writeln('Para insertar un nombre de una personalidad al arreglo.'); Write('Entre el nombre de la personalidad: '); Readln(Elemento); {Almacena el nombre.} Writeln(''); Write('Entre la posición: ');Readln(K); {Almaceno la posición.} I:= N; While I >= K do {Mientras queden elementos por mover.} Begin {Traslado un elemento a la derecha.} Personalidades [I + 1]:= Personalidades [I]; I:=I-1; end; Personalidades [K]:=Elemento; { Asigno el nombre. } N:= N + 1; { Actualizo la cantidad de elementos.} For I:=1 to n do { Para mostrar los elementos del arreglo.} Writeln(Personalidades [I]); Readln; End. Figura 3.12 Programa inserción de un elemento.

68

Borrado: Al igual que en la inserción, a la hora de realizar el borrado de algún elemento en un arreglo implica que todos los elementos que le siguen a la derecha tienen que trasladarse un lugar a la izquierda. Esto que se explicó anteriormente hay que hacerlo por una de las características de los arreglos, me refiero al que son estructuras de datos secuenciales, o sea, que no pueden haber espacios intermedios en blanco. Observe la Figura 3.13. Arreglo Notas antes de la eliminación 95 60 100 85 98 100 78 Arreglo Notas después de la eliminación 95 100 85 98 100 78

Figura 3.13 Ejemplo de eliminación en un arreglo Como ves, luego de eliminar el 60 en la posición Notas[2], los elementos se corrieron una posición hacia la izquierda. El algoritmo de la Figura 3.14 les permite eliminar un elemento en una posición determinada. Donde Notas es el nombre del arreglo, N es la cantidad de elementos no vacíos que lo componen(7 en el ejemplo anterior), K es la posición del elemento que queremos eliminar, I es un controlador. Pseudocódigo Inicio Desde I := K hasta N hacer Notas[I]=Notas[I + 1] Fin_Desde Notas[N]:=0 N:= N - 1 Fin Figura 3.14 Algoritmo eliminación. El ejemplo de la Figura 3.15 utilizamos una lista de 7 nombres que están almacenados en un arreglo. Aquí se le muestra al usuario la lista y la opción de eliminar el elemento que desee mediante su posición. En este caso utilizamos un arreglo llamado LA que puede almacenar hasta 8 nombres. Mediante K eliminamos el elemento perteneciente a dicho valor. Diagrama de flujo

69

var LA: ARRAY [1.’. Writeln(''). While LA[I]<> '' do begin N:=N+1. N:=N-1. La primera consiste en ordenar todos los elementos de menor a mayor Figura 3.15 Programa eliminación. mientras que la segunda ordena los elementos de mayor a menor Figura 3.Descendente.8] of String.16 Formas de ordenar. end. Uses CRT. N. Write('Posición del elemento a borrar: '). Begin CLRSCR. LA[1]:='Rodiert'. B .Ascendente. Writeln('Para borrar un elemento de la lista'). Figura 3. LA[2]:='Reinier'.K:Integer.16 A. N:=0.Program Array_Eliminar. Ordenación: Cuando trabajamos con lista. 70 .LA[I]). LA[7]:='Bruno'.’. Readln. LA[3]:='Fernando'. LA[6]:='Yilian'. For I:=1 to n do Writeln(I. A .’..I. La ordenación puede ser de dos formas (Ascendente y Descendente). debemos conocer cómo ordenar dichas listas para cuando nos haga falta realizar esta operación tan utilizada en estos tipos de datos (estructurados).. Writeln('').. LA[4]:='Lázaro'. I:=I+1. For I:=1 to n do Writeln(I.Readln(K). ya sea tanto de números como de textos. A B 5 1 4 2 3 3 2 4 1 5 Figura 3. LA[5]:='Juan'.LA[I]). For I:=K to N do LA[I]:= LA[I + 1].16 B. I:=1. End.’.

Nombres[i]. Write(I.10] of String. Writeln('*** Escalafón del grupo ***').10] of Integer. i. de forma descendente. end. {fin del ordenamiento} {se muestran los resultados del ordenamiento} ClrScr. Figura 3.17 realiza una ordenación de un arreglo para mostrarlo en forma de escalafón. Uses CRT.. Notas[j]:=Notas[j +1]. AuxInt:Integer. end.i. Nombres[j +1]:=AuxStr. end. Nombres[j]:= Nombres[j +1]. Begin CLRSCR. Readln(Notas[i]).'. 71 . AuxStr:= Nombres[j]. {fin de la entrada de datos} For I:=1 to 10 do {comienzo a ordenar} begin For j:=1 to 10-I do begin If Notas[j]<Notas[j+1]Then begin {intercambio los valores} AuxInt:= Notas[j].. For i:=1 to 10 do begin J:=i+1. Var Notas : Array [1. Notas[j +1]:= AuxInt. Este programa pide al usuario 10 nombres con su nota en base a 100 y al final muestra un escalafón de ese grupo de estudiantes. j. Program Ordenar.j*2). Gotoxy(3. Readln. Write(Notas[i]).Nombres[i]).El programa de la figura 3. Write('Entre la nota de '. For i:=1 to 10 do {Almacena los nombre y las notas entradas} begin Write('Entre el nombre del alumno '. Writeln.'. {fin del intercambio} end.': '). Gotoxy(20. Writeln.17 Programa ordenación.j*2).': '). o sea. AuxStr:String. End. Nombres: Array [1. end. Readln(Nombres[i])..

Tenga en cuenta que la comparación se realiza a partir del arreglo Notas. var arr_num1. Figura 3.10). Ver ejemplo de la Figura 3.10] of integer. i: Integer. Write('Fila 10. uses crt.arr_num2:array [5.19 Ejemplo de programa que copia un arreglo en otro. Mezcla: Esta operación consiste en hacer una combinación entre dos a más arreglos teniendo en cuenta el objetivo que se quiera alcanzar. Figura 3. 72 .19 se presenta un programa que resuelve la siguiente situación problémica: “Escribir un programa en BP7 que rellene un arreglo con cinco números enteros consecutivos y haga una copia de ese arreglo en otro”. donde X representa la columna partiendo de izquierda a derecha y Y representa la fila partiendo de arriba hacia abajo. arr_num2[i]:=arr_num1[i].18 Ejemplo del uso del Gotoxy.En este programa luego de haber introducido los datos necesarios se comienza el ordenamiento. end. ya que lo que se quiere lograr es un escalafón. Begin Clrscr. A la hora de mostrar los resultados se utilizó la instrucción Gotoxy.Columna 20’). Readln. En la segunda iteración garantizamos que el valor mínimo de los restante elementos quede en el penúltimo y así sucesivamente hasta que todos los elementos de los arreglos queden ordenados de mayor a menor. 20). Gotoxy(20. For i:=5 to 10 do begin arr_num1[i]:=i. End. Muchas veces tenemos una lista de números y queremos almacenar hacer otra lista donde aparezcan todos los números que cumplan con una determinada condición. En la figura 3. Program posicion.. Write(‘Fila 20. Gotoxy(10. Uses crt. Columna 10'). garantizamos que quede el valor mínimo en el último elemento de los arreglos Nombres y Notas. End. Begin ClrScr. Program Copia. En la primera iteración del primer bucle For del ordenamiento.18. coloca el cursor en las coordenadas especificadas por X y Y. Readln. For i:=5 to 10 do Writeln (arr_num2[i]).

end. Inc(Cont). Program Mezcla.2). Cont:=1. end. Begin Clrscr.10] of Integer. end. Este borra todos los caracteres de la línea actual desde la posición del cursor hasta el final de la línea.21. Readln.20 cuenta con un programa ejemplo donde a partir de una lista de 10 números introducidos por el usuario.i+2). no satisface mi necesidad con respecto a lo que se puede hacer con esta operación. arr_num2:array [1. clreol. { fin de la entrada} For i:=1 to 10 do begin { Rellenar arr_num2 con los números pares de arr_num1} If arr_num1[i] mod 2 = 0 Then begin arr_num2[Cont]:= arr_num1[i]. Readln(arr_num1[i]). write(arr_num1[i]). 73 .i+2). end. for i:=1 to cont-1 do {contenido del arreglo 2} begin gotoxy(24.2). write(arr_num2[i]). Gotoxy(2. for i:=1 to 10 do {contenido del arreglo 1} begin gotoxy(5. End. CLREOL. gotoxy(2.20 Programa que utiliza el contenido de un arreglo para formar otro. end.Independientemente que en este ejemplo se muestra cómo es posible asignarle un elemento determinado de un arreglo a un elemento determinado de otro arreglo. For i:=1 to 10 do { Entran y se almacenan los números en arr_num1} begin Write('Entre un número: ').Cont: Integer. Ver el programa de la figura 3. Uses crt. var arr_num1. En este programa se utiliza una instrucción nueva. La figura 3. Figura 3. estos se almacenan en un arreglo y luego almacenamos en otro los números que cumplan con la condición de ser pares. { fin del relleno} Writeln('ARREGLO 1 ARREGLO 2').. I.

4 Arreglos de dos dimensiones. 3. ver figura 3.10] of String.22. clreol. uses crt.Program Borrar_Linea. tal es el caso de un mapa. Un arreglo multidimensional (Matriz) tiene una filosofía de trabajo bastante parecida a la de los arreglos unidimensionales.. como se había planteado al principio del capítulo también pueden definirse arreglos multidimensionales.. Es útil para un programa para almacén de departamento que tenga 20 sucursales. En este capítulo se observó que un arreglo unidimensional puede entenderse como una lista (que se mostraba como una columna de datos).22.1. Readln.y : integer.21 Ejemplo del uso de la instrucción CLREOL. Una matriz se pudiera imaginar como una tabla de datos.10. gotoxy(15. var x. Por ejemplo.15). la cual está compuesta por filas y columnas. que son muy utilizados en aplicaciones de BP7. podemos definir este arreglo de la siguiente forma: var Tabla : Array [1.22 Tabla de 10x10 que representa una matriz. Figura 3. La concepción de arreglo no se restringe sólo a los arreglos de una dimensión. un arreglo de estos es muy útil para describir un objeto que tenga físicamente dos dimensiones. cada una de las cuales vende 30 artículos. Partiendo del ejemplo de la figura 3. 74 . Como pueden apreciar en este programa se rellena la pantalla con el símbolo de # y luego se borra la línea 15 a partir de la posición 15. 1 2 3 4 5 6 7 8 9 10 1 2 ss jj 3 xx 4 5 yy 6 pp 7 8 zz 9 ii 10 qq Figura 3. un juego de damas o de ajedrez. Begin for x := 1 to 24 do for y := 1 to 80 do write('#'). End.

A continuación se resolverán dos problemas donde se tenga que aplicar por necesidad arreglos de dos dimensiones. End. end.7. por lo que se puede utilizar una matriz para darle solución a este problema.23 se muestra un programa que asigna en el momento de su declaración una serie de números a una matriz con datos fijos (declarada como una constante) y posteriormente la muestra haciendo un recorrido por cada uno de sus elementos. Writeln.6 75 .2. la primera dimensión ( el primer índice) podría referirse al número de la fila. j: integer.4.23 Recorrido de una matriz. En la figura 3.0) ). Con los conocimientos alcanzados en este capítulo podemos hacer de manera sencilla un recorrido de este tipo de arreglo.1.8. Historia y Español y a continuación muestre el promedio de cada alumno de la siguiente forma: Nombre Nombre1 Nombre2 Nombre3 Solución: Como pueden apreciar aquí hay datos que son del mismo tipo. Writeln.3 80.2.(1. Program Recorrido.7.4] nos estaríamos refiriendo al elemento que he marcado con "xx" y con Tabla[5. Ejemplo 1: Confeccione un programa que pida al usuario el nombre de tres estudiantes y sus notas en las asignaturas de Matemática. Begin CLRSCR. Figura 3. con Tabla[3. for i:=1 to 2 do begin for j:=1 to 6 do write (arr_num[i. Uses CRT.3.. Readln.Así.9.7] nos referiríamos al elemento marcado con "yy". Estos datos están organizados por tres filas y cuatro columnas. la segunda dimensión (el segundo índice) al número de columnas. var i. Matemática 100 80 70 Historia 90 80 100 Español 90 80 96 Promedio 93. j]:3). De esta forma.6.. const arr_num: array [1.0 88.6] of integer=( (3.0).

j]. 3: begin Write('Nota de Español: ').Program Promedio. j]).3. end. suma:= suma + Notas[i. Case j of 1: begin Write('Nota de Matemática: '). var Notas: array [1. 76 . For j:=1 to 4 do begin gotoxy(j*13. Writeln. j: integer. Writeln.i.Readln(Notas[i. Writeln('Nombre Matemática Historia Español For I:= 1 to 3 do begin gotoxy(1. suma:real.Readln(Notas[i. end.3] of String.': '). end. Writeln. end end. Readln. Readln(Nombres[i]). j]). Uses CRT. Notas[i. i.. 2: begin Write('Nota de Historia: ').4]:=suma / 3.. Promedio'). end.i+2).. Nombres: array[1. Write(Notas[I. suma:=0.i+2). j]). { Calcula el promedio } end. j]:0:1). Write(Nombres[i]). End. Clrscr. for j:=1 to 3 do begin Writeln. { Variable sumadora } end.4] of real. Begin for i:=1 to 3 do begin CLRSCR.1.Readln(Notas[i. Write('Entre el nombre '.

pos_max_j:3).12). (Matrices) .j].1]..1. 77 . end. Ordenada: Se puede determinar cuál es el primer elemento.pos_max_i. eso indica que debe determinarse cual será el número.Multidimensionales. Un arreglo se define como una colección finita.j] > val_max then begin val_max:=arr_num[i.45. (34. End.Ejemplo 2: Escribir un programa que determine la posición de la siguiente matriz en la que se encuentra el valor máximo.99. . (25.5 Resumen. etcétera).89) ). Writeln. const arr_num:array[1.3] of integer=( (23. ' Posición: '. Begin Clrscr. (Vectores) .y el enésimo elemento. for i:=1 to 3 do begin for j:=1 to 3 do begin if arr_num[i. Readln.68). pos_max_j:= j. pero nunca una combinación de ellos.pos_max_j:integer. pos_max_i:3. homogénea y ordenada de elementos. el segundo elemento.Bidimensionales. end. val_max:=arr_num[1. máximo de elementos que formarán parte del arreglo. val_max:3. Características de los arreglos: Finita: Tiene un límite. Homogéneo: Todos los elementos de un arreglo son del mismo tipo (todos enteros. uses crt.. end. pos_max_i:= i. Según la cantidad de dimensiones los arreglos se clasifican en: . Writeln('Valor máximo: '.j. todos boleanos.78. var i.. 23 45 68 34 99 12 25 78 89 Solución: Program Max_Valor.Unidimensionales.3.. el tercero. 3.val_max.

1. Eliminación de un elemento de la lista.Valor_Final] of Tipo de dato. b)___ Arreglo: Lista fija.9. Ordenación. Gotoxy: Coloca el cursor en las coordenadas especificadas por X y Y. Se puede definir un arreglo que almacene valores constantes.V_F] of Tipo de dato. homogénea y ordenada de elementos.6 Ejercicios de autoevaluación.. Inserción. Mezcla. Búsqueda. Para acceder a un elemento cualquiera de un arreglo se hace mediante el nombre del arreglo y el número del elemento a través el subíndice del mismo. Operaciones con arreglos: Recorrido. Var Nombre : Array [Valor_Inicial.2 Complete las oraciones siguientes: a) Los arreglos se clasifican en ______________ . V_Ini. esto es posible mediante la palabra reservada const. Procesamiento de cada elemento de la lista. Borrado. b) Todo arreglo tiene que ser ________.. Búsqueda de la posición ocupada por un elemento con un determinado valor. 1.7. c) ___ Arreglo: Colección finita. Estructura para definir un arreglo de dos dimensiones: Segunda dimensión Var Nombre : Array [V_Ini.V_F. donde X representa la columna partiendo de izquierda a derecha y Y representa la fila partiendo de arriba hacia abajo. Los arreglos se definen en la zona de declaraciones del programa. Clreol: Borra todos los caracteres de la línea actual desde la posición del cursor hasta el final de la línea.5] of integer= ( 3. Adición de un nuevo elemento a la lista. semejante y no ordenada de elementos. Combinar dos listas en una.. ordenado y __________ para poder definirse como tal. Organizar los elementos de la lista de acuerdo con algún tipo de orden.- Estructura general de un arreglo unidimensional. Primera dimensión 3. ejemplo: Const Arr_Const: array [1..6. 78 .8 ).1 Diga cuáles de las siguientes proposiciones cumplen la con definición de arreglo: a) ___ Arreglo: Conjunto de elementos entrelazados que permite almacenar datos de diferentes tipos. ______________ y ________________ por la cantidad de dimensiones que cuentan.

.3 El orden es 3.Ordenada..Recorrido... 1.Inserción. d) Almacenar qué estudiante de los 25 de un grupo es o no de la UJC. 3.7 ¿Qué hace la instrucción CLREOL? 3. ___ Adición de un nuevo elemento a la lista. c) Si. .6 Coloca el cursor en las coordenadas especificadas. 4. Homogéneo. determinarse cual será el número.Ordenación. mismo tipo de dato..Homogéneo.y el enésimo elemento. 1. Bidimensionales o Matrices y Multidimensionales. 5.. ___ Eliminación de un elemento de la lista.31] of Real.. 1.1.. máximo de elementos que formarán parte del arreglo. ___ Se puede determinar cuál es el primer 3.2000] of String.5 Declare un arreglo que reserve espacio para almacenar cada una de las siguientes situaciones: a) Los nombres de los estudiantes de un grupo de 25 alumnos.2 a) Unidimensionales o Vectores. elemento.. 1.6 ¿Qué hace la instrucción GOTOXY? 1. 2. b) Finito. ___ Combinar dos listas en una. 1.25] of String.4 Enlace la columna A con la B según corresponda referente a las operaciones con arreglos: Columna A Columna B ___ Búsqueda de la posición ocupada por un 1.Borrado. 1. pero nunca una combinación de ellos. 1. 6. 2 y 4. b) Las precipitaciones caídas en el mes de mayo. 1. ___ Procesamiento de cada elemento de la lista.25] of Boolean..4 El orden es 3.. b) Var Mayo : Array[1. ___ Todos los elementos de un arreglo son del 2. 1. 2 y 1.Mezcla. d) Var UJC : Array[1.7 Respuestas de ejercicios de autoevaluación. 6. el tercero. 79 . eso indica que debe 1.. el segundo elemento. ___ Organizar los elementos de la lista de acuerdo con algún tipo de orden.Búsqueda.5 a) Var Nombres : Array[1. c) Los nacimientos ocurridos en los años de 1959 al 2000..Finita.1 a) No. c) Var Nacim : Array[1959. b) No. elemento con un determinado valor. 5..3 Enlace la columna A con la B según corresponda referente a las características de los arreglos: Columna A Columna B ___ Tiene un límite. 1..

mostrar los estudiantes que han aportado más de $10. El programa ofrecerá el listado ordenado alfabéticamente del grupo.9 Escribir un programa que lea diez números.17 Escribir un programa que almacene en un array los números primos comprendidos entre 1 y 100. 1.22 En una lista se tiene los nombres y el aporte hecho a las MTT por los 20 estudiantes de un grupo.12 Escribir un programa que lea diez números. 80 . 1. los guarde en un arreglo y a continuación los ordene e imprima en de menor a mayor. determine las posiciones del array en las que se encuentran el máximo y el mínimo valor. -2. La palabra debe tener como máximo 15 caracteres.00 y el nombre del estudiante del mayor aporte realizado. a continuación los imprima en pantalla de la siguiente forma: 1 2 3 4 5 6 100 40 70 62 50 322 1. independientemente.14 Escribir un programa que solicite cinco números. 1. Confeccione un programa que pida diez números y muestre el modo de estos si es que lo tiene y en caso contrario muestre un mensaje.10 Escribir un programa que lea cinco números. 1. los almacene en un array y luego calcule la media aritmética de esos números.20 Realizar un programa que haga una lectura de 10 números enteros. 1.7 Borra todos los caracteres de la línea actual desde la posición del cursor hasta el final de la línea. 5.11 Escribir un programa que lea diez números.16 Escribir un programa en Pascal que tras entrar siete números y almacenarlos en un array. 1.15 Escribir un programa Pascal que tras asignar los números. 1.18 Escribir un programa que genera la inversa de una palabra.23 Escribir un programa que llene una matriz de 5 por 5 de valores aleatorios. los guarde en un arreglo y almacene en la última posición la suma de los elementos que componen el arreglo. 1. 1. no existe modo al igual que si ningún número se repite. 1. los guarde en un arreglo y a continuación los imprima en pantalla por su orden de entrada. 10. 8. la suma de los elementos positivos y negativos. Finalmente sacará ambas listas de números por la pantalla. La palabra original y la invertida deben almacenarse en array independientes.13 Escribir un programa que lea tres números y los guarde en un vector. Si varios números están repetidos con igual frecuencia máxima.21 Confeccione un programa que solicite los nombres y los dos apellidos de los estudiantes de un grupo con capacidad para veinte alumnos. -9. 1. A continuación los ordenará y guardará los valores ordenados en otro vector. A continuación el programa debe imprimirla por pantalla. los guarde en un arreglo y a continuación los imprima en pantalla en orden inverso. 15 y –4 a un array calcule.8 Ejercicios propuestos. 1. 1.1. 1. Calcular el aporte realizado por los estudiantes. 1.19 El modo de un arreglo de números es el número que más se repite en el arreglo. los almacene en un arreglo y calcule el factorial a cada uno de los números leídos almacenándolos en otro arreglo y a continuación los muestre.

los elementos positivos y negativos de la siguiente matriz: -12 23 32 45 -56 -10 25 78 89 1.1.25 Escribir un programa que determine la posición de la siguiente matriz en la que se encuentra el valor máximo y el valor mínimo.26 Escribir un programa que sume.24 Escribir un programa que pida un número entre 1 y 20 e imprima por pantalla su tabla de sumar. Por ejemplo si el número fuera el 3 la tabla debería ser: + 0 1 2 3 0 0 1 2 3 1 1 2 3 4 2 2 3 4 5 3 3 4 5 6 1. Además la suma total de todos los elementos de la matriz se almacenará en el elemento de la esquina inferior derecha de la matriz: 1 7 0 5 6 0 6 4 0 7 3 0 1 0 0 81 . independientemente. 15 55 67 31 89 13 28 74 99 1. el resultado de cada suma se almacenará en la última posición de la fila o columna correspondiente.27 Escribir un programa que sume los elementos de cada una de las filas y de las columnas de la siguiente matriz.

1 Registros. ◘ No se es superior porque se tenga inteligencia.8 Ejercicios de autoevaluación. sino porque se sabe emplearla. 4. • Utilizar operaciones con ficheros.6 Operaciones con ficheros. 4. definirlo.4 Ficheros. ◘ Confíe en sí mismo. • Caracterizar datos estructurados de tipo fichero.Capítulo 4 _____________________________________________________________ Registros y Ficheros _____________________________________________________________ Objetivos • Caracterizar datos estructurados de tipo registro.2 Definición de tipos de registros. procura ser un hombre de valores.7 Resumen. ◘ Es mejor consultar las cosas con la almohada a tiempo que perder el sueño por su culpa después.5 Constructor del tipo de dato file. 82 . 4. definirlo. Pensamientos ◘ No trates de convertirte en un hombre de éxito. referenciarlo e implementarlo en programas donde sea necesario su utilización.3 Arreglos de registros. Sinopsis 4. IlkA Chase. Usted sabe más de lo que cree. 4.. 4. Marcela Farías H.9 Respuestas de ejercicios de autoevaluación. • Definir arreglos de registros. 4. 4. 4. Albert Einstein.10 Ejercicios propuestos. Benjamín Spock. referenciarlo e implementarlo en programas donde sea necesario su utilización. Baltasar Garcián. 4. ◘ La mejor inversión de una moneda es una llamada telefónica al hombre que se necesite en el momento justo.

los campos en los que se subdivide el dato no son todos del mismo tipo.2 Ejemplo de un registro llamado Persona. En la figura 4. Estatura: Real.1 Registros. En la figura 4. NombreCampo1. NombreCampo2 : TipoDato2. Apellidos : String[30]. En esta estructura el programador da nombre al nuevo tipo de dato y a cada uno de los campos que lo componen. Type Persona = Record Nombre : String[15]. TipoDato2 y TipoDatoN son la especificación del tipo de dato que se va a almacenar en cada uno de los campos. hay casos en los que puede ser conveniente definir un tipo de variable para almacenar la información de una persona.2 Definición de tipos de registros. y especifica el tipo de dato que puede ocupar cada uno de los campos. Sexo : String[1]. Un registro es un tipo de dato definido por el programador en el que puede especificar su estructura interna. luego de crear nuestro registro. Como se puede apreciar. Peso: Real. 4. nombre es el identificador del registro. Edad: Integer. proporciona los datos tipo registro (records). Cuando se resuelven problemas mediante programas. End. Ujc: Boolean. el programador en muchas ocasiones suele encontrarse en situaciones en las que se quiere representar en un tipo de dato una información que posee estructura interna y son heterogénea. TipoDato1. Figura 4. End. Figura 4. En la figura 4. Por ejemplo. Para estos casos BP7. Type Nombre = Record NombreCampo1 : TipoDato1. Esta especificación puede pertenecer a un tipo de dato estándar del BP7 o cualquiera que se halla definido en el programa.1 Estructura para definir un registro. tenemos que declarar una variable con el tipo que acabamos de establecer.1 aparece una declaración de este tipo de estructura.4. NombreCampo2 y NombreCampoN son los campos que conforman al registro.2 hay una posible definición.1. NombreCampoN : TipoDatoN. es decir. 83 . Var Pers : Persona. como otros lenguajes de programación actuales.

Apellidos:=’Zayas Alzamora’.Pers.Ujc:=True. With Nombre Do begin Campo1. Sexo:=’M’.Peso:=68.Nombre). Pers.50. por citar un ejemplo.4 está la sintaxis de la estructura With. Pers. Además el BP7 cuenta con una estructura llamada With que permite acceder de manera más cómoda a los valores de los campos de los registros. end.4 Sintaxis de la estructura With. CampoN.3. La elección del uso de la estructura With se suele hacer en cada caso particular según la legibilidad que se requiera en el programa. Edad:=24. En la figura 4. Pers.3 Ejemplo para asignar valor a un registro. Pers. Pers. Pers. Figura 4. Figura 4. Ujc:=True. End.Apellidos).Pers.Nombre:=’Rodiert’. La figura 4. Por ejemplo.70. Si queremos mostrar los campos Nombre y Apellidos. Writeln(‘Apellidos: ’.Para referirnos a un campo de un registro se especifica mediante el nombre de la variable el nombre del campo unidos por un punto. se podrán haber escrito del siguiente modo: With Pers Do Begin Nombre:=’Rodiert’.50. las instrucciones de la figura 4. 84 .Edad:=24. Pers.70. Estatura:=1. donde nombre es la especificación de la variable (o las variables separadas por comas) del tipo Record y a continuación se hace referencia al nombre de los campos a los que queremos acceder.Estatura:=1. Campo2.Sexo:=’M’. solo se hace mediante las siguientes líneas: Writeln(‘Nombre: ’.3 muestra cómo podría continuar el ejemplo anterior asignándole datos a los campos del registro. Peso:=68. Apellidos:=’Zayas Alzamora’.

Readln(Est.nota:0:2).12.nacimiento. Program Ejemplo.nacimiento. Write('Presione ENTER para ver los resultados almacenados').nacimiento.5 aparece este programa.dia).. Writeln('Apellidos : '. ano : Integer . Writeln('Nota final del curso: '.ano). Writeln. Readln(Est.Est. End. Est. 85 .nota).apellidos). { Campo del tipo registro fecha } nota : Real. Writeln('Fecha de nacimiento : '.. Readln(Est.5 se puede aplicar para el caso de un solo alumno. Figura 4. End. Readln(Est. Type Fecha = Record { Registro para la fecha de nacimiento } mes : 1. En la figura 4. se puede crear una estructura en forma de arreglo cuyos elementos sean los registros definidos para almacenar la información de los alumnos.5 se le puede modificar algunas líneas y quedaría como se ve en la figura 4.Con lo que tenemos hasta ahora. ' . Write('Día de nacimiento: ').nacimiento. donde lo más lógico es ordenar los alumnos en una lista. Write('Año de nacimiento : ').6 y ya quedaría para un grupo de veinte alumnos.nombre). Para ello.'. apellidos : String. dia : 1. Write('Apellidos : '). nacimiento : Fecha. 4.ano). Var Est: Alumno.mes).nacimiento. Est.Est.apellidos). En el ejemplo de la figura 4. { Damos los datos al campo } Write('Nombre : ') . Uses CRT. ' . Alumno = Record { Registro Alumno } nombre : String. { Variable del tipo registro Alumno } Begin ClrScr.31.nacimiento. Readln(Est.'. End. podemos hacer un programa ejemplo donde se aparezcan los datos generales o parciales de un estudiante con su nota final del curso.Readln.nombre). Write('Mes de nacimiento: '). Write('Nota final del curso: ').5 Programa ejemplo para el uso de registros. pero existe la posibilidad de introducir una base de datos que contuviera información de los alumnos de un grupo.mes. Writeln('Nombre : '.Est.3 Arreglos de registros. Readln(Est. Est.dia. Readln. Al programa de la figura 4.

Program Ejemplo; Uses CRT; Type Fecha = Record { Registro para la fecha de nacimiento } mes : 1..12; dia : 1..31; ano : Integer ; End; Alumno = Record { Registro Alumno } nombre : String; apellidos : String; nacimiento : Fecha; { Campo del tipo registro fecha } nota : Real; End; Var Listado: Array[1..20] of Alumno; { Arreglo de tipo registro } i: Integer; Begin ClrScr; { Damos los datos al campo } For i:=1 to 20 do begin Writeln; Write('Nombre ’,i,’: ') ; Readln(Listado[i].nombre); Write('Apellidos: '); Readln(Listado[i].apellidos); Write('Año de nacimiento: '); Readln(Listado[i].nacimiento.ano); Write('Mes de nacimiento: '); Readln(Listado[i].nacimiento.mes); Write('Día de nacimiento: '); Readln(Listado[i].nacimiento.dia); Write('Nota final del curso: '); Readln(Listado[i].nota); ClrScr; end; Writeln; Write('Presione ENTER para ver los resultados almacenados'); Readln; Writeln; For i:=1 to 20 do begin Writeln(i,' Nombre: ', Listado[i].nombre); Writeln('Apellidos: ', Listado[i].apellidos); Writeln('Fecha de nacimiento: ', Listado[i].nacimiento.dia, ' - ', Listado[i].nacimiento.mes, ' - ', Listado[i].nacimiento.ano); Writeln('Nota final del curso: ', Listado[i].nota:0:2); Writeln; end; Readln; End. Figura 4.6 Arreglo de registros.

86

Posteriormente de estudiar todos estos tipos de datos definidos por el usuario debe estar mucho más claro el sentido de los conceptos tipo de dato y variable. Mediante las estructuras de registros y los arreglos el BP7 ofrece la posibilidad de definir tipos de datos muy próximos a los utilizados en el lenguaje natural y que son una organización precisa de tipos de datos más sencillos, ya que se parecen más a la realidad. 4.4 Ficheros.

Un fichero al igual que un arreglo, es otro tipo de dato estructurado. Constituye una colección de datos todos del mismo tipo. La diferencia principal de este y un arreglo, es que en un fichero puede almacenarse en un dispositivo de almacenamiento masivo de información, es decir que nos permite almacenar información permanentemente y acceder a ella cuando sea necesario. Muchas aplicaciones requieren de esta importante estructura. Los tipos de almacenamientos que vimos hasta ahora, pierden su valor cuando se cierra la aplicación. En general hay dos tipos de ficheros que pueden ser generados: ficheros permanentes y ficheros temporales. Los permanentes son los que se mantienen en un dispositivo de almacenamiento de memoria auxiliar y por tanto se pueden guardar después de completar la ejecución del programa. El contenido de estos ficheros pueden ser recuperados o modificados en cualquier momento, bien por el programa que creó al fichero o por cualquier otro programa que haga referencia a este. Estos ficheros se denominan en BP7 ficheros externos. Los ficheros temporales, son los que hemos vistos en capítulos anteriores, ya que son almacenados en la memoria principal de la computadora y el valor que se almacena se pierde tan pronto como se termina la ejecución del programa que creó el mismo, por ende, estos ficheros son menos útiles y menos comunes, se denominan ficheros internos. 4.5 Constructor del tipo de dato file.

La definición de un fichero realiza en la zona para declarar una variable, solo hay que indicarle que es de tipo fichero. La forma general de esta declaración está expresada en la figura 4.7. Var Nombre : File of tipo; Figura 4.7 Estructura general para definir un fichero. Aquí Nombre es un identificador que representa el nombre del fichero y tipo se refiere al tipo de datos de los componentes individuales del un fichero. Estos componentes han de ser todos del mismo tipo: simples o estructurados, pero no pueden ser datos de tipo fichero. Por lo que un fichero no puede estar incluido dentro de otro fichero. Ejemplos de Definición de ficheros: -El ejemplo siguiente es una definición de fichero en la que cada componente es un dato de tipo Integer:

87

Var Puntuacion: FILE of Integer; -Definición de fichero en la que cada componente es un arreglo real de una dimensión: TYPE Temp=array [1..100] of real; Var datos: FILE of Temp; -Definición de fichero donde sus componentes son registros: TYPE Color = (Blanco, Amarillo, Azul, Rozado); Habitacion = RECORD Costo: Real; Largo: Integer; Ancho: integer; Color_Hab: Color; End; Var Casa :FILE of Habitacion; -Ahora se muestra un ejemplo de definición de fichero en el que dos ficheros distintos tienen los mismos componentes de tipo registro: TYPE estado =(soltero, casado, divorciado); Persona=RECORD Nombre: ARRAY¨[1..80] of char; Sexo: char; Edad: integer; Estadocivil: estado; End; Usuarios = File of persona; Var usuarioviejo, usuarionuevo: Usuarios; Observar que la longitud del fichero nunca se especifica dentro de la definición de fichero. Como regla general, la longitud máxima de un fichero está determinada sólo por la capacidad física del medio en que se está almacenando. 4.6 Operaciones con ficheros.

Las operaciones que podemos hacer con ficheros son las de escritura, lectura y recorrido. Con el tipo de dato File se pueden direccionar las entradas y salidas de los programas a impresoras, dispositivos auxiliares y también a archivos. El procedimiento Assign permite asignar a una variable del tipo File la dirección del dispositivo de entrada o salida que el programador pretende utilizar. Este procedimiento tiene dos argumentos. El primero es el nombre de la variable definida del tipo File y el segundo es un dato tipo String que contiene el nombre con el que el sistema operativo identifica el fichero que se quiere utilizar, ver figura 4.8. Assign(Nom_Fichero,Var_String); Figura 4.8 Estructura del procedimiento Assign.

88

Esta orden implica la realización de tareas que dependen del tipo de dispositivo al que nos estamos refiriendo. Siempre que se acaba de transferir los datos del programa a un archivo hay que realizar esta tarea que va dirigida a liberar el archivo del control ejercido por el programa. Program Escritura.txt').Texto).9 se presenta un programa donde el usuario entra su nombre y este se almacena en un TXT con el nombre uno en el lugar donde está guardado el programa. { Preparamos al fichero para la escritura } {4} Write(almacen. { Cerramos el canal de comunicación } Readln. relacionados con las tareas que se realizan en un ordenador para transferir datos. Figura 4.9. en el programa de la figura 4. { Creamos un TXT con el nombre uno } {3} Rewrite(almacen). { Declaramos la variable que queremos almacenar } Begin {1} Writeln('Entre su nombre: '). Var almacen : File of string. En este se utiliza la instrucción Reset ya que el fichero existe y la operación que se va a realizar es de lectura. También se utiliza Reset para salida de datos a archivos que ya existen. Como es de suponer este programa lo que hace es mostrar en pantalla el nombre introducido por el usuario en el programa anterior. {Pedimos el nombre del usuario } Readln(Texto). Nota: En todo programa que se realiza una entrada o salida de datos a un dispositivo que no es el estándar se han de incluir las ordenes correspondientes a la asignación de dispositivo. { Escribimos en el TXT el valor de Texto } {5} Close(almacen). Close: Cierra el canal de comunicación abierto anteriormente con el procedimiento Reset o Rewrite.10 se muestra cómo se usa esta instrucción haciendo referencia al TXT que creamos en el programa de la figura 4. inicialización y cierre.'uno. En el programa Escritura también aparecen dos instrucciones de tipo procedimiento: ReWrite y Close. End.En la figura 4. En el caso de archivos se ha de proceder a crear el archivo. { Definimos el fichero } Texto : String. La lectura de los datos se realiza con la instrucción ya conocida por ustedes Read. Cuando el dispositivo se va a utilizar como entrada de datos.9 Programa escritura de datos en un TXT. 89 . ReWrite: Especifica que el dispositivo identificado con almacen se va a utilizar para salida de datos. { Lo almacenamos en Texto} {2} Assign(almacen. las inicializaciones necesarias se realizan con la instrucción Reset.

Alumno = Record nombre : String. Begin nomArchi:= 'Archi. end.'uno. Type Fecha = Record mes: 1 . Carpeta: file of alumno. 12.10 Programa Lectura que utiliza la instrucción Read.txt'). La función Eof es del tipo Boolean que devuelve el valor True si se a alcanzado el fin del fichero al que apunta su argumento.. Read(almacen.Texto).11. Var alum: array[1. I:Integer. En este programa se utiliza la función Eof que tiene como argumento la variable del tipo File carpeta. el mantenimiento de dicha base de datos para que sea más eficiente podrá ser del modo que aparece en la figura 4.. End. dia: 1 . en el problema esbozado en la sección anterior sobre una base de datos con información sobre los alumnos. Writeln(Texto). ano: Integer. Clrscr.20] of alumno. Var almacen : File of string. La función se utiliza en el programa Base_Datos para recorrer todo el archivo hasta el final y después añadir el nuevo registro. 31. Uses CRT. {Continúa} 90 .. apellidos : String. nacimiento : Fecha. Texto:String. end. Reset(almacen). Begin Assign(almacen. Por ejemplo.txt.txt'. Listado: alumno. Aquí los datos introducidos no se pierden al cerrar el programa ya que estos son almacenados en fichero de texto llamado Archi.Program Lectura. nota : Real. Close(almacen). Figura 4. Readln. Program Base_Datos. nomArchi: String.

with nacimiento do begin writeln ('Fecha de Nac. Write('Nombre '. 91 .' '. Clrscr. Readln(ano). Write('Mes de nacimiento: ').ano:= ano. Writeln. Alum[i].listado). with nacimiento do begin Write('Año de nacimiento: '). end. Alum[i].ano).' . Readln(dia).dia. nacimiento. write('Presione Enter para ver los resultados '). apellidos:= apellidos. Alum[i]. rewrite(carpeta).nota:= nota. Write('Día de nacimiento: ').Readln. Readln(nombre).nota:0:2).nacimiento. Assign(carpeta. Readln(nota).11 Programa para almacenar datos en un fichero y luego mostrarlos en pantalla. Alum[i]. Writeln.'.mes. close(carpeta). Clrscr.nacimiento.apellidos). writeln. for i:=1 to 20 do write(carpeta. end.: '. End. end.nomArchi).mes:= mes. end. Write('Nota final del curso: '). Alum[i].i.' .nombre.alum[i]). Alum[i]. reset(Carpeta).for i:=1 to 20 do begin with Listado do begin writeln. while not eof(Carpeta) do begin read(carpeta. end.nombre:= nombre. end. Readln(apellidos). Readln(mes). writeln ('Nota final: '. Write('Apellidos: ').'. close(carpeta). Figura 4.': ') . dia:= dia. with listado do begin writeln ('Nombre y Apellidos: '. readln.

Es una colección de datos todos del mismo tipo que permite almacenar información permanentemente y acceder a ella cuando sea necesario. CampoN. With Nombre Do begin Campo1. Estructura para definir un registro. NombreCampo2 : TipoDato2. NombreCampoN : TipoDatoN. Type Nombre = Record NombreCampo1 : TipoDato1. End.20] of Fecha. Campo2. End.Nombre_Campo With: Estructura que permite acceder de manera más cómoda a los valores de los campos de los registros. Un registro es una estructura de datos en la cual se puede almacenar una colección de datos cuyos tipos pueden ser distintos.31. ano : Integer .7 Resumen. Var Nacimiento: Array[1. Sintaxis de la estructura With. File: Estructura de datos que nos permite guardar un fichero de datos en disco para no perderlos después de ejecutar el programa. dia : 1. Para crear un arreglo de registros primero se define el registro y luego se hace el arreglo y se especifica que el tipo de dato es el registro definido. bien por el programa que creó al fichero o por cualquier otro programa que haga referencia a este. Estos ficheros se denominan ficheros externos. La definición de un registro se realiza en la zona de declaraciones del programa. { Arreglo de tipo registro } Fichero: Tipo de dato estructurado parecido a un arreglo. Ejemplo: Nombre_Registro.4. end.12. Para referirnos a un campo de un registro se especifica mediante el nombre de la variable y el nombre del campo unidos por un punto... 92 . Los arreglos de registros son estructuras cuyos elementos del arreglo estén formados por registros definidos para almacenar información.. Ejemplo: Type Fecha = Record mes : 1. Ficheros permanentes: El contenido de estos ficheros pueden ser recuperados o modificados en cualquier momento.

Reset: Instrucción que se utiliza cuando se va a realizar un entrada de datos. Estructura general para definir un fichero. En el caso de archivos se ha de proceder a crear el archivo. 1. b) Hay dos tipos de ficheros que pueden ser generados. Sala y Número de Cama.1.4 Utilizando la estructura With realice una asignación a cada campo del inciso c del ejercicio 1. 1. Assign: Procedimiento que permite asignar a una variable del tipo File la dirección del dispositivo de entrada o salida. Eof: Función del tipo Boolean que devuelve el valor True si se a alcanzado el fin del fichero al que apunta su argumento. Close: Cierra el canal de comunicación abierto con el procedimiento Reset o Rewrite. estos ficheros son menos útiles aunque no dejan de ser aprovechados.1. 1. Assign(Nom_Fichero. ReWrite: Especifica que el dispositivo identificado como parámetro se va a utilizar para salida de datos. 1. También se utiliza Reset para salida de datos a archivos que ya existen. Var Nombre : File of tipo.6 Complete las siguientes oraciones relacionado con los ficheros: a) Se llama __________ a una colección de datos todos del mismo tipo que permite almacenar información permanentemente y acceder a ella cuando sea necesario. 4.Var_String).8 Ejercicios de autoevaluación. Este prepara al archivo para la escritura. 1. Naranjas y Piñas que se guarda en un almacén de frutas. Edad. se denominan ficheros internos. Toronjas. por ende. 93 .1 Defina un registro para cada una de las situaciones siguientes: a) Almacenar los resultados de los tres trabajos de control de la asignatura de matemática. Siempre que se acaba de transferir los datos del programa a un archivo hay que realizar esta tarea que va dirigida a liberar el archivo del control ejercido por el programa.Ficheros temporales: Son los datos que son almacenados en la memoria principal de la computadora y el valor que se almacena se pierde tan pronto como se termina la ejecución del programa que creó el mismo. Sexo. Estructura del procedimiento Assign.5 Defina un arreglo cuyos 10 elementos estén conformado por un registro llamado libros con los campos Título y Autor.2 realice una asignación con un valor válido para el campo Naranjas del inciso b y para el campo Sala del inciso c del ejercicio 1.3 Partiendo de las declaraciones hechas por usted en del ejercicio 1. 1.2 Declare una variable para cada uno de los registros definidos en el ejercicio anterior. estos son los ficheros ____________ y ficheros _____________. Apellidos. b) Almacenar la cantidad de Mango. c) Los datos de un persona ingresada en un hospital cuyos datos son: Nombre.

1. Close(DirAlm). d) El contenido de los ficheros ____________pueden ser recuperados o modificados en cualquier momento. ___ Instrucción que se utiliza cuando 5..txt'). 1. ___ Función del tipo Boolean que devuelve el valor True si se a 4. Texto:= ’REVOLUCIÓN’. DirAlm : File of String.Close alcanzado el fin del fichero al que apunta su argumento.c) Los ficheros ____________ almacenan los datos en la memoria principal de la computadora y el valor almacenado se pierde tan pronto como se termina la ejecución del programa.Eof se va a realizar un entrada de datos.Reset dirección del dispositivo de entrada o salida. Readln. Rewrite(DirAlm).Texto). End.'Dato. ___ Cierra el canal de comunicación 2.. Var Begin Write(DirAlm. También se conocen como ficheros __________. Texto: String.Assign identificado como parámetro se va a utilizar para salida de datos.ReWrite abierto con el procedimiento Reset o Rewrite...8 Organice el programa siguiente teniendo en cuenta que tiene como objetivo el de almacenar en un TXT el texto REVOLUCIÓN: Program Escritura. Assign(DirAlm. 1.. ___ Procedimiento que permite asignar a una variable del tipo File la 3. Estos ficheros también se conocen como ficheros __________.7 Enlace según corresponda la columna A con la B: Columna A Columna B ___ Especifica que el dispositivo 1.9 Organice el programa siguiente teniendo en cuenta que tiene como objetivo leer dato de un TXT ya existente y mostrarlo en pantalla: 94 .

Edad: Integer. Sala: String. Toronjas: Integer. 1.T).Sala:= ‘3B’.9 1. Sala:= ‘3B’. 1. Sexo:= ‘M’.3 Inciso a: Frut. b) Permanentes.Program Lectura. Cama: Integer. c) Temporales.T). end. Read(Contenedor. 1. 95 . Var T:String. Begin Writeln(‘El texto encontrado es: ’. Autor: String. End. Inciso b: Ingreso. 4. a) Type Mat = Record PrimTCont : Real. Contenedor: File of String. end.6 a) Fichero. Inciso c Var Ingreso: Paciente. Reset(Contenedor).'Dato. SengTCont : Real. Externos. Internos.4. c) Type Paciente = Record Nombre: String. d) Permanentes. Edad:= 24. Apellidos:= ‘Escobar Santiesteban’. Naranjas: Integer.txt').2 Inciso a Var Asig: Mat. Assign(Contenedor. TercTCont : Real. 1. End.7 Columna B: 2. End. Close(Contenedor). Sexo: String[1]. 1.5 Type Libros record Titulo: String. Temporales. Var CantLib: Array[] of Libros.4 With Paciente do begin Nombre:=’Reinier’. Piñas: Integer. Inciso b Var Frut: Frutas. Readln. Apellidos: String. End. 1.Naranjas:=77. b) Type Frutas = Record Mango: Integer. 5 y 3. Cama:= 5. 1.1 Respuestas de ejercicios de autoevaluación.

apellidos e índice académico. Var Contenedor: File of String. 4.T).9 Program Lectura.8 Program Escritura. • Obtenga el porcentaje de trabajadores cuyo salario supera el promedio. El programa pide los datos necesarios y a continuación muestra un listado de los estudiantes que tienen al menos un trabajo práctico suspenso. Begin Texto:= ’REVOLUCIÓN’. • Obtenga el total de dinero a pagar por la empresa. Var DirAlm : File of String. Texto: String.'Dato. Seguidamente de entrados los datos se desea obtener un listado ordenado por índice académico de forma descendente.10 Definir un dato Alumno de tipo registro que contenga: nombre.txt'). • Obtenga el promedio del total a pagar con respecto a los trabajadores. apellidos. 1.Texto). Assign(DirAlm. Readln. 96 .13 Elabore un programa que permita entrar los datos de 20 de trabajadores: nombre. 1. Read(Contenedor. 1. edad y su promedio general. Close(DirAlm). Rewrite(DirAlm).'Dato. Write(DirAlm. 1. Reset(Contenedor). T:String.txt'). Begin Assign(Contenedor. End. • Mostrar cobro del mes trabajado con relación a la cantidad de ausencias en el mes (24 días laborables). apellidos y las notas de los cuatro trabajos prácticos en la asignatura de LTP.10 Ejercicios propuestos. End. Readln. apellidos.12 Realice un programa que permita entrar los siguientes datos de un grupo 15 de alumnos: nombre. salario básico y la cantidad de ausencias en el mes. Close(Contenedor).T). Writeln(‘El texto encontrado es: ’.11 Realice un programa que permita entrar los siguientes datos de un grupo n de alumnos: nombre.1. 1.

carne de identidad y sexo.1. 1. primer apellido. 1. apellidos. b.19 Realice un programa donde el programa almacene en un fichero una contraseña. edad y sexo.14 Se desea guardar en memoria un listado que contenga la información de los nueve bateadores regulares un equipo de béisbol. Después de entrado estos datos. el número de identidad. el teléfono en caso que lo posean y además si son del PCC. juegos jugados y cantidad de juegos ganados. Después de entrado estos datos. apellidos. Si se sabe la contraseña y logra entrar.17 Elabore un programa que permita entrar los siguientes datos de un grupo de alumnos y guardarlos en un fichero. se desea obtener una sublista ordenada en forma descendente por el average de cada equipo.16 Confeccione un programa que almacene en un arreglo de registro los datos personales de los 10 trabajadores de un departamento como son: nombre. Realice un grupo de instrucciones que lea los datos del fichero y devuelva la cantidad de trabajadores que no tienen teléfono particular. el sexo. 1. veces al bate y cantidad de hit conectados. c. Fórmula para calcular el average: Ave = Juegos ganados / Juegos jugados * 1000. Al ejecutarse el programa se pide que se introduzca la contraseña para poder entrar a trabajar. Nombre. Los datos que se necesitan son: nombre del equipo. edad. d. Almacene los anteriores datos en un fichero. Agregue la posibilidad de que el usuario pueda ver o no los datos almacenados. se conoce el nombre completo. 1. 1. Agregue la posibilidad de que el programa lea los datos del fichero y devuelva los datos de un trabajador dado identificado. segundo apellido. 97 .15 Realice un programa que guarde en memoria un listado que contenga la siguiente información de los 16 equipos de béisbol cubano. Se dan cinco oportunidades para poner la contraseña correcta y si no se la sabe en estos intentos el programa se cerrará. el usuario tendrá la posibilidad de modificar la contraseña y esa nueva es la que quedará almacenada en el fichero. se desea obtener una sublista ordenada en forma descendente por el average de cada pelotero. se lleva un control estricto de cada uno de sus trabajadores. Realice un grupo de instrucciones que lea los datos del fichero y muestre en pantalla los trabajadores que pertenecen a la UJC. Fórmula para calcular el average: Ave = Cantidad de hit / veces al bate * 1000. número de uniforme.18 En la fábrica de refresco de la Isla de la Juventud. del la UJC o no pertenecen a ninguna de las dos. a. Los datos que se necesitan son: nombre.

5. 5. día a día. Estructura de una función. 5.6 Ejemplos de funciones creadas por el programador. Rousseau. 5. J. Pensamientos ◘ La precisión en el objetivo es el punto de partida para cualquier triunfo. ◘ La perfección no existe.3 Paso de parámetro por valor y por referencia. Funciones recursivas. Sinopsis 5. a través de procedimientos con vista a desarrollar buenos hábitos de la programación. Ventajas. así como la vejez es el tiempo de practicarla. J. • Definir e Implementar funciones.7 Recursividad. Anatole France. pues el cambio es la esencia de la vida. 5. ◘ Nunca se debe perder tiempo en vanos lamentos por el pasado ni en quejas por los cambios que nos incomodan. 98 . ◘ La juventud es el tiempo de estudiar la sabiduría. 5.4 Ejemplos de procedimientos creados por el programador.8 Resumen.5 Funciones.9 Ejercicios de autoevaluación. • Definir e implementar módulos.Capítulo 5 _____________________________________________________________ Modularidad _____________________________________________________________ Objetivos • Caracterizar el principio de la modularidad. Estructura de un procedimiento. ◘ Así que. alcanzaríamos la excelencia. 5.11 Respuestas de ejercicios de autoevaluación. 5. importancia de su utilización. sigo mi camino. 5. 5.2 Procedimientos. Emily Dickinson. • Pasar parámetros por valor y por referencia. Clement Stone. Pero si la buscamos.12 Ejercicios propuestos.1 Principios de modularidad. Vince Lombarda. • Comprender cómo escribir y utilizar funciones que se llamen a sí mismas (Recursividad). en lugar de pensar en alcanzar el cielo algún día.

Estructura de un procedimiento.1 Principios de modularidad. resolver problemas mediante la modularidad. 99 . En este capítulo te dotarás de los conocimientos necesarios para la construcción de procedimientos y funciones. es muy común. Con las estructuras vistas hasta ahora del BP7 se pueden construir programas que realizan tareas muy complejas pero con escasa legibilidad por su tamaño en cuanto a líneas de código. Un procedimiento es una sección de código separada del programa principal que realiza una acción y no devuelve valor alguno. A esta estrategia se lo conoce con el nombre “Divide y Vencerás”. en la figura 5.5. 5. y además muy efectivo. lo debemos hacer en la zona de declaraciones. Recuerden que para crear un procedimientos. En algunas ocasiones usamos procedimientos que ya vienen con el lenguaje. al igual que en otras ciencias. Ventajas. ClrEol ClrScr Sound TextColor Delay GotoXY NoSound TextBackground Figura 5.Down: procedimientos (Procedure) y funciones (Function). En la informática.1 se muestran algunos procedimientos predefinidos en BP7. independientemente de los comentarios que se colocan en algunas líneas para hacer más claro el programa. Nosotros también podemos crear los nuestros.2 Procedimientos. en la figura 5. Generalmente se les conoce a estos como subprogramas. también se le conoce con el nombre de subrutina. Este proceso consiste en tomar un problema convertirlo en una serie de problemas más sencillos y resolver después cada uno de ellos. La sintaxis con la que se especifican estos procedimientos es similar a la estructura de un programa en BP7 pero se usa la palabra reservada Procedure para indicar que se trata de un procedimiento parcial.2 aparece la estructura general para definir un procedimiento. Desde el punto de vista de la legibilidad es deseable que un programa de ordenador pueda estructurarse siguiendo lo más posible el esquema conceptual que se ha pensado utilizar para resolver el problema. BP7 brinda dos herramientas básicas para realizar programación descendente o Top . BP7 agrega además el concepto de unidad (Unit).1 Ejemplos de procedimientos predefinidos. Un subprograma es un conjunto de sentencias de un programa que realizan una determinada tarea y que pueden ser ejecutadas desde más de un punto del programa principal. que permite aprovechar módulos independientes ya compilados donde aparecen un conjunto de subprogramas que le facilitan al programador el no tener que hacer subprogramas que ya existen. estructuras básicas en la programación modular.

confecciones un programa que muestre en pantalla los nombres de los estudiantes que tengan más de 90 puntos.Lista de parámetros. Figura 5. Figura 5.Fin del procedimiento.. PROCEDURE Titulo. Al uso de un procedimiento se le conoce como llamada al procedimiento.Inicio del procedimiento. 4. Writeln.Cuerpo del procedimiento. 100 . 5. {Llama al procedimiento} Readln. 2.2 Partes de un procedimiento para su declaración.Partes 1. BEGIN WriteLn (‘**Bienvenido a la Modularidad**’).. El problema que les mostraremos a continuación será resuelto mediante la programación modular con el objetivo de que vean la organización que muestra esta forma de programar.. Problema: Dado los nombres y las notas de un grupo de N estudiantes.Palabra clave del procedimiento.. END..3 Creación y llamada del procedimiento Titulo. El programa de la figura 5. Ya cuando se a declarado el procedimiento es posible emplearlo como una instrucción de BP7. Uses Crt. 3. {Creación del procedimiento} begin Writeln (‘**BIENVENIDO A LA MODULARIDAD**’)..3 ilustra el uso o la llamada al procedimiento creado anteriormente Program Procedimientos. End. Titulo.Nombre del procedimiento. Begin Writeln ('Programa ejemplo del uso de procedimientos'). Procedure titulo. A continuación se vamos a crear un procedimiento que imprima en pantalla una “**Bienvenido a la Modularidad**”. 6. end.

begin Writeln('Presione ENTER para ver los resultados. Readln(Nota[i]).100] of Real. Gotoxy(15. N. For i:= 1 to N do begin Write('Nombre '.Nomb[i]). Writeln('Resultados'). INC(j).100] of String.. } End. Readln. end. CLRSCR. Begin Entrada. For I:=1 to N do begin if nota[i] >90 Then begin Write(j.Write('. i: Integer. Procedure Entrada. CLRSCR. end. { las llamadas a los procedimientos. Readln.'. Readln(N). For i:=1 to 5 do begin Write(' ..': '). CLRSCR.'. j. Readln(Nomb[i]). 101 . Writeln('Estudiantes con más de 90 puntos:'). Write('Nota de '. Writeln. Nota:array[1. Write('Buscando notas mayores que 90'). Delay(1000).j+2). end.Nota[i]:0:2). Var Nomb: array[1. Write('Entre la cantidad de estudiantes del grupo: '). j:=1.Nomb[i].'.i.': '). Uses CRT. { Parte del programa donde se realizan } Salida. Procedure Salida. {Procedimiento para entrada de datos} begin CLRSCR. end.. Writeln.. end. ').').. end.Program Notas.

4 se realiza un procedimiento que calcula el área de un círculo. if (radiocirc > 0) then begin areacirculo(radiocirc. Begin clrscr. var radiocirc.3 Paso de parámetro por valor y por referencia. resultado: real. {radiocirc se corresponde con radio y resultado con area} gotoxy(20. writeln('el área del círculo es: '. Procedure areacirculo (radio:real. readln. Program area_circ. o mejor dicho. Los parámetro puede ser pasados por valor o por referencia en esta sección se resolverán problemas donde se ejemplifique el uso de esto tipos de parámetros. donde se pasa como parámetros Radio y Area. End. readln(radiocirc).'). uses crt. o simplemente texto.14. writeln. write('introduzca el radio del círculo: '). El primero es un parámetro por valor ya que este es utilizado solo para el cálculo pero su valor no cambia durante el proceso.var area: real). resultado). En el programa de la figura 5. end. uno de los objetivos fundamentales de la programación modular es el de no repetir líneas de código. Como se ha explicado hasta ahora. una fecha. Un parámetro es una variable que puede ser un número. un nombre de archivo. Figura 5. cualquier cosa que personalice el funcionamiento de un programa. begin area := pi * sqr(radio). BP7 brinda la solución de estos problemas mediante la fabricación de procedimientos utilizando la lista de parámetros. 102 .4 Ejemplo de paso por valor y por referencia.5). writeln.resultado:8:2). en fin. end else write('no puede introducir un radio negativo. mientras que el segundo es un parámetro por referencia (o dirección como también se le conoce) porque el contenido cambia. códigos que realicen la misma operación aunque con diferentes variable.5. const pi = 3.

Program Referencia. End.Como pueden apreciar cuando el parámetro que se pasa al procedimiento no se indica con la palabra reservada Var este pasa por valor. En el programa de la figura 5. como aparece en la figura 5. begin Writeln. end. Begin Entrada. B: Integer).X). Figura 5. Salida. el 103 . Todo lo contrario ocurre cuando se quiere pasar un parámetro por referencia. A:= B. Uses CRT. Procedure Intercambio(Var A.5 Procedimiento Intercambio(Parámetros por referencia). Y: Integer.4. Writeln('Entre el valor de X: '). begin ClrScr. si el parámetro se definió como un entero. Intercambio(X. Readln. B:= Z. Procedure Entrada. end. Procedure Salida. Var X.').Y).Readln(X). Writeln('Entre el valor de Y: '). en otras palabras. Las variables X y Y son globales. Writeln('Se intercambiaron los valores de X y Y. Nota: La lista de parámetros que se le pasan a un procedimiento deben corresponder con el tipo de dato con el se definió el parámetro en su declaración. estas si se pueden utilizar en cualquier parte del programa.Readln(Y). La variable Z de este procedimiento es local y por lo tanto solo se puede utilizar en este procedimiento. end.5 aparece un ejemplo donde los dos parámetros que se pasan en el procedimiento Intercambio son por referencia. Este procedimiento que acabamos de ver (Intercambio) se puede aplicar cuando queremos organizar una lista de números como la que vimos en capítulos anteriores donde se mostraba un escalafón de un grupo de alumnos. begin Z:= A. Writeln('Valor de X: '. este debe ser inicializado con la palabra reservada var. Writeln('Valor de Y: '. Var Z: Integer. Y).

fin:boolean.’ + ’. end. Writeln. El procedimiento hace que N1 y N2 nunca sean iguales utilizando un bucle. if j=1 then write(i:2). de otra forma generará un error de ejecución. 5. end. begin Randomize. Repeat N2:= Random(P)+1. Ejemplo 2: Procedimiento que obtiene los factores primos de un número positivo. Esto les permitirá ejercitar el uso de los procedimiento en un programa. Procedure Generar(P: Integer. while (i>1) and (not fin) do begin if (i mod j)=0 then fin:=true. end. Ejemplo 1: Procedimiento que genere dos números aleatorios entre 1 y P para ser sumados. Until N1 <> N2. donde P es un parámetro por valor. 104 .N2). Var N1. Writeln(N1.4 Ejemplos de procedimientos creados por el programador. N2: Integer).j:integer. N1 y N2 son parámetros por referencia. end. N1:= Random(P)+1.dato permisible es un número entero. Los ejemplos que aparecen a continuación deben ser llevados a un programa. end. For i:=n downto 1 do begin if (n mod i)=0 then begin fin:=false. begin Writeln('Los factores primos de '. j:=j-1. j:=i-1. ya que aquí solo se plantea la situación problémica y la posible solución mediante procedimiento.' son: ').n. var i. Procedure Factores(n:integer).

M.18 * Dolares. segundos y centésimas. Nota: Para usar estas funciones debe ser declarada la unidad DOS en la lista Uses.Nombre de la función.Palabra clave de la función. ORD RNADOM RAUND SQR LENGTH COPY POS COS SQRT SIN UPCASE TRUNC Figura 5. donde el lunes(1) y así hasta el domingo(7).PesosC:4:2 ). ejemplo de estas son las recientes GETTIME y GETDATE. Var PesosC: Real.'-'. Estructura de una función. A. 4.Ejemplo 3: Procedimiento que realiza la conversión de moneda de dólares de Norteamericanos a pesos convertibles Cubanos y pida muestre la fecha para saber el día que se realizó el cambio. La función GETTIME devuelve el tiempo en hora. 7. Pruebe esta última función. día y el número de día de la semana. S: Word.S). tienen que ser de tipo Word. M. puede que le haga falta en algún programa.Fin de la función. GetDate(A. has utilizado funciones predefinidas por el lenguaje. Figura 5. Aquí se utiliza la función GETDATE. 3. que es una de las herramienta de programación más utilizadas por los programadores. esta devuelve el año.Inicio de la función. 5. Recuerden que por cada dólar Norteamericanos se descuenta un 18 %. begin PesosC:= Dolares . D. Siempre que se va a definir una función.Tipo de devolución. En este ejemplo solo se muestra el día.Cuerpo de la función. el mes y el año porque es lo que se pide.7 Estructura de una función para su declaración. mes. 5.M.A).6 Ejemplos de funciones predefinidas del BP7. 105 . 6. En la figura 5. Una función no son más que una sección de código separada del programa principal que realiza una acción y devuelve un valor.D. Writeln('Fecha de Cambio: '. lo debemos hacer en la zona de declaraciones del programa. En el transcurso de este libro.'-'.Lista de parámetros.5 Funciones. minutos. 2. En este epígrafe vamos a crear nuestras propias funciones. Estos datos los almacena en las variables declaradas con ese objetivo.6.D.0. Writeln( 'Cantidad de Pesos Convertibles: '. Procedure convertir(Dolares: Integer). end. otras funciones aparecen expuestas en la figura 5.7 está expresada la estructura para definir una función. 1.

Para invocar la función se procede de la misma forma que para un procedimiento. aquí no es posible. Vamos a ver cómo quedaría un función que sume dos números cualquiera. Begin ClrScr.6 Ejemplos de funciones creadas por el programador. begin Suma := Numero1 + Numero2. Write('La Suma es: '. Writeln. readln. Con todo esto podemos hacer un función que convierta una cadena de N caracteres. Program Funcion_Suma. Var N1. Function Suma(Numero1. Pero con UPCASE podemos convertir toda la cadena.9 muestra la continuación de la figura 5. donde se le pasa como parámetros dos números enteros y devuelve un entero. Esto lo podemos hacer con un ciclo que valla desde el primer carácter hasta el último. En la figura 5. end. Figura 5. Se escribe el nombre de la función a la que se quiere invocar y entre paréntesis se colocan los parámetros que exige esta función. Ejemplo 1: BP7 cuenta con la función UPCASE que devuelve al carácter pasado como parámetro en mayúscula. pero y si queremos convertir toda una cadena en mayúscula.Readln(N1).Readln(N2).N2)). Write('Entre un número: ').Como se puede apreciar una función es muy parecida a un procedimiento. End. end. Write('Entre otro número: '). 5. Aquí se le asigna a la función el valor de la suma de los números entrados como parámetros. Figura 5.8 Ejemplo de función que devuelve la suma de dos números.9 Programa que suma dos números mediante un función.8. ¿Qué función nos permite hacer esto? La respuesta es ninguna. la diferencia radica en que una función tiene que estar concebida para que siempre devuelva un resultado a partir del parámetro que se le pasa. El programa de la figura 5. Uses Crt.8 se muestra la función Suma. En algunas versiones de Pascal esta asignación es posible hacerla mediante la palabra Result. Solución: 106 . Function Suma(Numero1.N2:Integer. begin Suma := Numero1 + Numero2.Numero2: Integer):Integer. pasando carácter por carácter de la cadena e ir convirtiéndolo en mayúscula.Suma(N1.Numero2: Integer):Integer. Mediante la función LENGTH podemos saber cuál es la longitud de la cadena.

Readln(Texto). Uses Crt. If Ordenados(n1. Writeln('*** Introduce tres números enteros ***'). var i: integer. { Va convirtiendo el caracter (i) a mayúscula} Mayuscula := T.Program Funcion_Mayusc. Begin ClrScr. n2. Begin ClrScr. End. En este programa se realizó una función que devuelve TRUE si dos número se ha introducido en orden ascendente y FALSE en caso contrario. pues eso fue lo que se hizo aquí a la hora de llamar a la función. Readln(n3). Var n1.') Else Writeln('Los tres números NO están en orden'). Uses Crt. j: Integer): Boolean. Write('Tercero: '). begin for i:= 1 to Length(T) do { Recorre la cadena hasta el final} T[I] := Upcase(T[I]). End.n3) Then Writeln('Los tres números están en orden. n3: integer. Solución: Program Funcion_Ordenados. Function Ordenados(i. Writeln(Mayuscula(Texto)). Readln. Claro que si el primero es menor o igual que el segundo y el segundo es menor o igual que el tercero esto tres números tienen un orden ascendente. Writeln. begin ordenados := (i <= j) end. var Texto:string. Readln. Writeln(‘Conversión a mayúscula’). Writeln. Ejemplo 2: El programa que verán a continuación lee tres números enteros e imprime si están o no en orden numérico ascendente. Write('Primero: '). { devuelve la palabra (T) en mayúscula} end.Readln(n2). Readln(n1).n2) and Ordenados(n2. Write(‘Entre una palabra: ’). 107 . Function Mayuscula(T: string): string. Write('Segundo: ').

end. ReadKey realiza una lectura del caracter que se tecleó y lo almacena en la variable que se asigna. Readln. por citar un ejemplo. y el usuario entra un texto. End. { Almaceno en carac el caracter entrado } Writeln(carac). otto son palíndromo. Writeln('Introduce un caracter para ver si es numérico. ana. Begin Clrscr. { Muestro el caracter entrado } If verificar (carac) then Writeln('El caracter introducido es numérico. begin verificar := (caracter >= '0') and (caracter <= '9').Ejemplo 3: Muchas veces hemos escuchado decir entre los programadores: “El usuario es el ser más entrometido que existe”. Esta operación se realiza mediante un conteo descendente caracter por carácter. El programador tiene que concebir su programa para validar esto posibles errores que en muchas ocasiones son escritos de manera inconsciente por el usuario. Esta afirmación se debe a que en ciertos momentos se piden datos en el programa que tienen que ser numéricos. Var carac: Char. Un palíndromo es una palabra que se lee igual adelante que hacia atrás. Mediante el bucle For garantizamos invertir la palabra almacenada en la variable Texto y almacenar la palabra invertida en TextInv. sayas. La función Length devuelve la cantidad de caracteres de la cadena pasada como parámetro. Por ejemplo las palabras ala. carac:= Readkey.') Else Writeln('El caracter introducido no es numérico. Function verificar (caracter: char) : Boolean.'). Solución: Program escaracter. 108 . Aquí se utiliza un el tipo de dato CHAR que almacena un caracter cualquiera. Ejemplo 4: Este ejemplo verifica si una palabra es palíndromo o no a través de una función. El programa que se muestra a continuación cuenta con una función que verifica si un caracter introducido es un número o no. esto produce un error fatal. La función Pali devuelve True si la palabra pasada como parámetro es palíndromo y False en caso contrario.'). reinier. Uses crt. en este caso Carac.

para esto vamos a apoyarnos en la solución de un problema donde sea necesario el uso de este tipo de función para que sea más eficiente su solución. Readln(T).Solución: Program Palindromo. TextInv:string. If Texto = TextInv Then Pali:= True Else Pali:= False.' no es palíndromo. If Pali(T) Then Writeln(T.') Else Writeln(T. end. Function Pali(Texto:String):Boolean. Así planteada esta definición puede que sea un poco engorroso de entender. Uses CRT. begin TextInv:=''. 109 . Veamos el siguiente problema: Determine el factorial de un número entero positivo entrado por el teclado. For i:=Length(texto) downto 1 do TextInv:=TextInv + Texto[i]. Readln. 5. sino para que se ajusten en sus asientos y pongan todas sus neuronas a funcionar en esta sección. Begin ClrScr. var T:string. La recursión es una herramienta de programación que suele ser una de las más difícil de entender por aquellos que son principiantes y la que más dolor de cabeza provoca a los estudiantes.' es palíndromo. Una función recursiva es aquella que se llama así misma en el cuerpo de la función. Solución: El factorial de 4 lo podemos expresar de la siguiente forma: 4! = 1 * 2 * 3 * 4 = 24.'). El de 5: 5! = 1 * 2 * 3 * 4 * 5 = 120. var i: Integer. Funciones recursivas. End. Esto no es para que cojan miedo. Writeln('Entre una palabra para ver si es palíndromo o no.7 Recursividad. Hay que tener en cuenta que el factorial de 0 es igual a 1.'). De esto se puede decir en otras palabras que el factorial de N es la multiplicación sucesiva de todos los números desde 1 hasta N.

10. En el rastreo se puede ver que va cambiando el parámetro de entrada en cada llamada a la función. end. encontramos que 4! = 4 * 3! Y así repitiendo este proceso hasta llegar al caso más sencillo que es 0! = 1.1). Figura 5. a esto es a lo que se le llama recursividad. 110 . si no entiendes lo que digo mira el ejemplo de la figura 5. Ahora cómo podemos expresar en una fórmula esto que vimos anteriormente. Observe el rastreo de esta función en la figura 5.1)!. teniendo en cuenta que N es un número entero positivo. 0! = 1 1! = 1 2! = 1 * 2 3! = 1 * 2 * 3 4! = 1 * 2 * 3 * 4 5! = 1 * 2 * 3 * 4 * 5 6! = 1 * 2 * 3 * 4 * 5 * 6 Figura 5. Según vimos anteriormente 5! es igual a 5 * 4! Por tanto antes de poder evaluar 5!. Aquí se da en cada línea un resultado.11 Función factorial.En esta solución nos podemos dar cuenta que el N! es igual a N * (N . en esta función se hace un llamado a la propia función dentro del cuerpo de la misma.11 es una función recursiva y calcula el factorial de N. Partiendo de esto tenemos que (1) 5! = 5 * 4! (2) 4! = 4 * 3! (3) 3! = 3 * 2! (4) 2! = 2 * 1! (5) 1! = 1 * 0! (6) 0! = 1 Este proceso es resuelto de atrás hacia delante. begin If N = 0 Then Factorial:= 1 Else Factorial := N * Factorial(N . Como se puede apreciar.12 donde se pasa como parámetro el número 5. debemos evaluar 4! Utilizando la definición. Function Factorial(N: Integer):Integer. La función que aparece en la figura 5. Veamos cómo puede utilizarse la recursividad para evaluar el factorial de 5. El resultado final es 120 que es el factorial de 5.10 Explicación del cálculo del factorial. el factorial del número en cuestión y este se multiplica por el otro y así hasta tener un resultado único. es decir comenzando por la línea (6) donde el valor es directo.

Partes de un procedimiento para su declaración.N=5 Factorial =5*Factorial(4) N=4 Factorial=4 *Factorial(3) N=3 Factorial=3*Factorial(2) N=2 Factorial=2*Factorial(1) N=1 Factorial=1*Factorial(0) N=0 Factorial=1 1 2 6 24 120 Figura 5. 5. 3.Inicio del procedimiento.12 Rastreo de la función factorial con parámetro 5. Parámetro por valor: El valor de la variable es utilizado solo para el cálculo. 5. Procedimiento: Sección de código separada del programa principal que realiza una acción y no devuelve valor alguno.. Parámetro por referencia o dirección: A esta variable se le asigna un valor durante el proceso de ejecución del procedimiento. La llamada a un procedimiento se hace a través de su nombre.. una fecha. Parámetro: Variable que puede ser un número. o simplemente texto.Palabra clave del procedimiento... 6. un nombre de archivo.Nombre del procedimiento. Recuerde que a la hora de declarar un parámetro por referencia debe declararlo con la palabra reservada VAR. 111 . 4.. esto genera un programa que una ves que se llama la función esta no devuelve valor alguno y se bloquea el programa. Partes 1.8 Resumen.. 2. cualquier cosa que personalice el funcionamiento de un programa. Nota: Hay que tener cuidado cuando intentamos hacer una función recursiva que no tenga un valor final que ponga fin a las llamadas de la función. su valor no cambia durante el proceso.Cuerpo del procedimiento.Lista de parámetros.Fin del procedimiento. en fin.

1 Complete las siguientes oraciones: a) Se llama _____________ a un subprograma que realiza una acción y devuelve un valor único y ________________ al subprograma que realiza una acción y no devuelve valor alguno. Para invocar la función se escribe el nombre de la función a la que se quiere llamar y entre paréntesis se colocan los parámetros que exige esta función. de otra forma generará un error de ejecución. segundos y centésimas. Función: Sección de código separada del programa principal que realiza una acción y devuelve un valor único.Inicio de la función. 5. GETDATE: Función que devuelve el año. tienen que ser de tipo Word. _________. minutos. 112 . __________ y ___________. GETTIME: Función que devuelve el tiempo en hora.Lista de parámetros. mes. d) A la variable que se pasa como parámetro se le asigna un valor durante el proceso de ejecución del procedimiento se dice que este parámetro es pasado por ____________. LENGTH: Función que devuelve la longitud de la cadena pasada como parámetro. Para utilizar las funciones GETTIME y GETDATE debe ser declarada la unidad DOS en la lista Uses. donde el lunes(1) y así hasta el domingo(7). 3. Estructura de una función para su declaración.Tipo de devolución. 5. 1. b) __________ es una función que devuelve la longitud de la cadena pasada como parámetro. Función recursiva: Es aquella que se llama así misma en el cuerpo de la función. 4. Estos datos los almacena en las variables declaradas con ese objetivo. 7. c) La función GetTime retorna el tiempo en _________.Cuerpo de la función.9 Ejercicios de autoevaluación. UPCASE: Función que devuelve en mayúscula al carácter pasado como parámetro. día y el número de día de la semana.Nombre de la función. 2. 6.La lista de parámetros que se le pasan a un procedimiento deben corresponder con el tipo de dato con el se definió el parámetro en su declaración. Toda función recursiva tiene que estar concebida de forma tal que tenga un límite de llamadas a ella misma para que ponga fin a la función.Palabra clave de la función. 1.Fin de la función.

a) El siguiente procedimiento le pasa al parámetro S el sucesor de N. 1.3 Diga las partes para la declaración de un procedimiento según la numeración de la columna izquierda. 1. __ Lista de parámetros. Procedur (N:Integer.S:Integer). __ Nombre del procedimiento. begin AnteS = N . __ Lista de parámetros. __ Cuerpo del procedimiento. El columna derecha aparecen las partes en forma desordenada. begin Delay(S*1000). 113 . teniendo en cuenta que S es una variable entera que es un parámetro del procedimiento. S es un parámetro por referencia. c) Este procedimiento realiza una espera de S segundos.1. __ Inicio de la función. begin S:= N + 1. El columna derecha aparecen las partes en forma desordenada. __ Fin del procedimiento. Function AnteS(N):String. d) La función siguiente retorna verdadero si el número pasado como parámetro es par y falso si es impar.5 Escribir un programa que muestre en pantalla BP7 realizado por nosotros (usar un procedimiento para cada letra). end.1. If Num mor 2 = 2 Then Par:= True Else Par:= False. Procedure Espera() S: Integer. end. __ Nombre de la función.2 Corrija los errores que existen (si es que existe alguno) en cada uno de los siguientes fragmento de programas. __ Palabra clave de la función. __ Inicio del procedimiento. b) La siguiente función retorna el antecesor de un número. __ Cuerpo de la función. __ Fin de la función. 1. __ Tipo de devolución. Function Par(Num):String.4 Diga las partes para la declaración de una función según la numeración de la columna izquierda. end. __ Palabra clave del procedimiento.

end. _5_ Cuerpo del procedimiento. _6_ Cuerpo de la función.4 _4_ Tipo de devolución.3 _3_ Lista de parámetros. _2_ Nombre del procedimiento. b) Length. begin begin Delay(S*1000). Confeccione un procedimiento parecido a este pero que genere el primer número y este sea múltiplo del segundo. Par:= True Else Par:= False. _5_ Inicio de la función. 1.1. Minutos. _3_ Lista de parámetros. Segundos y Centésimas. end. 1. 1.4 se creó un procedimiento que permite generar dos números de 1 a P y almacenarlos en N1 y N2. 5. _2_ Nombre de la función.6 En el ejemplo 1 del epígrafe 5. S:= N + 1. Function AnteS(N: Integer):Integer. Procedimiento. _7_ Fin de la función. Var S:Integer). Function Par(Num: Integer):Boolean. 114 . _4_ Inicio del procedimiento. d) Referencia o Dirección.10 Respuestas de ejercicios de autoevaluación.1 a) Función. If Num mod 2 = 0 Then end.1. _6_ Fin del procedimiento.2 Los aspectos que están en negritas son los que fueron modificados o incorporados. begin begin AnteS := N . end. c) d) Procedure Espera(S: Integer). c) Hora. _1_ Palabra clave del procedimiento. _1_ Palabra clave de la función. a) b) Procedure Suce(N:Integer. 1.

uses crt. 1. writeln('B B B'). writeln('B B B '). end. begin writeln('P P P'). Procedure letra_B. N1:= Random(P)+1.1.5 Program BP7.6 Procedure Generar(P: Integer. N2: Integer). writeln('P'). writeln('B B'). end. begin Randomize. writeln('P'). Var N1. Until N1 mod N2 = 0. {mantenemos la pantalla viendo la solución hasta que se pulse una tecla} end. Procedure num_7. end. writeln('P P '). writeln. writeln(' 7'). begin writeln(' 7 7 7'). Repeat N2:= Random(P)+1. end. Begin {empezamos el programa principal} Clrscr. num_7. writeln('P P P'). writeln('B B '). writeln(' 7'). letra_b. 115 . letra_p. begin writeln('B B B'). writeln(' 7'). writeln. Procedure letra_P. repeat until keypressed. writeln(' 7').

116 . 1.13 Construir una función que reciba como parámetro un entero y retorne sus dos últimos dígitos. Por ejemplo si el usuario escribe Gerardo. 1. de forma tal que el programa no continúe hasta que no se presione la tecla ENTRE. Sin embargo.18 Construir una función que reciba como parámetro un entero y un dígito y retorne 1 si dicho entero es múltiplo de dicho dígito y 0 si no es así. 1. 1. de forma tal que si el usuario escribe Antonio el resultado en pantalla sería: Hola Antonio. 1. 1. proceda como sigue: a) Escriba un procedimiento Leer que lea dos números reales.Segundo número --.20 Construir una función que reciba como parámetro un entero positivo y devuelva su equivalente en el sistema binario. devuelva el máximo de ellos. lo que se ve es: * * * * * * * 1.59 1. b) Escriba una función que dados dos números reales.Menor 220. d) Escriba el programa principal que lea dos números reales.12 Construir una función que reciba como parámetro un entero y retorne su último dígito. obtenga el mayor y el menor de ellos.8 Cree un procedimiento que realice una espera. 1. 1. cualquier otra tecla que se presione no responderá con ninguna acción.11 Ejercicios propuestos. y muestre el resultado en pantalla de la siguiente forma: Primer número --. c) Escriba una función que dados dos números reales.15 Construir una función que reciba como parámetro un entero y retorne si dicho entero es primo o no. 1. 1.19 Construya una función que reciba como parámetros un texto y un caracter y retorne la cantidad de veces que está dicho caracter en el texto.16 Construir una función que reciba como parámetro un entero y retorne la cantidad de dígitos primos. Con tal fin.14 Construir una función que reciba como parámetro un entero y retorne la cantidad de dígitos pares. dicho programa debe apoyarse en la programación modular.0 Presione ENTER para continuar. 1.7 Realice un procedimiento llamado Inicio que reciba como parámetro un nombre y le de la bienvenida.5.11 Escriba un programa PASCAL que calcule el máximo y el mínimo de dos números. pero mientras este la está entrando se van cambiando los caracteres por *. Te damos la bienvenida a Borland Pascal 7.59 356.85 356.17 Construir una función que reciba como parámetro un entero y retorne el primer dígito de este entero.85 220.Mayor --. 1. este número entra por el teclado. devuelva el mínimo de ellos.4 donde el procedimiento devuelve los factores primos de un número.10 Confeccione un procedimiento que permita realizar la siguiente operación: El usuario escribe una palabra.9 Confeccione el programa completo del ejemplo 2 del epígrafe 5.

Las conversiones serán de: . 1.23 Construir una función que reciba como parámetro un número y retorne si este puede ser un número expresado en sistema binario o no.1.25 Construir una función que reciba como parámetro un vector de 10 posiciones enteras y retorne la posición en la cual se encuentra el mayor de los datos del arreglo. 1. .26 Construir una función que reciba como parámetro un vector de 10 posiciones enteras y retorne el promedio entero del vector. 1. 1. 1. 1. construya un programa que permita realizar una conversión de un sistema numérico a otro. 1.32 Implemente en un programa la función factorial que se creo en este capítulo. .29 Construir una función que reciba una matriz 5x5 y retorne el valor de su moda. 3. 1.30 Construir una función recursiva que permita multiplicar A * B mediante una suma. Por ejemplo la secuencia Fibonacci menores que 50 son: 0. 2.27 Construir una función que reciba como parámetros una matriz 4x4 entera y un valor entero y retorne la cantidad de veces que se repite dicho valor en la matriz. .Binario a Decimal. 1.Hexadecimal a Decimal. 21 y 34. 1.28 Construir una función que reciba como parámetro una matriz 4x4 entera y retorne la posición exacta en donde se encuentre almacenado el mayor número primo. 5. 117 .Decimal a Binario.24 Partiendo de los ejercicios anteriores.31 La secuencia de Fibonacci consiste en la suma consecutiva de los número de 0 hasta el número que se quiere mostrar dicha secuencia. .22 Construir una función que reciba como parámetro un entero positivo y devuelva su equivalente en el sistema hexadecimal.Decimal a Hexadecimal.Octal a Decimal.Decimal a Octal. .21 Construir una función que reciba como parámetro un entero positivo y devuelva su equivalente en el sistema octal. 1. La moda de un conjunto de datos es el dato que más se repite. 1. 13. 8. 1.

Pascal. Sánchez Victor. Vicente López. 118 . Folleto de Programación I para los Politécnicos de Informática. Introducción a la Programación. Programación en pascal._____________________________________________________________ Bibliografía Consultada _____________________________________________________________ Estructura de datos en Pascal. Aprenda C/C++ Estructura de datos y otros objetos. Folleto “Curso básico de turbo pascal” Metodología de la programación.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->