Está en la página 1de 134

MATERIAL DE APOYO

PROGRAMACIÓN DIGITAL 10

Escuela Básica
Facultad de Ingeniería
Universidad de Los Andes
Prof. Armando Borrero Molina

Marzo 2011
CONCEPTOS BÁSICOS

On désigne par algorithmique l‟ensemble des activités logiques qui relèvent des algorithmes ; en
particulier, en informatique, cette discipline désigne l'ensemble des règles et des techniques qui
sont impliquées dans la définition et la conception des algorithmes. Le mot vient du nom du
mathématicien Al Khuwarizmi (latinisé au Moyen Âge en Algoritmi), qui, au IXe siècle écrivit le
premier ouvrage systématique sur la solution des équations linéaires et quadratiques. Dans le cas
général, l‟algorithmique s‟effectue au moyen de calculs. Il est parfois fait usage du mot algorithmie,
bien que ce dernier ne figure pas dans la plupart des dictionnaires.

Informática: ciencia que estudia el tratamiento automático y racional de la


información.

Información Automática

Funciones:
+ Desarrollo de nuevas máquinas
+ Desarrollo de nuevos métodos de trabajo
+ Construcción de aplicaciones informáticas
+ Mejora de los nuevos métodos y aplicaciones existentes.

Datos Procesamiento Información

Datos: representaciones abstractas de hechos u objetos.


Un dato es una representación simbólica (numérica, alfabética, etc.) de un atributo
o característica de una entidad. El dato no tiene valor semántico (sentido) en sí
mismo, pero convenientemente tratado (procesado) se puede utilizar en la
realización de cálculos o toma de decisiones.

Computador(a):

Entradas Procesos Salidas

Recopilación, Aritméticos Recopilación y


depuración y Lógicos distribución de
almacenamiento de los resultados.
los datos.

Concepto:

+ Dispositivo electrónico que recibe un conjunto de datos de entrada, los procesa y


genera resultados, o produce información de salida.
+ Máquina compuesta de elementos físicos de tipo electrónico, capaz de realizar
una amplia variedad de trabajos con gran precisión y alta velocidad, siempre que
se le den las instrucciones adecuadas.
Esquema Básico del Hardware

Memoria Auxiliar

CPU

Procesador
Unidad de Control
+
Dispositivos Unidad Aritmético - Lógica Dispositivos
de Entrada de Salida
Memoria Principal

1) CPU: Unidad Central de Procesamiento UCP. Es el elemento principal de la


computadora y su misión consiste en coordinar, controlar o realizar todas las
operaciones del sistema. Consta de:
i) Unidad de Control (UC). Es la parte del CPU encargada de gobernar el
resto de unidades. Interpreta las instrucciones, controla su ejecución y la
secuencia en que éstas deben ejecutarse.
ii) Unidad Aritmético–Lógica (UAL). Es la parte del CPU encargada de
realizar las operaciones elementales de tipo aritmético y lógico.

2) Memoria Principal. También denominada Memoria Central, es el elemento


encargado de almacenar los programas y los datos necesarios para que el
sistema realice un determinado trabajo. Las siglas en inglés son RAM, de
Random Access Memory. Se dice que esta es una memoria volátil, pues todo
lo que almacena se pierde cuando se apaga el computador. …Faltan otras
cosas.

3) Memoria Auxiliar o Secundaria. Son dispositivos de almacenamiento masivo


de información y su característica principal es la de retener esta información
durante el tiempo que se desee, recuperándola cuando sea requerida. Son los
denominados Discos Duros, CDs entre otros.

4) Dispositivos de Entrada. También llamados Periféricos o Unidades de


entrada, son los elementos encargados de facilitar la introducción de los datos
y los programas desde el exterior a la memoria principal. Estos dispositivos,
además de recibir la información del exterior, la adaptan para que ésta sea
inteligible por la máquina.
5) Dispositivos de Salida. Son los elementos que tienen la misión de recoger y
proporcionar al exterior los resultados, (o la información obtenida como
resultado de la manipulación de los datos), de cada uno de los trabajos que se
realicen en el sistema. De igual forma que los mencionados anteriormente, se
les conoce como periféricos o unidades de salida.

Software – Programas - Software del Sistema y Software de Aplicación

Lenguajes de Programación.

Sirven para escribir programas que permitan la comunicación usuario/máquina.


Unos programas especiales llamados traductores (compiladores e intérpretes)
convierten las instrucciones escritas en lenguaje de programación, en
instrucciones escritas en lenguaje de máquina (0 1, bits) que ésta pueda entender.

- Lenguaje de Máquina: son aquellos cuyas instrucciones son directamente


entendibles por la computadora y no necesitan traducción posterior para
que el CPU pueda “comprender” y ejecutar el programa. Una serie de
instrucciones en lenguaje máquina podrían ser: 0010 0000 1010 1001

- Lenguajes de Bajo Nivel: las instrucciones en estos lenguajes se escriben


en códigos alfabéticos “mnemotécnicos”, tales como ADD MPY, etc. Estos
lenguajes permiten simplificar el proceso de escritura de un programa. Son
generalmente dependientes de la máquina, es decir, dependen de un
conjunto de instrucciones específicas de la computadora. Un lenguaje típico
de bajo nivel es el ensamblador.

- Lenguajes de Alto Nivel: son aquellos en los que las instrucciones o


sentencias dadas a la computadora son escritas con palabras similares al
lenguaje natural (inglés).
COMPILADORES

Un compilador acepta programas escritos en un lenguaje de alto nivel y los


traduce a otro lenguaje, generando un programa equivalente independiente, que
puede ejecutarse tantas veces como se quiera. Este proceso de traducción se
conoce como compilación.

Los programas interpretados suelen ser más lentos que los compilados, pero los
intérpretes son más flexibles como entornos de programación y depuración.

Comparando su actuación con la de un ser humano, un compilador equivale a un


traductor profesional que, a partir de un texto, prepara otro independiente
traducido a otra lengua, mientras que un intérprete informático corresponde al
intérprete humano, que traduce de viva voz las palabras que oye, sin dejar

Lenguajes Intérpretes

Un intérprete es un traductor que toma un programa fuente, lo traduce y a


continuación lo ejecuta. BASIC es un lenguaje interpretado.

Se trata de traductores-ejecutores ya que con cada instrucción realizan un


proceso triple de lectura-traducción-ejecución. Son relativamente lentos, pero
muy buenos para la depuración de programas.
Datos, Variables y Expresiones.

Datos

Los datos son representaciones abstractas de hechos u objetos.

Un dato es una representación simbólica (numérica, alfabética, etc.) de un atributo


o característica de una entidad. El dato no tiene valor semántico (sentido) en sí
mismo, pero convenientemente tratado (procesado) se puede utilizar en la
realización de cálculos o toma de decisiones.

Datos Procesamiento Información


Es la información con la que se alimenta un proceso para producir resultados. Es
un caracter o conjunto de caracteres que representa el valor que toma una
variable con la que opera la computadora. Se tienen tres tipos de datos simples:

Numéricos: están compuestos sólo de caracteres numéricos, el punto decimal y el


signo. Agrupa a los números enteros y reales (positivos, negativos y cero) con
valores de -1,79769313486232E308 a -4,94065645841247E-324 para valores
negativos y de 4,94065645841247E-324 a 1,79769313486232E308 para valores
positivos.

Cadena: están compuestos por una mezcla de los caracteres alfabéticos y


numéricos, es el tipo predefinido en Algoritmia. Así, por ejemplo, si se quiere
almacenar la dirección de una persona se necesitará combinar datos numéricos y
alfabéticos. Ejemplo: 'Urbanización Campo Azul. Edificio F. Apto 1-4'

Entonces, una cadena es cualquier expresión que consiste en una secuencia de


caracteres contiguos encerrados entre comillas simples como por ejemplo:
'Algoritmo', '0416-6752325', 'LAB 65E‟.

Lógicos: es tipo de dato llamado lógico tiene como característica principal que
únicamente puede tomar dos valores: Verdadero (.V.) o Falso (.F.). Ejemplo:
HorasExtra = .V.

Variables

La variable es un dato cuyo valor puede ser modificado durante la ejecución del
programa. Una variable es una dirección de memoria y puede verse como una
pequeña caja donde se pueden guardar valores. Estos pueden ser de cualquiera
de los tipos vistos anteriormente (numéricos, alfabéticos, alfanuméricos, etc.).
Cuando se hace mención a una variable, se está refiriendo a una pequeña zona
de la memoria principal (conjunto de posiciones contiguas) donde se va a alojar un
valor. Si este valor se modifica en algún momento del programa, el nuevo valor
sustituirá al que existía anteriormente. Al conjunto de posiciones contiguas de
memoria se le da un nombre para poder identificarlo (nombre de la variable) y se
define su tipo (clase de caracteres que puede contener).

Expresiones Aritméticas

De la evaluación de una expresión aritmética siempre se obtiene un valor de tipo


entero o real. En las expresiones aritméticas se pueden utilizar los siguientes
operadores aritméticos:

Las expresiones aritméticas son expresiones simples construidas con operadores


aritméticos y constantes o referencias a las celdas. Los operandos son los valores
sobre los que actúa el operador. Existen dos tipos de operadores aritméticos:

 Unarios: operadores que actúan sólo sobre un elemento y utilizan un solo


operando ubicado a la derecha del operador. Por ejemplo: = -A6
 Binarios: operadores que actúan sobre dos elementos y utilizan dos
operadores, uno ubicado a cualquiera de los dos lados del operador. Por
ejemplo: = B4 + A6

Operadores aritméticos
Los operadores aritméticos son de la siguiente manera:
Operador Nombre Tipo Descripción
+ Operador de adición (o suma) Binario Suma dos valores
- Operador de substracción (o resta) Binario Resta dos valores
- Operador de inversión Unario Proporciona el valor opuesto de un valor
* Operador de multiplicación Binario Multiplica dos valores
/ Operador de división Binario Divide dos valores
Proporciona el resultado entero de la división del
Div Operador de división entera Binario operando de la izquierda entre el operando de la
derecha
Da el historial completo de una división de dos
Mod Operador de módulo Binario
números
Uso de los paréntesis
Los operadores aritméticos se usan en un orden predefinido o de prioridad. Para
modificar la prioridad predefinida se deben usar paréntesis. Esta tabla muestra la
prioridad de los operadores:

Prioridad del operador


++++++ ()
+++++ Mod Div * /
+++ + -
Cuando dos operadores tienen la misma prioridad, los cálculos se realizan de
izquierda a derecha.

Operadores Relacionales

= Igual a
<> Diferente; No igual a
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que

Operadores lógicos

Not (no lógico)


And (y lógico)
Or (ó lógico)

EXPRESIONES ARITMÉTICAS Y LÓGICAS

1. Evalué las siguientes expresiones aritméticas.


a) 6 – 3 * 4 / 4 + 5 * 2
b) (2 * 3 + (6 div 3 – 1 )) ** 2
c) 6 mod 3 - 9 / 4 * 2 + 1

2. Inserte paréntesis para indicar el orden en que se aplican los operadores.


a) a div b * c mod e – f * g
b) a – b * c / d + e *f
c) a * (b + c) + abs(d * e / f) – g * (h + i / j)

3. Elimine los paréntesis innecesarios de las siguientes expresiones.


a) ((a mod b) / c) * (d + e)
b) ((a / b) * c ) – d
c) (a + (b * (c + d ))) – (( e + f ) / g * h)
4. Evalúe las siguientes expresiones condicionales.
a) (5 / 2 * 3 – 1) = 4 div 2 mod 2
b) (7 div 3) > (3 / 4) ** 2 * (2 + 10 mod 5)
c) 10 < = 3 + 4 - 2

5. Evalúe las siguientes expresiones con los operadores aritméticos, relacionales


y lógicos.
a) no ( 15 > = 7 ** 2) o (43 – 8 * 2 div 4 <> 3 * 2 div 2)
b) (15 > = 7 * 3 ** 2 y 8 > 3 y 15 > 6) o no ( 7 * 3 < 5 + 12 * 2 div 3 ** 2)
c) no (( 7 * 3 div 2 * 4 < 20) o (15 / 2 * 6 < = 15 * 2 / 17 ))

Programas

Concepto...
METODOLOGÍA PARA LA CONSTRUCCIÓN DE PROGRAMAS

La Ingeniería de Software es una disciplina que comprende al conjunto de


técnicas destinadas a la producción de un programa de computadora, más allá de
la sola actividad de diseño.
El proceso de creación de programas es un proceso netamente creativo. Durante
varias décadas se ha tratado de encontrar procesos o metodologías predecibles y
repetibles que mejoren la productividad de los programadores y la calidad de los
programas.
Se han establecido varios modelos o paradigmas de desarrollo en los cuales
apoyarse para la creación de software. Uno de ellos es el “Modelo en Cascada”,
en el cual, se ordenan las fases o pasos que se deben seguir para obtener la
solución a los problemas, de forma tal que el inicio de cada etapa debe esperar a
la finalización de la inmediatamente anterior.

Una versión simplificada del modelo en cascada comprende las etapas siguientes:
1) Formulación y Análisis del Problema
2) Diseño del programa
3) Codificación y Ejecución
4) Pruebas y Depuración.

Seguidamente se especifican las acciones a realizar en cada una de las fases de


la metodología, especificadas anteriormente.

1) Formulación y Análisis del Problema:

En esta fase se estudia el problema planteado para comprenderlo y reducirlo a


términos claros y precisos; para establecer sus límites y características, así como
también para sugerir posibles soluciones. En el estudio se determinan tres
aspectos:
+ ¿Qué datos se necesitan para resolver el problema, cuáles son?
+ ¿Cómo manipular esos datos para obtener el resultado deseado?
+ ¿Cuál es la presentación más conveniente o adecuada de los resultados?

A continuación se presentan estos aspectos, expresados respectivamente en


términos de Entradas – Procesos – Salidas y representados en forma de
diagrama de bloques.

Entradas Procesos Salidas

¿Datos? ¿Cálculos o ¿Resultados?


¿Tipo? ¿Variables? Transformaciones? ¿Comentarios?
¿Restricción? ¿Variables? ¿Tipo? ¿Condición?
¿Restricción?
En cada uno de los bloques se identifican las acciones que constituyen las
especificaciones de las funciones a realizar.

Entradas: En esta sección se indican los requerimientos del problema, es decir,


¿qué se necesita para resolver el problema planteado? ¿Cuáles son los datos que
se van a utilizar?, ¿Cuales son las variables que los van a contener o a
almacenar?, ¿De qué tipo son?, ¿Existe alguna restricción para ellas?

Procesos: Se refiere a las operaciones o cálculos que deben realizarse con los
datos, para obtener la solución del problema planteado. También deben
especificarse las variables que van a contener los resultados de las operaciones
realizadas y cuales son sus tipos respectivos; así como también las restricciones a
tomar en cuenta, (si existe alguna).

Salidas: Se debe indicar en esta sección la manera como se desea presentar los
resultados obtenidos con las transformaciones indicadas en los Procesos. ¿Qué
comentarios se van a incluir? ¿De qué manera se van a presentar?

Recomendaciones:

- A las variables a utilizar se les deben asignar, preferiblemente, identificadores


mnemónicos, es decir, nombres que las describan y permitan asociarlas
fácilmente con su contenido.

- En las salidas, se deben colocar preferiblemente, los textos tal como se desea
que aparezcan posteriormente en pantalla, o mejor dicho, de la manera más
parecida a como se escribirán en el programa codificado. Esto es, los comentarios
encerrados entre comillas, con las variables intercaladas, separados por comas.

Ejemplo: Calcular el promedio de notas de un estudiante que presentó tres


exámenes parciales con igual porcentaje cada uno.

Entradas Procesos Salidas

Nombre_Alum „La nota obtenida


Alfanumérica Promedio = Nota1+ Nota2+ Nota3 por el estudiante „,
3 Nombre_Alum,
Nota1, Nota2, „es‟, Promedio
Nota3 Promedio
Numéricas Variable Numérica – Real
Enteras. 0 - 20 0 < Promedio > 20

Otra manera de expresar las variables a utilizar en el programa, se hace con la


utilización de una tabla, en la que se especifica el nombre de cada una de las
variables, su tipo, descripción, restricciones, etc., como se muestra a continuación:
Nombre Variable Tipo Descripción Restricción
Nota1 Numérica - Entera Nota Primer Parcial Valor entre 0 y 20
Nota2 Numérica - Entera Nota Segundo Parcial Valor entre 0 y 20
Nota3 Numérica - Entera Nota Tercer Parcial Valor entre 0 y 20
Nombre_Alum Alfanumérica Nombre del Alumno Cadena 30caracteres
Promedio Numérica – Real Promedio de notas Valor entre 0 y 20

2) Diseño del Programa

En esta sección se utilizan las especificaciones realizadas en la fase anterior para


establecer e identificar la secuencia de pasos o instrucciones que van a conformar
el programa. Existen muchas herramientas que permiten llevar a cabo esta etapa
de la metodología pero en este texto se utilizarán sólo los algoritmos estructurados
y los diagramas de flujo.

Antes de adentrarse en el diseño del programa, es conveniente conocer los


conceptos de Programación Modular y Estructurada.

Programación Modular y Estructurada

Se entiende por Programación Modular…

Estructuras de Control

Señalan o indican el flujo de control a seguir por las instrucciones que conforman
el programa. Son estructuras que utilizamos normalmente en nuestra vida diaria,
para resolver cualquier problema o ante cualquier situación. Por ejemplo, para
vestirnos seguimos una secuencia, para comer, para cambiar un caucho, etc.
Vamos a formalizar aquí las estructuras para utilizarlas en la construcción de
programas, para que nos sirvan en la resolución de problemas susceptibles de ser
resueltos con una computadora.

- Secuenciales: se denominan así porque siguen un orden, una secuencia. Se


ejecuta una después de la otra, por orden de aparición. No hay alteración en la
secuencia al llegar a ellas. Son instrucciones simples, conformadas por una
sola tarea o acción a ejecutar cada vez, una sola línea de programa.

- De Decisión: tienen una entrada y dos posibles salidas, de acuerdo a la


evaluación de una condición dada. Existe una bifurcación en el control del
programa. Son instrucciones compuestas, conformadas por más de una tarea o
acción a ejecutar cada vez, integradas por varias líneas de programa. También
pueden ser encontradas en la literatura, como Estructuras Selectivas o
Estructuras de Selección.
- De Repetición: en ellas se realiza una acción hasta que se cumpla una
condición o mientras se cumpla una condición. De igual manera que las
anteriores, son instrucciones compuestas. También se les denomina
Estructuras Repetitivas.

ALGORITMOS

Introducción

Los matemáticos hindúes, árabes y europeos fueron


los primeros que desarrollaron técnicas de cálculo
escrito. El matemático árabe Al'Khwarizmi, alrededor
del año 830 DC, escribe un libro de Aritmética,
traducido al latín como “Algoritmi de numero Indorum”,
donde introduce el sistema numérico indio y los
métodos para calcular con él. De esta versión latina
proviene la palabra Algoritmo.
Por algoritmo se entiende "una lista de instrucciones
donde se especifica una sucesión de operaciones
necesarias para resolver cualquier problema de un
tipo dado". Los algoritmos son modos de resolución de
problemas, cabe aclarar que no sólo son aplicables a
la actividad intelectual, sino también a todo tipo de
problemas relacionados con actividades cotidianas. El algoritmo es de carácter
general y puede aplicarse a cualquier operación matemática o a cualquier
problema. La formulación de algoritmos fue uno de los más grandes adelantos
dentro de la ciencia matemática ya que a partir de ello se pudieron resolver
infinidad de problemas.

Es de gran importancia aclarar que los algoritmos en si mismos no resuelven


problemas, se resuelven gracias al producto de ejercer las operaciones dictadas
por el algoritmo, se puede decir que es por el planteamiento mismo. La realización
de algoritmos es natural e innata en el hombre y en la mayoría de los casos es de
tipo inconsciente. En otras palabras, las personas suelen resolver problemas sin
tener que recurrir a la aplicación de cierto algoritmo. No obstante al encontrarse
con problemas de un grado de dificultad mayor es necesario detenerse a analizar
y pensar en la solución de éste.

2. Algoritmo:

Un Algoritmo es un método para resolver un problema, mediante una serie de


pasos precisos, definidos y finitos. Algunos autores lo definen como una serie de
operaciones detalladas, un conjunto de reglas para resolver una cierta clase de
problemas y se puede formular de muchas formas con el cuidado de que no exista
ambigüedad. Está escrito en lenguaje natural.
Algoritmos Cotidianos: una receta de cocina; el conjunto de pasos que se siguen
para realizar una llamada telefónica desde un teléfono público; el conjunto de
pasos que se cumplen para cambiar el caucho de un carro.

Definición:
“Es un conjunto finito de pasos en secuencia, que indican cómo se
resuelve un determinado problema”.

Sus propiedades son:

- Es finito: tiene principio y un fin; un número determinado de pasos.


- Es definido: siguiendo la secuencia de pasos establecida se obtiene siempre el
resultado al problema planteado.
- Es preciso. Cada paso debe seguirse en el orden determinado. Los pasos
están numerados en orden de secuencia. Se indica el orden de realización de
cada paso y no debe presentar confusiones o imprecisiones.
- Es eficiente: trata de resolver el problema en el menor número de pasos
posible y además, de manera clara y adecuada. En otras palabras, es efectivo.

Las características principales de los algoritmos son las siguientes:

- Cada paso se inicia con un verbo, que indica sin lugar a dudas, sin
ambigüedades, la acción a realizar en dicho paso.
- Se utilizan las estructuras de control establecidas (Secuenciales, de Decisión y
de Repetición).
- Un Algoritmo puede tener cero ó más entradas y debe tener al menos una
salida y ésta debe ser tangible.
- Debe ser sencillo, legible.
- Modular
- Correcto.
DIAGRAMAS DE FLUJO

El diagrama de flujo es una representación gráfica del algoritmo. Muestran de


manera clara y sencilla el comportamiento de un algoritmo. A los diagramas de
flujo también se les conoce como “Flujogramas”. Esta técnica constituye una
herramienta muy útil para la realización de un buen programa, pues permite que el
programador organice sus ideas y conozca a fondo el problema a solucionar, con
todas las posibles variantes o alternativas.

Existen convenciones internacionales acerca de la figura a utilizar para cada


función ejecutada por el algoritmo. En la tabla siguiente se muestran las figuras
utilizadas en la construcción de diagramas de flujo y su respectiva función.

Función Figura

Señalar el Inicio y Fin de un programa

Operaciones de Entrada, Lectura o Introducción de datos

Operaciones de Salida, Escritura, Impresiones

Operaciones de Cálculo, Asignaciones

Comparaciones, Estructuras de Decisión

Conectores

Estructuras de Repetición Indizada

Llamadas a subprogramas

Todas las figuras están unidas por flechas, que indican el flujo de control del
programa.
Estructuras Secuenciales

PROBLEMAS PROPUESTOS

1.- Calcular el Área de un triángulo de base B y altura H.


2.- Dados dos números cualesquiera, A y B, determinar cuál es el mayor.
3.- Calcular el volumen de un cilindro de radio (r) y altura (h) sabiendo que V = r2h
4.- Calcular el volumen y el área de superficie de un paralelepípedo de
dimensiones l, a y h.

l a
V=l*a*h
h A = 2 * (l * a + l * h + a * h)

5.- Calcular el sueldo neto mensual (SNM) de un empleado, conociendo su pago


por hora trabajada (PH), el número de horas trabajadas al mes (NTHM), el
porcentaje de descuento por Impuesto sobre la renta (ISLR), el porcentaje de
descuento por Seguro Social, (SS), el nombre del empleado (NOM) y su
Cédula de Identidad (CI).
Respuesta.- SB = PH * NTHM SNM = SB – SB*ISLR – SB*SS

6.- Dados tres valores A, B y C, intercambiar ente sí los valores de esas variables,
de tal manera que ninguna de ellas conserve su valor inicial.

7.- La tarifa que cobra una compañía telefónica por las llamadas locales que duran
hasta 3 minutos es de 250 Bs. El valor del minuto adicional es 90 Bs. Realizar
un programa que calcule el monto a pagar por llamada, si se conoce el tiempo
total por llamada.

8.- En un espectáculo público, el costo de las entradas es Bs. 15.000 niños y Bs.
30.000 los adultos. Elaborar un programa para calcular:
- Número total de asistentes.
- Monto recaudado por la asistencia de niños.
- Monto recaudado por la asistencia de adultos.
- Monto total recaudado.

9.- Calcular el Área de un cuadrado.

10.- Calcular el Área de un círculo. Área = π * r2

11.- En una empresa de cambio de monedas se necesita transformar Bolívares


(Bs.) en Dólares ($).

12.- Calcular el promedio aritmético de tres números.


13.- Calcular el promedio de notas de un alumnos que presentó cinco (5)
exámenes parciales.
y1 – y2
z = ------------
14.- Calcular la siguiente expresión algebraica: x1 – x2

15.- Cálculo del bono que recibirá un vendedor, sabiendo que se le paga el 13%
de las ventas realizadas.

16.- El porcentaje (%) de un número cualquiera.

17.- Cálculo de la nota definitiva, a partir de las notas obtenidas en 4 exámenes


parciales, cuya ponderación es en el siguiente orden: 25%, 15%, 20% y 40%.

18.- En una tienda de electrodomésticos, un cliente compra tres artículos. Se


desea saber cuál es el monto a pagar, sabiendo que a la suma de los tres
montos se le agrega el 16.5% de impuesto.

19.- Una academia de computación desea determinar cuál es el sueldo a pagar


a un profesor que gana su sueldo por horas de clase dictadas.

20.- Lea dos puntos (x, y) y calcule la distancia entre ellos.

21.- Una empresa quiere calcular el sueldo de un empleado, sabiendo que el


sueldo neto es igual a al sueldo base más la s asignaciones menos las
deducciones, tomando como datos de entrada los siguientes:
+ Sueldo Base (SB).
+ Asignaciones:
- Prima por hijos (1% SB por cada hijo),
- Prima por hogar (0.75% SB),
- Bono asistencial (1.25% SB),
- Prima profesional (3% SB);
+ Descuentos:
- Aporte a la Caja de Ahorros (10% SB),
- Aporte al Seguro Social (2% SB).

22.- Calcular el precio de un paquete turístico, sabiendo que se pagan 500 Bs.
por cada kilómetro recorrido y 30.000 Bs. por cada noche de estadía.

23.- Se sabe que una empresa realizó ventas netas de 235.000 Bs. durante una
semana, en las cuales participaron tres vendedores. Se desea calcular el
sueldo de cada vendedor, sabiendo que los vendedores realizaron las
siguientes ventas: el primero vendió un tercio de las ventas netas el segundo la
tercera parte y el tercero el resto. Además a cada vendedor se le paga el 15%
del total de las ventas netas realizadas.
ESTRUCTURAS DE DECISIÓN
Como su nombre lo indica, son estructuras en las cuales se toma una decisión, de
acuerdo a la evaluación de una determinada condición construida en base a una
expresión lógica. Tienen una entrada y dos posibles salidas, de acuerdo al valor
que toma la condición establecida. En ellas se bifurca el flujo de control del
programa. También se les conoce como Estructuras Selectivas o Estructuras de
Selección, pues se selecciona un camino a seguir, de acuerdo al resultado de la
evaluación de una condición o expresión lógica.

De acuerdo a la forma de las estructuras de decisión, éstas se pueden ser de los


siguientes tipos:
- Simples
- Dobles
- Compuestas
- Anidadas

Estructuras de Decisión Simple:

Son aquellas estructuras selectivas en las cuales se evalúa


una condición, y si ésta es verdadera, se ejecuta una acción o F V
Condición
un grupo de acciones. Si la condición no se cumple, el flujo de
control pasa a la instrucción inmediata siguiente después de
Sentencias
la estructura de decisión, sin realizar ninguna acción.

En nuestra vida cotidiana se utilizan estructuras de este tipo


en muchas situaciones. Por ejemplo, cuando le decimos a alguien: “Si ves a tal
persona, por favor entrégale esto”. Cuando vamos conduciendo un automóvil por
una carretera y vemos una estación de combustible. Si necesitamos, nos
detenemos; en caso contrario, continuamos. Cuando verificamos el estado del
tiempo antes de salir de casa. Si está lloviendo, llevamos el paraguas, si no, no lo
llevamos. Si esta última situación la estableciésemos formalmente usando una
estructura de decisión, sería como sigue: Si la condición “está lloviendo” se
cumple, entonces ejecutamos la acción “llevar el paraguas”. El caso contrario no
se considera, pues se continúa con la realización de las acciones que se tenían
previstas.

En una estructura de decisión


Si Condición simple, puede necesitarse Si Condición
Entonces ejecutar una sola acción en Entonces
Sentencia 1 caso que la condición se Sentencia 1
{Fin Si} Sentencia 2
cumpla o puede necesitarse la
ejecución de varias acciones. En el recuadro de la :
izquierda se muestra el caso de la ejecución de una Sentencia n
{Fin Si}
única acción cuando se cumple la condición. En el de la
derecha se plantea la ejecución de un grupo de acciones.
Ejemplo 1: Programa que intercambia los valores de dos números A y B si no
están en orden creciente y no hace nada si están ordenados.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Escribir („Introduzca dos valores‟)
3.- Leer (A,B)
4.- Comparar Si (A > B)
„Introduzca Entonces
dos Valores‟ 4.1.- Asignar Aux = A
4.2.- Asignar A = B
4.3.- Asignar B = Aux
A, B
5.- Escribir („Los valores introducidos son‟,A,„ y „,B)
6.- Fin
F A>B V

Aux A
Nota: En este programa se utiliza el concepto
A B
de variable auxiliar, (la variable denominada
B Aux Aux), para intercambiar los valores de las
variables A y B, de tal manera que se evite la
pérdida de uno de los valores contenidos en
„Los valores las variables A o B. Pues como es bien sabido,
son‟, A,‟ y „,B la operación de asignación es destructiva, y al
asignar un valor a una variable, se pierde el
valor anteriormente contenido en la misma.
Fin

Uso de una variable auxiliar:

A B Aux
Ejemplo 1: Codificación en Turbo Pascal

Program Intercambio;
{Programa que intercambia los valores de dos números A y B si no están en orden
creciente y no hace nada si están ordenados}

Uses
Crt, DOS;

Var
A, B, Aux : Integer;

Begin
Writeln ('Introduzca los dos valores');
Readln (A,B);
If (A>B) then
Begin
Aux := A;
A := B;
B := Aux
End;
Writeln ('Los valores introducidos son ', A, ' y ', B);
Readln
End.
Estructuras de Decisión Doble:

Son aquellas estructuras selectivas en las cuales se F


Condición
V
evalúa una condición, y si ésta es verdadera, se
ejecuta una acción o un grupo de acciones. En caso
Sentencias Sentencias
contrario, es decir, en caso que la condición no se
cumpla, se realiza otra acción u otro grupo de
acciones.

Esta estructura, escrita en lenguaje natural, se expresa como sigue:

Si Condición
Entonces
Sentencia 1
De lo contrario
Sentencia 2
{Fin Si}
Ejemplo 1: Programa para determinar si un número dado, introducido por teclado,
es par o impar.

Ejemplo 1: Codificación en Turbo Pascal

Program Par;
{Programa para determinar si un numero n dado, es par o impar}

Uses
Crt;

Var

N : Integer;

Begin
Clrscr;
Writeln ('Introduzca un numero "n" diferente de cero');
Readln (N);
If (N mod 2 = 0)
Then
Writeln ('El numero ', n, ' es par ')
Else
Writeln ('El numero ', n, ' es impar ');
Readln
End.

Estructuras de Decisión Compuesta:

En este caso, la calificación de “Compuesta” se refiere a la Condición. Es decir, se


refiere que la condición está conformada por varias partes, son expresiones
compuestas, separadas por operadores lógicos...

¡OJO! Esto está muy incompleto...!!!


Estructuras de Decisión Anidadas:

Cuando se insertan unas estructuras de decisión


dentro de otras, se dice que las mismas están
anidadas. En ese caso, se van realizando F V
Condición
comparaciones sucesivas, es decir, se pueden
evaluar sucesivamente varias condiciones a V F
diferentes niveles. Puede anidarse cualquier tipo de Condición
estructura de decisión, esto es, Simples con
Simples, Simples con Dobles, o Dobles con Sentencias
Dobles, etc., a varios niveles, según convenga. La
figura a la derecha, muestra el anidamiento de dos
estructuras de decisión simples.

Si 1 Si 1
Si 2
Si 3
Si 3
Si 2
Fin Si 3
Fin Si 3
Si 4

Fin Si 4
Fin Si 2 Si 4
Fin Si 1 Fin Si 1
Fin Si 2
Fin Si 4
Anidamiento Permitido Anidamiento No Permitido

Si 1 Si 1
Si 2
Si 3
Si 3 Si 2
Fin Si 3
Fin Si 3
Si 4

Fin Si 4 Si 4
Fin Si 2 Fin Si 1
Fin Si 1 Fin Si 2
Fin Si 4
Ejemplo 1: Programa para determinar el mayor de tres números cualesquiera
introducidos por teclado

Ejemplo 1: Codificación en Turbo Pascal

Program Mayor;
{Programa que encuentra el mayor de tres enteros introducidos por teclado}

Uses
Crt;

Var
A, B, C : Integer;
Elmayor : Integer;

Begin
Clrscr;
Writeln ('Introduzca los tres números enteros');
Readln (A,B,C);
{Determinar el mayor}
If (A > B)
Then
If (A > C)
Then
Elmayor := A
Else
Elmayor := C
Else
If (B > C)
Then
Elmayor := B
Else
Elmayor := C;
Writeln ('El numero mayor es ', Elmayor);
Readln
End.
También se pueden diferenciar las estructuras de decisión de acuerdo al tipo de
condición, en Simples y Compuestas.

Estructuras de Decisión Compuestas:

También existen en la literatura, las llamadas Estructuras de Decisión


Compuestas. Son estructuras selectivas que utilizan Condiciones Compuestas.
Una Condición Compuesta está conformada por varias Condiciones Simples,
separadas por operadores lógicos. Es decir, es una expresión lógica compuesta
por constantes y/o variables, separadas por operadores aritméticos y operadores
lógicos o relacionales. Estos últimos son los operadores “Y”, “O” y “No”, que
codificados a un lenguaje de programación, son respectivamente “And”, “Or” y
“Not”. Por ejemplo la expresión (A > 3) Y (B < 2 * C), constituye una Condición
Compuesta.

Tablas de Verdad para los operadores lógicos:

Condición 1 Operador Condición 2 Resultado


V Y (And) V V
V Y (And) F F
F Y (And) V F
F Y (And) F F

Condición 1 Operador Condición 2 Resultado


V O (Or) V V
V O (Or) F V
F O (Or) V V
F O (Or) F F

Condición 1 Operador Expresión Resultado


V No (Not) Not(Condición 1) F
F No (Not) Not(Condición 1) V

Ejemplo 1: Si dos números A y B son mayores que un tercero C, entonces


asígnele a la variable A el producto del mayor de los tres por el menor de ellos.
PROBLEMAS PROPUESTOS

1.- Encontrar las raíces reales de una ecuación cuadrática: aX2 + bX + c = 0.


Sabemos que b y c pueden ser cualquier número, incluyendo el 0. Sin embargo, a
no puede ser 0 porque la ecuación se volvería lineal.
Si a y b = 0, la ecuación no tendría solución.
Si b  0 pero a = 0, se tiene una solución única de x = -c/b.
Si b2 - 4ac < 0, no existen raíces reales.
Si b2 – 4ac = 0, las raíces serán repetidas x1 = x2 = -b/2.
Las raíces reales de una ecuación cuadrática se pueden calcular por la siguiente
fórmula: (-b ± (b2 - 4ac))/2a
Nota: el programa debe indicar mediante un mensaje cada uno de los casos.

2.- Basándose en el año de fabricación y el peso del automóvil en una fábrica se


determina la tarifa de registro según la siguiente tabla:

Año (modelo) Peso (lb.) Categoría de Peso Tarifa de Registro


1970 o anterior Menos de 2.700 1 Bs. 11.600
2.700 a 3.800 2 Bs. 23.200
Más de 3.800 3 Bs. 34.800
1971 a 1979 Menos de 2. 700 4 Bs. 13.000
2.700 a 3.800 5 Bs. 26.000
Más de 3.800 6 Bs. 39.000
1980 o posterior Menos de 3.500 7 Bs. 12.000
3.500 o más 8 Bs. 46.000
El programa debe aceptar el año y el peso del auto e imprimir la categoría y la
tarifa.

3.- El cuadrante en el cual se ubica una línea dibujada desde el origen está
determinado por el ángulo que la línea forma con el eje positivo de x en la
siguiente forma:

Ángulo del eje positivo de x Cuadrante


Entre 0 y 90 grados I
Entre 90 y 180 grados II
Entre 180 y 270 grados II
Entre 270 y 360 grados IV

El programa debe aceptar el ángulo de la línea como dato de entrada y desplegar


el cuadrante apropiado, según la tabla dada. Si el ángulo es exactamente 0,
90, 180 o 270 grados, la línea resultante no se ubica en ningún cuadrante sino
en cada uno de los ejes respectivos.

4.- Dados tres números A, B y C, enteros y diferentes, el programa debe


imprimirlos en forma descendente.
5.- Dado tres números determinar si la suma de cualquier pareja de ellos es igual
al tercer número. Si se cumple esta condición el programa debe imprimir
“IGUALES”, de no ser así debe escribir “DISTINTAS”.

6.- Se desea saber si un año leído del teclado es bisiesto. (Cada año divisible
por 4 es bisiesto, con excepción de los años que finalizan en 00 - esto es,
divisible por 100 y no divisible por 400).

7.- Escribir un programa para determinar si un atleta se selecciona para corre r


el maratón de Nueva York. Para seleccionar a un corredor, éste debe
haber terminado un maratón anterior en un determinado tiempo. Los
tiempos de calificación son 150 minutos para hombres menores de 40 años
de edad; 175 minutos para hombres mayores de 40 años y 180 minutos
para mujeres.
Los datos a introducir al programa son: sexo, edad y tiempo efectuado en su
anterior maratón.

8.- Los empleados de una fábrica trabajan en dos turnos: diurno y nocturno.
Se desea calcular el sueldo diario de acuerdo a los siguientes puntos:
a) La tarifa de las horas diurnas es de Bs. 500.
b) La tarifa de las horas nocturnas es de Bs. 800.
c) En caso de ser domingo, la tarifa se incrementará en 200 Bs. el turno
diurno y 300 Bs. el turno nocturno.
Se ingresa por teclado el número de horas trabajadas por turno y el día.

9.- Averiguar si, dados dos números leídos del teclado, uno es divisor del otro.

10.- Se introduce por teclado la hora del día en horas, minutos y segundos.
Se desea escribir la hora correspondiente al segundo siguiente (ejemplo, 3h
45m 24s, un segundo después 3h 45m 25s).

11.- Deducir si un número leído del teclado es negativo, positivo o cero.

12.- Escribir un programa que acepte dos números del teclado, calcule su
suma e imprima mensajes de acuerdo al resultado obtenido:
Suma <= 50
Suma > 50 y <= 100
Suma > 100 y <= 200
Suma > 200

13.- Escribir un programa que lea el precio de un artículo desde el teclado y


calcule su precio neto teniendo en cuenta las siguientes hipótesis
+ Precio menor o igual a 10.000 Bs.: sin descuento
+ Precio mayor que 10.000 Bs. y menor que 25.000: descuento del 10%
+ Precio mayor o igual a 25.000 Bs.: descuento del 20%.
14.- Calcular el sueldo neto mensual de un empleado conociendo su pago
por hora trabajada y el número de horas trabajadas al mes. Se sabe
que si el Salario Bruto es mayor de Bs. 1.000.000, el % de descuento
por Impuesto sobre la renta es 5% y el descuento por Seguro Social es
3%. Si el sueldo es menor que 1.000.000 no se le deduce Impuesto
sobre la renta.

15.- Dados tres valores A, B y C que representan los lados de un


triángulo, se desea determinar si esas tres longitudes:
a) Forman un triángulo Equilátero.
b) Forman un triángulo Isósceles.
c) Forman un triángulo Escaleno.

16.- Un cierto acero se gradúa de acuerdo a los resultados de tres


pruebas, que se efectúan para determinar si satisface las
especificaciones siguientes:
- Si el contenido de Carbono está bajo 0.7.
- La dureza Rockwell es mayor que 50.
- La fatiga de tensión es superior a los 80.000 psi (libras por pulgada
cuadrada).

El acero es de grado 10 si supera las tres pruebas; de grado 9 si supera


las pruebas 1 y 2; de grado 8 si sólo pasa la prueba 1 y falla la prueba
2; y de grado 7 si falla la prueba 1.
ESTRUCTURAS DE REPETICIÓN

Las estructuras de Control repetitivas son aquellas en las que una sentencia o
grupo de sentencias se repite muchas veces. Este conjunto de sentencias se
denomina bucle.

Concepto de Bucle: Una estructura de control que permite la repetición de una


serie determinada de sentencias, se denomina bucle, lazo o ciclo (en inglés loop).
A la acción o conjunto de acciones que se repiten en un bucle se les denomina el
cuerpo del bucle y cada repetición del cuerpo del bucle se denomina iteración.
En otras palabras, el cuerpo del bucle contiene la sentencia, o el grupo de
sentencias, que se van a repetir.

Toda estructura de repetición consta de dos tipos de sentencias: la(s) sentencia(s)


usadas para el control de las repeticiones y el cuerpo del bucle.

Las estructuras de repetición se dividen en: Condicionales e Indizadas (o


Indexadas).

DISEÑO DE BUCLES

Para diseñar bucles es necesario tener en cuenta una serie de reglas, con el fin de
de evitar al máximo los errores, minimizar los errores.

1.- Inicialización de Variables: Significa dar valores iniciales a las


variables antes de que sean utilizadas en la ejecución del programa. Turbo Pascal
inicializa las variables por defecto cuando no se les han asignado valores
mediante sentencias de lectura o sentencias de asignación. Las variables
numéricas se inicializan a cero, las variables lógicas se inicializan a falso y las
variables tipo cadena de caracteres (string) a cadena vacía. Pero es mejor
asegurarse; por tanto se recomienda asignar valores a las variables mediante
sentencias de lectura o de asignación antes de ser utilizadas (inicialización).
¿A qué valores se debe inicializar? Dependerá de cada situación, pero
normalmente se suele inicializar las variables con valores de cero ó uno (0 ó 1).

2.- Bucles Infinitos: Un bucle que se repite continuamente y que no se


termina nunca, se llama bucle infinito. Se debe tener especial cuidado en tratar de
modificar la condición en el interior del bucle, para cambiar su valor y así detener
el bucle.
Como regla general, es más seguro, para terminar un bucle, utilizar
comparaciones mayor o menor que, en lugar de probar igualdades o
desigualdades. Puesto que los números reales se almacenan como cantidades
aproximadas, las comparaciones de igualdad entre números reales no tienen
sentido. Siempre que se comparen valores reales, deben utilizarse los operadores:
mayor, mayor o igual, menor, menor o igual, (>, ≥, <, ≤).
ESTRUCTURAS DE REPETICIÓN CONDICIONALES

Se denominan estructuras de repetición condicionales, a las estructuras de control


repetitivas en las que se utiliza una condición (expresión lógica) para controlar las
iteraciones.

Las estructuras de Repetición Condicionales son: Repita Mientras y Repita Hasta,


que codificadas en Pascal son: While-Do y Repeat-Until.

I.- LA ESTRUCTURA REPITA MIENTRAS

La estructura de repetición “Repita Mientras” (While -


Do) es aquella en la que, en general, el número de
iteraciones no se conoce por anticipado y el cuerpo del
bucle se repite mientras se cumple una determinada
condición.
Condición
F
Cuando se ejecuta la sentencia Repita Mientras,
(While - Do), primero se evalúa la condición (expresión
lógica); si ésta se cumple, es decir, si la expresión
V
lógica se evalúa a verdadero, entonces se ejecuta el
cuerpo del bucle y se evalúa nuevamente la condición. Cuerpo
Si la condición no se cumple (si la expresión lógica se del bucle
evalúa a falso), no se ejecuta ninguna acción y el
programa prosigue en la sentencia inmediata siguiente
después del bucle.

Este proceso se repite mientras la expresión lógica (condición) permanezca


verdadera. Después de cada iteración, la condición se evalúa y se verifica de
nuevo, y si es verdadera, el bucle se repite nuevamente; si cambia de verdadera a
falsa, la estructura de repetición finaliza y el control del programa se transfiere a la
sentencia siguiente, inmediatamente después del lazo.

Reglas de Funcionamiento

1.- La condición se evalúa antes y después de cada ejecución del bucle. Si la


condición es verdadera, se ejecuta el bucle, y si es falsa, el control pasa a la
instrucción siguiente después del bucle.
2.- Si la condición no se cumple cuando se ejecuta el bucle por primera vez, el
cuerpo del bucle no se ejecutará nunca. En este caso se dice que el bucle se
ha ejecutado cero veces.
3.- Mientras la condición sea verdadera, el bucle permanecerá ejecutándose. Esto
significa que el bucle se ejecutará indefinidamente, a menos que se cambie el
valor de la condición en el interior del bucle, haciendo que su valor pase a
falso. Si la expresión nunca cambia de valor, entonces el bucle no termina
nunca y se denomina bucle infinito.

La sentencia Repita Mientras se ejecuta mientras la


No olvidar condición sea verdadera.

PSEUDOCÓDIGO

A aquellas estructuras cuyo cuerpo del bucle está conformado por una sola
sentencia, se les identifica como Sentencias Simples. A las sentencias cuyo
cuerpo del bucle contiene más de una sentencia, se les denomina Sentencias
Compuestas.

Sentencia Simple: Sentencia Compuesta:


Mientras Expresión lógica Repita Mientras Expresión lógica Repita
Sentencia Sentencia 1
{Fin Repita Mientras} Cuerpo
Aclaratoria: en lenguaje natural se usa Mientras -
del Bucle
Repita, por su semejanza con el inglés (While - Sentencia n
Do), en lugar de Repita - Mientras, usado para
unificar las estructuras de repetición. En español, {Fin Repita Mientras}
todas comienzan con la misma palabra.

Nota: Las frases encerradas entre llaves, “{...}” deben ser interpretadas como comentarios.
Usados para aclarar. No representan instrucciones o sentencias ejecutables, no realizan
ninguna acción.

CODIFICACIÓN (en Turbo Pascal)

Sentencia Simple: Sentencia Compuesta:

While Expresión lógica Do While Expresión lógica Do


Sentencia; Begin
Sentencia 1;
No olvidar: En una Sentencia Simple el : Cuerpo
cuerpo del bucle consta de una sola : del Bucle
instrucción, en tanto que en una compuesta Sentencia n
consta de dos o más.
End;

CONTROL DE LOS BUCLES

Para construir la expresión lógica que conforme la condición a utilizar para


controlar las repeticiones en este tipo de estructuras, nos podemos servir de:
1.- Una Variable Contador
2.- Una Pregunta
3.- Una Variable Centinela
4.- Una Condición Inherente
5.- Una Variable Interruptor o Bandera (variable lógica)

I.1.- Controlado por Variable Contador

En este contexto, un Contador es una


Formato:
variable que se utiliza para contar el
1.- Conocer Valor final
número de veces que ha de repetirse 2.- Asignar a Contador un valor inicial
el bucle. Las iteraciones se controlan 3.- Mientras Contador < Valor final Repita
por una variable cuyo valor representa Sentencias :
a un contador. :

Básicamente, este mecanismo se Incrementar Contador


sirve de una variable que actúa como {Fin de Repita Mientras}
contador de las repeticiones del bucle

Un bucle controlado por contador consta de tres partes:

a.- Inicialización de la variable de control del bucle: Antes del comienzo del bucle,
se debe dar un valor inicial a la variable Contador, que es la variable que
controla el número de repeticiones. Si en el cuerpo del bucle se utiliza una
variable acumulador, ésta también deberá ser inicializada con anterioridad.
Como su nombre lo indica, una variable acumulador permite acumular valores.

b.- Condición o expresión lógica: En la expresión lógica que conforma la condición


se comprueba el valor de la variable de control al compararlo con el valor de la
variable contador.

c.- Incremento del valor de la variable de control del bucle: Cada vez que el cuerpo
de un bucle se ejecuta, el valor del contador se incrementa (normalmente en
uno (1)).

En general se utiliza un bucle controlado por un contador, cuando se puede


conocer con anticipación cuantas iteraciones se deben ejecutar exactamente.

La diferencia principal entre una variable contador y una variable acumulador es


que en el contador, el incremento es constante (normalmente una unidad, uno,
(1)), mientras que en el acumulador, el incremento es variable.
Con la finalidad de ilustrar mejor su funcionamiento, se presentan a continuación
algunos lazos con diversos valores iniciales para el contador y diferentes
operadores relacionales:
Normalmente los contadores se inicializan a 0 ó a 1, dependiendo del diseño
del programa. En el uso de contadores se deben tener en cuenta al menos tres
factores:
1) el valor inicial,
2) el valor final,
3) el operador relacional utilizado para comprobar la terminación del bucle.

J=0 J=0
Mientras J < 5 Repita Mientras J <= 5 Repita
Sentencias Sentencias
: :
J=J+1 J=J+1
Fin Mientras Fin Mientras

(a) Se ejecuta 5 veces (b) Se ejecuta 6 veces

J=1 J=1
Mientras J < 5 Repita Mientras J <= 5 Repita
Sentencias Sentencias
: :
J=J+1 J=J+1
Fin Mientras Fin Mientras

(c) Se ejecuta 4 veces (d) Se ejecuta 5 veces


A continuación se muestran algunos ejemplos resueltos utilizando la estructura de
control Repita Mientras, controlada por una variable contador.

Ejemplo I.1.1: Programa para contar 50 números leídos del teclado

Diagrama de Flujo Algoritmo


(Sección del programa)
: Inicialización
Final = 50 Final = 50
Cuenta = 1 :
Cuenta = 1
Mientras Cuenta <= Final Repita
Sentencias
: Condición
:
Cuenta = Cuenta + 1
F Fin del Mientras
Cuenta <= Final :

Incremento
V

Sentencias
:
Cuenta = Cuenta + 1
Ejemplo I.1.2: Calcular la suma de N números enteros leídos del teclado.

Diagrama de Flujo Algoritmo

Inicio 1- Inicio
2- Escribir („¿Cuantos números desea sumar?‟)
3- Leer (N)
¿Cuántos
4- Asignar Contador = 0 {Inicialización de Variables}
números?
5- Asignar Suma = 0
6- Mientras Contador < N Repita
N 6.1- Escribir („Introduzca Sumando‟)
6.2- Leer (Num)
6.3- Hacer Suma = Suma + Num {Incrementar Acumulador}
6.4- Asignar Contador = Contador + 1 {Incrementar Contador}
Contador = 0 {Fin Repita Mientras}
Suma = 0 7- Escribir („La suma de los,‟N,‟números es:„, Suma)
8- Fin

F
Contador < N

V
Introduzca
Sumando

Num

Suma = Suma + Num


Contador = Contador + 1

„El resultado es„,


Suma

Inicio
I.2.- Controlado por Pregunta

Este método consiste simplemente en preguntar al usuario si existen más


entradas. Es decir, se solicita al usuario la continuación del bucle.
Debe ponerse especial cuidado en indicar al usuario los tipos de respuestas
posibles, que le permitirán salir del lazo. Por ejemplo: S/N, Si/No, etc.
En general, este tipo de control se utiliza cuando no se sabe, a priori, el número
exacto de iteraciones a realizar.

Ejemplo I.2.1: Realizar un programa para calcular el producto de N números


introducidos por teclado.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Escribir „Cuantos factores tiene el producto?‟
3.- Leer (N)
Prod = 1 4.- Asignar Prod = 1 {Inicialización}
Resp = „s‟ 5.- Asignar Resp = „s‟ {de variables}
6.- Mientras (Resp = „s‟) ó (Resp = „S‟) Repita
6.1.- Escribir „Introduzca número‟
6.2.- Leer (Num)
6.3.- Asignar Prod = Prod + Num
6.4.- Escribir „Desea continuar? (S/N)‟
6.5.- Leer (Resp)
Resp = „s‟ No {Fin Repita Mientras}
ó
7.- Escribir „El producto de los‟,N,‟ números es ‟,Prod
Resp =‟S‟
8.- Fin
Si

Sumando?
¿Número?
Recomendaciones:
- Deben colocarse todas las posibles respuestas
en mayúsculas y minúsculas o en
Num
combinaciones.
- Deben solicitarse respuestas cortas para
disminuir el número de combinaciones posibles.
Prod = Prod * Num - No es absolutamente necesario inicializar la
variable que contendrá la respuesta, sin embargo
es recomendable asignarle un valor inicial, (Resp
Continuar en este caso) para asegurar el ingreso al bucle.
S/N?

Resp

Suma

Fin
I.3.- Controlado por Valor Centinela

Un centinela es un valor especial utilizado para señalar el final de una lista de


datos. El valor elegido debe ser totalmente distinto a todos los posibles valores de
la lista, para que se pueda utilizar para señalar el final de la lista. De igual manera
que en la técnica anterior, debe ponerse especial cuidado en indicar al usuario el
tipo de respuesta que le permitirá salir del lazo.

Ejemplo I.3.1: Calcular la suma de N números introducidos por teclado.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Inicializar Suma = 0 {Inicialización}
3.- Escribir „Introduzca sumando‟
Suma = 0 4.- Leer (Num)
5.- Mientras Num >= 0 Repita
5.1.- Asignar Suma = Suma + Num
Sumando? 5.2.- Escribir „Introduzca sumando‟
5.3.- Escribir „Valor Negativo para detener‟
5.3.- Leer (Num)
{Fin Repita Mientras}
Num 6.- Escribir „El resultado de la suma es‟, Suma
7.- Fin

Num >= 0 F

Suma = Suma + Num

Sumando?

Negativo
Detener

Num

Suma

Fin
I.4.- Controlado por Condición Inherente

En este caso, para controlar el lazo se construye y se evalúa una condición


apropiada al problema particular que se está tratando, que se ha planteado de
acuerdo a las características del problema que se desea resolver. Por esa razón
se le denomina inherente. La estructura se repetirá mientras la condición sea
verdadera.

Ejemplo I.4.1: Para continuar con un ejemplo similar a los mostrados en los
controles anteriores, se propone realizar un programa para calcular la suma de N
números introducidos por teclado, pero en este caso, se debe detener las
iteraciones cuando el valor de la suma sea superior un número cualquiera dado,
(10 en este caso).

Diagrama de Flujo Algoritmo

Inicio
1.- Inicio
2.- Asignar Suma = 0 {Inicialización}
Suma = 0 3.- Mientras Suma < 10 Repita
3.1.- Escribir „Introduzca Sumando‟
3.2.- Leer Num
3.3.- Calcular Suma = Suma + Num
F {Fin Repita Mientras}
Suma < 10 4.- Escribir „La suma es „, Suma
5.- Fin
V
¿Sumando?

Num

Suma = Suma + Num

Suma

Fin
Ejercicio I.4.2: Hacer un programa que lea un capital C y que calcule en cuántos
meses se duplica, si lo colocamos a un interés compuesto del X % mensual.

Diagrama de Flujo Algoritmo

Inicio
1.- Inicio
2.- Inicializar Meses = 0
3.- Escribir ('Cual es el Capital a invertir?')
Meses = 0 4.- Leer (Capital_Ini)
5.- Escribir ('A que interés lo desea colocar?')
6.- Leer (Interes)
Capital a 7.- Calcular Capital_Fin = 2 * Capital_Ini
invertir? 8.- Mientras (Capital_Ini < Capital_Fin) Repita
8.1.- Calcular Capital_Ini = Capital_Ini*(1+Interes/100)
8.2.- Incrementar Meses = Meses + 1
Capital_Ini {Fin Repita Mientras}
9.- Escribir ('El capital se duplica a los ', Meses, ' meses');
10.- Fin
¿Interés?

Interes

Capital_Fin = Capital_Ini * 2

No
Capital_Ini < Capital_Fin

Si
Capital_Ini = Capital_Ini * (1 + Interes/100)

Meses = Meses + 1

„Capital se
duplica en „,
Meses

Fin
I.5.- Controlado por Interruptor o Bandera

Una bandera o interruptor es una variable que se utiliza para conservar el


estado (verdadero o falso) de una condición. Se denomina bandera o interruptor
por asociarse a un interruptor (encendido o apagado) o a una bandera (arriba o
abajo). El valor de interruptor debe inicializarse antes de comenzar el bucle y debe
cambiar su estado (valor) dentro del cuerpo del bucle para preparar la siguiente
iteración.

Las banderas o interruptores se representan con variables lógicas. Estas


variables se inicializan con uno de los dos posibles valores (Verdadero/Falso) y
toman el otro valor cuando sucede el evento que se está verificando.

Ejemplo I.5.1: Programa que verifica si un número introducido por teclado es primo
1.- Inicio
2.- Asignar a Primo = Verdadero
3.- Asignar a Divisor = 2
4.- Escribir „Introduzca un número entero > 0‟
5.- Leer (Numero)
6.- Mientras ((Divisor < Numero) y Primo) Repita
6.1.- Si Numero Mod Divisor = 0
Entonces
6.1.1.- Asignar a Primo = Falso
{Fin del Si}
6.2.- Asignar a Divisor = Divisor + 1
{Fin del Repita Mientras}
7.- Si Primo = Verdadero
Entonces
7.1.- Escribir (Numero,‟ es Primo‟)
De lo Contrario
7.2.- Escribir (Numero,‟ No es Primo‟)
{Fin del Si}
8.- Fin
Ejercicios Resueltos

Ejercicio I.1: Calcular cuántos de los N números enteros leídos del teclado, son
negativos, positivos o ceros.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Escribir („¿Cuantos números desea introducir?‟)
3.- Leer (N)
¿Cuántos? 4.- Inicializar Contador = 0
5.- Inicializar ContN = 0 {Contador de negativos}
6.- Inicializar ContC = 0 {Contador de ceros}
7.- Inicializar ContP = 0 {Contador de positivos}
N 8.- Mientras Contador < N Repita
6.1.- Escribir („Introduzca número‟)
6.2.- Leer (Num)
Contador = 0 6.3.- Comparar Si Num < 0
ContN = 0 Entonces
ContC = 0 6.3.1.- Incrementar ContN = ContN + 1
ContP = 0 De lo contrario
6.3.2.- Comparar Si Num = 0
Entonces
6.3.2.1.- Incrementar ContC = ContC + 1
De lo contrario
6.3.2.2.- Incrementar ContP = ContP + 1
No
Contador < N 6.4.- Incrementar Contador = Contador + 1
{Fin Repita Mientras}
7.- Escribir („Negativos:‟,ContN,‟Ceros:‟,ContC,‟Positivos:„, ContP)
Si 8.- Fin

¿Número?

Num Contador = Contador + 1

Si
Num < 0 ContN = ContN + 1

No

Si
Num = 0 ContC = ContC + 1
No

ContP = ContP + 1

ContN
ContC
ContP

Fin
1.- Inicio
2.- Escribir („¿Cuantos números desea introducir?‟)
3.- Leer (N)
4.- Inicializar Contador = 0
5.- Inicializar ContN = 0 {Contador de negativos}
6.- Inicializar ContC = 0 {Contador de ceros}
7.- Inicializar ContP = 0 {Contador de positivos}
8.- Mientras Contador < N Repita
6.1.- Escribir („Introduzca número‟)
6.2.- Leer (Num)
6.3.- Comparar Si Num < 0
Entonces
6.3.1.- Incrementar ContN = ContN + 1
De lo contrario
6.3.2.- Comparar Si Num = 0
Entonces
6.3.2.1.- Incrementar ContC = ContC + 1
De lo contrario
6.3.2.2.- Incrementar ContP = ContP + 1
6.4.- Incrementar Contador = Contador + 1
{Fin Repita Mientras}
7.- Escribir („Negativos:‟,ContN,‟Ceros:‟,ContC,‟Positivos:„, ContP)
8.- Fin
Ejercicio I.2: Hacer un programa que lea N notas del teclado y determine cuál es la
mayor.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Escribir („Cuántas notas desea introducir?‟)
¿Cuántas 3.- Leer (N)
Notas? 4.- Asignar a Cont = 0
5.- Asignar a Mayor = 0
6.- Mientras (Cont < N) Repita
N Entonces
6.1.- Escribir („Introduzca nota‟)
6.2.- Leer (Nota)
6.3.- Comparar Si (Nota > Mayor)
Cont = 0
Mayor = 0 Entonces
6.3.1.- Asignar a Mayor = Nota
{Fin del Si}
6.4.- Incrementar Cont = Cont + 1
{Fin del Repita Mientras}
7.- Escribir („La mayor nota es „, Mayor)
F 8.- Fin
Cont < N

V
Nota: Se le asigna el menor valor posible a la
¿Nota? variable Mayor (cero en este caso), para
asegurarse de que cualquier nota que se
introduzca por teclado sea mayor que ésta nota
inicial.
Nota En caso de involucrarse en el problema a valores
negativos u otros, se le asignará al valor inicial, el
valor más negativo posible; siempre opuesto al
F común de los valores a ser introducidos por
Nota > Mayor teclado.

V
Mayor = Nota

Cont = Cont + 1

„La mayor
nota es‟,
Mayor

Fin
Ejercicio I.3: En un año X, (introducido por teclado), la ciudad A tiene 3.5 millones
de habitantes y una tasa de crecimiento del 7% anual y la ciudad B tiene 5
millones y una tasa de crecimiento del 5% anual. Si el crecimiento poblacional se
mantiene constante en las dos ciudades, hacer un programa que calcule en qué
año (o cuántos años después), la población de la ciudad A es mayor que la de la
ciudad B.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Asignar a A= 3.5
3.- Asignar a B = 5.0
4.- Escribir ('¿Año de inicio? ')
A = 3.5
5.- Leer (Año)
B = 5.0
6.- Asignar a Cont = Año
7.- Mientras (A <= B) Repita
7.1.- Calcular A = A * 1.07
¿Año de 7.2.- Calcular B = B * 1.05
Inicio? 7.3.- Incrementar Cont = Cont + 1
{Fin Repita Mientras}
8.- Escribir ('Población ciudad A > ciudad B en el año ', Cont)
Año 9.- Fin

Cont = Año

No
A <= B

Si

A = A * 1.07
B = B * 1.05
Cont = Cont + 1

„Ciudad A >
Ciudad B en el
Año „, Cont

Fin
Ejercicio I.4: Hacer un programa que lea un número N, entero y positivo, de
cualquier número de dígitos, que calcule la suma de sus dígitos y que la imprima
en pantalla, junto con el número leído. Ej.: n = 53471, entonces la suma de sus
dígitos es suma = 5 + 3 + 4 + 7 + 1 =20.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Escribir ('Introduzca el numero')
„Introduzca 3.- Leer (N)
Número‟ 4.- Inicializar Suma = 0
5.- Asignar a M = N
6.- Mientras N <> 0 Repita
N 6.1.- Calcular D = N Div 10
6.2.- Calcular R = N - D * 10
6.3.- Acumular Suma = Suma + R
Suma = 0 6.4.- Asignar a N = D
M=N {Fin Repita Mientras}
7.- Escribir ('El numero es ', M,' y la suma de sus dígitos es ', Suma)
8.- Fin

F
N<>0

V
D = N Div 10
R = N - D * 10
Suma = Suma + R
N=D

„El número es‟, N,


„y la suma es‟,
Suma

Fin
I.a.- Codificación en Turbo Pascal

Ejemplo I.1.2: Calcular la suma de N números enteros leídos del teclado.

Program Sumar_Naturales;
{Programa que calcula la suma de N enteros leídos del teclado}

Uses
Crt;
Var
N, Contador, Num, Suma : Integer;
Begin
Clrscr;
Writeln(„Cuantos números desea sumar?‟);
Readln(N);
Contador := 0;
Suma:= 0;
While Contador < N Do
Begin
Writeln(„Introduzca Sumando‟);
Readln(Num);
Suma := Suma + Num;
Contador := Contador + 1
End;
Writeln(„La suma de los,‟N,‟números es : „, Suma);
Readln
End.
Ejemplo I.1.3: Calcular cuántos de los N números enteros leídos del teclado, son
negativos, positivos o ceros.

Program Cuenta_Numeros;
(* Programa que cuenta cuantos números positivos, ceros y negativos *)
(* se introducen por teclado *)

Uses
Crt;

Var
ContN, ContC, ContP, N, Cont, X : Integer;

Begin
Clrscr;
ContN := 0; {Contador de negativos}
ContC := 0; {Contador de ceros}
ContP := 0; {Contador de positivos}
Cont := 0;
Writeln ('Cuantos números va a introducir?');
Readln (N);
While Cont < N Do
Begin
Writeln ('Introduzca número');
Readln (X);
If X < 0
Then
ContN := ContN + 1
Else
If X = 0
Then
ContC := ContC + 1
Else
ContP := ContP + 1;
Cont := Cont + 1
End;
Writeln ('Números introducidos ', N,' Negativos ', CN,' Cero ', CC, ' Positivos',
CP);
Readln
End.
Ejemplo I.1.4: Hacer un programa que lea N notas del teclado y determine cuál es
la mayor.

Program Nota_Alta;
{Programa que determina cual es la mayor de un grupo de notas introducidas por
teclado}

Uses
Crt;

Var
X, CN, Mayor, Cont : Integer;

Begin
Clrscr;
Cont := 0;
Mayor := 0;
Writeln ('¿Cuantas notas desea introducir?');
Readln (N);
While Cont < N Do
Begin
Writeln ('Introduzca nota');
Readln (Nota);
If Nota > Mayor
Then
Mayor := Nota;
Cont := Cont + 1;
End;
Writeln('La mayor de las ', CN, ' notas es ', Mayor);
Readln
End.
Ejemplo I.2.1: Realizar un programa para calcular el producto de N números
introducidos por teclado.

Program Producto;
{Programa para calcular el producto de N números introducidos por teclado}

Uses
Crt;

Var
Prod, Num : Integer;
Resp : Char;

Begin
Clrscr;
Writeln („Cuantos factores tiene el producto?‟);
Readln (Num);
Prod := 1;
Resp := ´s‟;
While (Resp = „s‟) or (Resp = „S‟) Do
Begin
Writeln („Introduzca número‟);
Readln (Num);
Prod := Prod * Num;
Writeln („¿Desea continuar?‟);
Readln (Resp)
End;
Writeln („El producto de los „, N,‟ números es „, Prod);
Readln
End.
Ejemplo I.3.1: Calcular la suma de N números introducidos por teclado.

Program Suma_Centinela;
{Programa para Calcular la suma de N números introducidos por teclado.}

Uses
Crt;

Var
Suma, Num : Integer;

Begin
Clrscr;
Suma := 0;
Writeln („Introduzca Sumando‟);
Readln (Num);
While Num >= 0 Do
Begin
Suma := Suma + Num;
Writeln („Introduzca Sumando‟);
Writeln („Valor Negativo para detener‟);
Readln (Num);
End;
Writeln („El resultado de la suma es‟, Suma);
Readln
End,
Ejemplo I.4.1: Realizar un programa para calcular la suma de N números
introducidos por teclado, pero en este caso, se debe detener las iteraciones
cuando el valor de la suma sea superior un número cualquiera dado, (10 en este
caso).

Program Suma_Inherente;
{ …}
Uses
Crt;

Var
Suma, Num : Integer;

Begin
Clrscr;
Suma := o;
While Suma < 10 Do
Begin
Writeln („Introduzca Sumando‟);
Readln (Num);
Suma := Suma + Num;
End;
Writeln („La suma es „, Suma);
Readln
End.
Ejercicio I.4.2: Hacer un programa que lea un capital C y que calcule en cuántos
meses se duplica, si lo colocamos a un interés compuesto del X % mensual.

Program Capital;
{Programa que calcula en cuantos meses se duplica un capital si se coloca a un
interés compuesto de X % mensual}

Uses
Crt, Dos;

Var
Meses : Integer;
Capital_Ini, Capital_Fin, Interes : Real;

Begin
Meses := 0;
Writeln ('Cuál es el capital a invertir?');
Readln (Capital_Ini);
Writeln ('A que interés desea colocarlo?');
Readln (Interes);
Capital_Fin := 2 * Capital_Ini;
While (Capital_Ini < Capital_Fin) Do
Begin
Capital_Ini := Capital_Ini * (1 + Interesl/100);
Meses := Meses + 1
End;
Writeln ('El capital se duplica a los ', Meses, ' meses');
Readln
End.
Ejemplo I.4.3: En un año X, (introducido por teclado), la ciudad A tiene 3.5 millones
de habitantes y una tasa de crecimiento del 7% anual y la ciudad B tiene 5
millones y una tasa de crecimiento del 5% anual. Si el crecimiento poblacional se
mantiene constante en las dos ciudades, hacer un programa que calcule en qué
año (o cuántos años después), la población de la ciudad A es mayor que la de la
ciudad B.

Program Ciudades;
{....}

Uses
Crt;

Var
A, B : Real;
Anio, Cont : Integer;

Begin
A:= 3.5;
B := 5.0;
Writeln('Año de inicio? ');
Readln (Anio);
Cont := 1;
While (A <= B) Do
Begin
A := A * 1.07;
B := B * 1.05;
Cont := Cont + 1
End;
Writeln ('La población de A será > B ', Cont,' años después, en el año ', Anio + Cont);
Readln
End.
Ejercicio I.4.4: Hacer un programa que lea un número N, entero y positivo, de
cualquier número de dígitos, que calcule la suma de sus dígitos y que la imprima
en pantalla, junto con el número leído. Ej.: n = 53471, entonces la suma de sus
dígitos es suma = 5 + 3 + 4 + 7 + 1 =20.

Program Sumadigitos;
{Programa que calcula la suma de los dígitos de un número leído del teclado}

Uses
Crt;

Var
Suma, N, M, D, R : Integer;

Begin
Clrscr;
Suma := 0;
Writeln ('Introduzca el numero');
Readln (N);
M := N;
While N <> 0 Do
Begin
D := N Div 10;
R := N - D * 10;
Suma := Suma + R;
N := D;
End;
Writeln ('El numero es ', M,' y la suma de sus dígitos es ', Suma);
Readln
End.
Ejemplo I.5.1: Programa que verifica si un número introducido por teclado es primo

Program Num_Primos;
{Programa que verifica si un número introducido por teclado es primo}

Uses
Crt;
Var
Primo : Bolean;
Numero, Divisor : Integer;
Begin
Primo := True;
Divisor := 2;
Writeln („Introduzca un número entero > 0‟);
Readln (Numero);
While (Divisor < Numero) and Primo Do
Begin
If Numero Mod Divisor = 0
Then
Primo := False;
Divisor := Divisor + !
End;
If Primo = True
Then
Writeln (Numero,‟ es Primo‟)
Else
Writeln (Numero.‟ No es Primo‟);
Readln
End.
II.- La Estructura Repita Hasta

La sentencia Repita Hasta es una estructura de repetición condicional que se


ejecuta hasta que la condición se hace verdadera. En cierto sentido, es opuesta a
la sentencia Repita Mientras, que se repite mientras la condición es verdadera, en
tanto que la sentencia Repita Hasta, se repite “mientras la condición es falsa”, o
como se ha dicho, hasta que sea verdadera.

El diagrama de flujo de esta sentencia se


muestra en la figura a la derecha.

Después de cada iteración, se evalúa la


condición. Si es verdadera, el bucle se termina Cuerpo del
Bucle
y se ejecuta la sentencia inmediata siguiente ( Sentencias )
después del bucle. Si la condición es falsa, el
cuerpo del bucle se repite y continúa
repitiéndose hasta que la condición se haga
verdadera. Falsa Verdadera
Condición
La ejecución de esta estructura es como sigue:
1. Se ejecuta(n) la(s) sentencia(s) del cuerpo
del bucle.
2. Se evalúa la condición lógica. Si no se cumple, se repite(n) la(s) sentencia(s)
del cuerpo del bucle.
3. Se evalúa nuevamente la condición lógica, y si no se cumple, se repite la
ejecución.
4. Así, hasta que la condición se cumpla, en ese momento se interrumpe el ciclo y
el flujo de control pasa a la instrucción inmediata siguiente después del lazo.
La diferencia más obvia con la estructura anterior, es en cuanto al orden de los
elementos que las conforman. En esta se ejecuta primero el cuerpo del ciclo y por
último se evalúa la condición, mientras que en aquella se evalúa primero la
condición lógica y luego se ejecuta el cuerpo del bucle.
PSEUDOCÓDIGO CODIFICACIÓN EN TURBO PASCAL
Formato: Sintaxis:
Repita Repeat
Sentencia 1 Sentencia 1
: Cuerpo : Cuerpo
del Bucle del Bucle
Sentencia n Sentencia n
Hasta Condición Until Condición

Nota: en esta estructura no difiere la sintaxis de las sentencias simples y


compuestas. Todas las sentencias ubicadas entre las palabras Repita y Hasta,
(Repeat - Until), conforman el cuerpo del lazo y se van a repetir.
REGLAS DE FUNCIONAMIENTO

1. La condición (expresión lógica) se evalúa al final del bucle, después de


haberse ejecutado todas las sentencias.
2. Si la expresión lógica es falsa, se vuelve a repetir el bucle y se ejecutan
nuevamente todas las sentencias.
3. Si la expresión lógica es verdadera, se sale del bucle y se ejecuta la
sentencia inmediatamente siguiente al lazo (después del Hasta / Until).
4. La sintaxis, en Turbo Pascal, no requiere Begin y End.

Nota: en la estructura “Repita Hasta”, el cuerpo del bucle se ejecuta al menos


una vez, en cambio en la estructura “Repita Mientras”, el cuerpo del bucle puede
no ejecutarse nunca.

Estas estructuras son ideales para realizar la validación de los datos al momento
de ingresarlos.

Se pueden utilizar los mismos controles para detener las iteraciones, usados en la
estructura expuesta anteriormente, pero adaptados al mecanismo de esta
estructura. Estos controles son:

II.1.- Controlado por Variable Contador

Se controlan las iteraciones haciendo uso de una variable que sirve como
Contador de las repeticiones del lazo. El mecanismo es muy parecido al utilizado
en la estructura Repita Mientras. Consta igualmente de tres partes, pero la
disposición en el programa cambia ligeramente. En este caso, la ubicación de las
componentes es la siguiente:

a.- Inicialización de la variable de control del bucle: De igual manera, se debe dar
un valor inicial a la variable Contador, (que es la variable que controla el
número de repeticiones), antes del comienzo del bucle. Si en el cuerpo del
bucle se utiliza una variable acumulador, ésta también deberá ser inicializada
con anterioridad. Como se ha dicho anteriormente, una variable acumulador se
utiliza para acumular una serie de valores.

b.- Incremento del valor de la variable de control del bucle: El valor del contador
debe incrementarse cada vez que el cuerpo de un bucle se ejecuta. Este
incremento se realiza antes de evaluar la condición. Es la instrucción que
permitirá cambiar el estado de la condición y evitará que el bucle se repita
indefinidamente.

c.- Condición o expresión lógica: Por último, se evalúa la condición. Como se ha


expresado en la estructura de repetición anterior, es en la expresión lógica que
conforma la condición, donde se controlan realmente las iteraciones, al
comparar el valor de la variable de control con el valor de la variable contador.
En general se utiliza un bucle controlado por un contador, cuando se puede
conocer con anticipación cuantas iteraciones se deben ejecutar exactamente.
Con la finalidad de establecer comparaciones fácilmente, con la estructura de
repetición anterior, se presentará el mismo ejemplo en los diversos tipos de control
para esta estructura.

Ejemplo II.1.1: Hacer un programa para calcular la suma de N números


introducidos por teclado.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Escribir („¿Cuántos números desea sumar?‟)
3.- Leer (N)
¿Cuántos
4.- Asignar Contador = 0 {Inicialización}
números?
5.- Asignar Suma = 0 {de variables}
6.- Repita
N 6.1.- Escribir („Introduzca sumando‟)
6.2.- Leer (Num)
6.3.- Calcular Suma = Suma + Num
6.4.- Hacer Contador = Contador + 1 {Incremento}
Contador = 0 Hasta que Contador >= N
Suma = 0 7.- Escribir („El resultado es „, Suma)
8.- Fin

Introduzca
Sumando

Num

Suma = Suma + Num


Contador = Contador + 1

F
Contador ≥ N

„El resultado es„,


Suma

Inicio
II.2.- Controlado por Pregunta.

En este método de control de las iteraciones, simplemente se debe preguntar al


usuario si desea continuar ejecutando la estructura. Para su implementación
deben tomarse en cuenta las mismas consideraciones expuestas en la estructura
Repita Mientras.
En general, se usa un control por pregunta cuando no se conoce por anticipado
cuántas iteraciones se van a realizar.

Ejemplo II.2.1: Calcular la suma de N números introducidos por teclado.

Inicio 1.- Inicio


2.- Asignar Suma = 0 {Inicialización}
3.- Repita
Suma = 0 3.1.- Escribir („Introduzca Sumando‟)
3.2.- Leer (Num)
3.3.- Calcular Suma = Suma + Num
3.4.- Escribir („Desea Continuar? (S/N)‟)
3.5.- Leer (Resp)
Introduzca Hasta (Resp = „N‟) ó (Resp = „n‟)
Sumando 4.- Escribir („El resultado de la suma es „, Suma)
5.- Fin

Num

Suma = Suma + Num

„¿Desea Continuar?
(S/N)‟

Resp

F
Resp = „N‟

V
„El resultado es„,
Suma

Inicio
II.3.- Controlado por Valor Centinela

Como se ha explicado anteriormente, un centinela es un valor especial que se


utiliza para señalar el final de una lista de datos. En este sentido, el carácter de
especial, se lo confiere a ese valor, el hecho de ser completamente distinto a los
valores contenidos en la lista de datos. Por ejemplo, si se está trabajando con un
grupo de datos positivos, el centinela adoptado podría ser el cero ó un valor
negativo, o viceversa.
De igual manera que el método de control anterior, en general, se usa el control
por centinela cuando no se conoce por anticipado cuántas iteraciones se van a
realizar.

Ejercicio II.3.1: Calcular la suma de N números introducidos por teclado.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Asignar Suma = 0 {Inicialización}
3.- Escribir „Introduzca Sumando‟
Suma = 0
4.- Leer (Num)
5.- Repita
„Introduzca 5.1.- Calcular Suma = Suma + Num
Sumando‟ 5.2.- Escribir „Introduzca Sumando‟
5.3.- Escribir „Valor negativo para detener‟
5.3.- Leer (Num)
Num Hasta Num <= 0
6.- Escribir „El resultado de la suma es ‟, Suma
7.- Fin

Suma = Suma + Num

„Introduzca Sumando
Valor Negativo para
Detener „

Num

F
Num <= 0

V
„El resultado es„,
Suma

Inicio
II.4.- Controlado por Condición Inherente

En este caso, para controlar el lazo se construye y se evalúa una condición propia
al problema particular que se está tratando. La denominaremos condición
inherente, pues está unida al problema, concebida para resolverlo. La estructura
se repetirá hasta que la condición sea verdadera.

Ejemplo II.4.1: De igual manera que en la estructura expuesta anteriormente, con


la finalidad de continuar con un ejemplo similar a los mostrados en los controles
anteriores, se propone el siguiente ejercicio:
Realizar un programa para calcular la suma de N números introducidos por
teclado, pero en este caso, se debe detener las iteraciones cuando el valor de la
suma sea superior un número cualquiera dado, (10 en este caso).

Diagrama de Flujo Algoritmo

Inicio
1.- Inicio
2.- Asignar Suma = 0 {Inicialización}
Suma = 0 3.- Repita
3.1.- Escribir „Introduzca Sumando‟
3.2.- Leer Num
3.3.- Calcular Suma = Suma + Num
Hasta (Suma >= 10)
¿Sumando?
4.- Escribir „La suma es „, Suma
5.- Fin
Num

Suma = Suma + Num

F
Suma >= 10

V
Suma

Fin
Ejemplo II.4.2: Se deja caer una pelota desde una altura X. Se sabe que cada
rebote es 10% menor que el anterior. Hacer un programa que lea la altura X, y que
calcule en cuál rebote, la pelota no alcanza la quinta parte de la altura inicial.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Escribir „Introduzca Altura Inicial‟
3.- Leer (X)
„Introduzca
Altura inicial‟
4.- Calcular QP = X / 5
5.- Asignar Cont = 0 {Inicialización}
6.- Asignar Altura = X
X 7.- Repita
7.1.- Calcular Altura = Altura * 0.9
7.2.- Incrementar Cont = Cont + 1
QP = X / 5 Hasta (Altura < QP)
Cont = 0 ta
8.- Imprimir („En „,Cont,‟ rebotes alcanza 5 parte de „,X)
Altura = X 9.- Fin

Altura = Altura * 0.9


Cont = Cont + 1

F
Altura < QP

V
„En „,Cont,
„ rebotes‟

Fin
II.5.- Controlado por Interruptor o Bandera

Una bandera o interruptor es una variable que se utiliza para conservar el estado
(verdadero o falso) de una condición. Se denomina bandera o interruptor por
asociarse a un interruptor (encendido o apagado) o a una bandera (arriba o abajo).
El valor de interruptor debe inicializarse antes de comenzar el bucle y debe
cambiar su estado (valor) dentro del cuerpo del bucle para preparar la siguiente
iteración.

Las banderas o interruptores se representan con variables lógicas. Estas


variables se inicializan con uno de los dos posibles valores (Verdadero/Falso) y
toman el otro valor cuando sucede el evento que se está verificando.

Ejemplo II.5.1: Programa que verifica si un número introducido por teclado es


primo
1.- Inicio
2.- Asignar a Primo = Verdadero
3.- Asignar a Divisor = 2
4.- Escribir „Introduzca un número entero > 0‟
5.- Leer (Numero)
6.- Repita
6.1.- Si Numero Mod Divisor = 0
Entonces
6.1.1.- Asignar a Primo = Falso
{Fin del Si}
6.2.- Asignar a Divisor = Divisor + 1
Hasta ((Divisor >= Numero) y Primo)
7.- Si Primo = Verdadero
Entonces
7.1.- Escribir (Numero,‟ es Primo‟)
De lo Contrario
7.2.- Escribir (Numero,‟ No es Primo‟)
{Fin del Si}
8.- Fin
Ejercicios Resueltos

Ejercicio II.1: Manuel tiene un capital de M bolívares y Alexis un capital de A


bolívares. Uniendo ambos capitales no les alcanza para hacer un negocio que
requiere una inversión de X bolívares. Cada uno decide colocar su capital a ganar
intereses. Hacer un programa que calcule en cuántos meses, uniendo los dos
capitales, pueden hacer el negocio que desean. Suponiendo que el monto, X, de
la inversión necesaria para el negocio no ha sufrido variaciones por inflación.

Diagrama de Flujo Algoritmo


Inicio 1.- Inicio
2.- Repita
2.1.- Escribir ('Introduzca capital de Manuel')
2.2.- Leer (M)
¿Capital 3.- Hasta que M > 0
Manuel? 4.- Repita
4.1.- Escribir ('A que interés coloca Manuel su capital?')
4.2.- Leer (IMan)
M 5.- Hasta que IMan > 0
6.- Repita
6.1.- Imprimir ('Introduzca capital de Alexis')
F 6.2.- Leer (A);
M>0 6.3.- Imprimir ('A que interés coloca Alexis su capital?')
6.4.- Leer (IAnd)
V 7.- Hasta que (A > 0) y (IAnd > 0)
8.- Repita
8.1.- Leer ('Introduzca monto de la inversión')
¿Interés 8.2.- Leer (X);
Manuel? 9.- Hasta que (X > M) y (X > A)
10.- Cont = 0
IMan 11.- Si ((M + A) < X) Entonces
11.1.- Repita
11.1.1.- Calcular M = M*(1 + IMan/100)
11.1.2.- Calcular A = A*(1 + IAnd/100)
F
IMan > 0 11.1.3.- Incrementar Cont1 = Cont1 + 1
11.2.- Hasta que ((M + A) >= X)
V 1 12.- Si (Cont = 0) Entonces
12.1.- Imprimir ('Pueden realizar el negocio inmediatamente')
De lo Contrario
Cont = 0
¿Capital 12.2.- Imprimir ('Deben esperar ',Cont,' meses para negociar')
Alexis? 13.- Fin
F
M+A<X
A
V
¿Interés
Andrés? M = M*(1 + IMan/100)
A = A*(1 + IAnd/100)
IAnd Cont = Cont + 1

F A>0 F
IAnd > 0 M + A >= X

V V

¿Monto F V
Inversión? Cont = 0

X ‘En’,Cont, ‘Negocio
’meses’ inmediato’
F
X>M
X>A
V
Fin
1
Program ManuelyAlexis;
{ ... }
Uses
Crt;

Var
M, A, X :Real;
Interes1, Interes2: Real;
Cont1, Cont2 : Integer;

Begin
Cont1:=0;
Cont2:=0;
Repeat
Writeln('Introduzca capital de Manuel');
Readln(M);
Writeln('A que interés coloca Manuel su Capital?');
Readln(Interes1);
Writeln('Introduzca capital de Alexis');
Readln(A);
Writeln('A que interés coloca Alexis su Capital?');
Readln(Interes2);
Writeln('Introduzca monto de la inversión');
Readln(X);
Until (X > M) and (X > A);
If (M + A) < X
Then
Begin
Repeat
M := M*(1 + Interes1/100);
A := A*(1 + Interes2/100);
Cont1 := Cont1 + 1;
Until ((M + A) >= X);
End;
If (Cont1 = 0)
Then
Writeln('Pueden realizar el negocio inmediatamente')
Else
Writeln('Deben esperar ',Cont1,' meses para hacer el negocio');
Readln
End.
Ejercicio II.2: Hacer un programa que lea un número entero, N, positivo, de cuatro
dígitos, que calcule su número inverso, y que lo imprima junto con el número leído.
Ej.: N = 1234, entonces su número inverso es Ni = 4321.
El programa debe permitir varias iteraciones, es decir, la introducción de números
de cuatro cifras en repetidas oportunidades.

Diagrama de Flujo Algoritmo

Inicio
1.- Inicio
2.- Repita
2.1. Escribir ('Introduzca un número de 4 cifras')
2.2. Leer (N)
¿Número de 2.3. Calcular A = N Div 1000
4 cifras?
2.4. Calcular R = N - A * 1000
2.5. Calcular B = R Div 100
N 2.6. Calcular O = R - B * 100
2.7. Calcular C = O Div 10
2.8. Calcular D = O - C * 10
A = N DIV 1000 2.9. Calcular NI = A + B*10 + C*100 + D*1000
R = N - A * 1000 2.10. Escribir ('Número introducido: ',N,' y su inverso: ',NI)
B = R DIV 100 2.11. Escribir ('Desea introducir otro número? (S/N)')
O = R - B * 100 2.12. Leer (Resp)
C = O DIV 10 3.- Hasta que (Resp = 'N') ó (Resp = 'n')
D = O - C * 10 4.- Fin

NI = A + B*10 + C*100 + D*1000

„Número inicial‟, N,
„su inverso es ‟, NI

¿Otro número?
(S/N)

Resp

F
Resp = „N‟

V
Fin
Ejercicio II.3: La serie de Fibonacci es una secuencia numérica, en la cual, a partir
del tercero, cada elemento es igual a la suma de los dos anteriores.
Así: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
Hacer un programa que calcule e imprima todos los elementos de la serie de
Fibonacci que sean menores que un número X.

Diagrama de Flujo Algoritmo

Inicio 1. Inicio
2. Repita
2.1. Imprimir ('Introduzca el número máximo ')
2.2. Leer (NMax)
¿Máximo? 3. Hasta que NMax>0
4. Asignar a = 0
NMax 5. Asignar b = 1
6. Asignar Fb = 0
7. Imprimir ('0 ')
F 8. Repita
NMax > 0
8.1. Calcular b = a + b
V 8.2. Asignar Fb = b
a=0 8.3. Calcular a = b - a
b=1 8.4. Si Fb <= NMax
Fb = 0 Entonces
8.4.1. Imprimir (Fb,' ')
De lo contrario
8.4.2. Asignar a Resp = 'S'
b=a+b 9. Hasta que Resp = 'S'
Fb = b 10. Fin
a=b-a

F
Fb<=n V

Resp = „S‟
Cont? Fb, „ „

Resp

F
Resp = ‘S’

V
Fin
II.a.- Codificación en Turbo Pascal

¡OJO! Faltan las codificaciones correspondientes a todos los ejemplos…!!!!.

Ejemplo II.4.1: Calcular la suma de N números introducidos por teclado.

Program Sumar;
{ }

Uses
Crt;

Var
N, Num, Sum, Contador : Integer;
Resp : Char;

Begin
Suma := 0;
Contador := 0;
Repeat
Writeln(„Introduzca Sumando‟);
Readln(Num);
Suma := Suma + Num;
Writeln(„Desea Continuar?‟);
Readln(Resp);
Until (Resp = „N‟) or (Resp = „n‟);
Writeln(„La suma de los „, Contador, „números es „, Suma);
Readln
End.
Ejercicio II.4.2:

Hallar el resultado de la siguiente sucesión:

S = 1 + 1 + 1 + 1 + ………… + 1
2 3 4 N

Hasta que 1/N converja hacia e/100 o sea igual o mayor que un número “e”
cualquiera dividido entre 100.

Program Serie;
{Programa que ….}

Uses
Crt;

Var
Suma, X, N, e : Integer;

Begin
Clrscr;
Suma := 0;
X := 1;
N := 1;
Writeln(„Introduzca número e”);
Readln(e);
Repeat
Suma := Suma + X;
N := N + 1;
X := 1/N;
Until (X <= e/100);
Writeln(„El resultado de la sumatoria es „, Suma);
Readln
End.
Ejemplo II.3.- Codificación en Turbo Pascal

Program Fibonacci;
{Programa que muestra en pantalla la serie de Fibonacci hasta un número máximo
introducido por el usuario}
{Realizado por Diego Uzcategui}
Uses
Crt;

Var
NMax, a, b, Fb : Integer;
Resp : Char;

Begin
Clrscr;
Repeat
Writeln ('Introduzca el número máximo de la serie');
Readln (NMax);
Until NMax>0;
a := 0;
b := 1;
fb := 0;
Clrscr;
Write ('0 ');
Repeat
b := a + b;
Fb := b;
a := b - a;
If Fb <= NMax
Then
Write (Fb,' ')
Else
Resp := 'S';
Until Resp = 'S';
Readkey
End.
ESTRUCTURAS DE REPETICIÓN INDIZADAS Ó INDEXADAS
Son estructuras de control repetitivas controladas por un índice, (de allí su
nombre). Esto es, controladas por una variable que indica el número de
iteraciones que se deben realizar.
Este tipo de estructuras se utilizan cuando se conoce por anticipado el número de
iteraciones que se van a realizar. Es decir, se conoce con anticipación el número
de veces que se debe repetir el cuerpo del bucle.

Estas estructuras no se controlan con una condición. El control se ejerce con una
variable que funge como índice. Del cual debe conocerse: el valor inicial, el valor
final y el valor del incremento (o decremento). Así, se repite el cuerpo del bucle
desde que la variable de control, o índice, toma el valor inicial, hasta que llega a su
valor final. Esta estructura se identifica como Repita Para. Se realiza la primera
iteración cuando el índice toma el valor inicial, y se realizan tantas otras
repeticiones, como incrementos (o decrementos) con el valor indicado, puedan
realizarse a la variable en el intervalo establecido [valor inicial, valor final].

Una diferencia básica con las estructuras condicionales es que aquellas constan
de varias partes, (Inicialización, Condición, Incremento), que cambian de posición
de acuerdo al tipo de estructura y que son necesarias para ejercer el control de la
estructura. En tanto que en las estructuras indizadas, sólo se necesita la
instrucción de cabecera para controlar el lazo. En las estructuras condicionales
debe incluirse siempre en el cuerpo del bucle una instrucción o sentencia, que
permita cambiar el estado de la condición, para evitar caer en un lazo infinito. En
tanto que las estructuras indizadas todo lo necesario para el control del ciclo, está
incluido en la primera sentencia, denominada cabecera.
El mecanismo de ejecución de esta estructura es el siguiente:
1. Se asigna el valor inicial a la variable índice.
2. Se ejecuta el cuerpo del bucle.
3. Se realiza automáticamente el incremento (o decremento).
4. Así, hasta llegar al valor final. Se realiza la última iteración y se interrumpe el
ciclo. El flujo de control pasa a la instrucción inmediata siguiente después del
lazo.
PSEUDOCÓDIGO

Formato:

Para Índice = Valor_Inicial hasta Valor_Final, con Incrementos de N, Repita


(o Decrementos)
Sentencia 1
: Cuerpo
del Bucle
Sentencia n
{Fin Repita Para}
La estructura Repita Para es una estructura potente y versátil que existe en casi
todos los lenguajes de programación. En el recuadro anterior se ha escrito en
cursiva la frase “con Incrementos (o Decrementos) de N”, para expresar que es de
carácter opcional, pues en algunos lenguajes, esa especificación no se utiliza. En
caso de no indicarse el valor de dicho incremento, se asume por defecto que es
uno (1).

A continuación se presenta el formato de las sentencias simples y compuestas,


expresadas en lenguaje natural. El Índice es representado por la variable I, el valor
inicial por las siglas Vi, el valor final por Vf.
Sentencia Simple: Sentencia Compuesta:
Para I = Vi hasta Vf Repita Para I = Vi hasta Vf Repita
Sentencia Sentencia 1
{Fin Repita Para} Cuerpo
Aclaratoria: en lenguaje natural se usa Para -
del Bucle
Repita, por su semejanza con el inglés (For - Sentencia n
Do), en lugar de Repita - Para, usado para
unificar las estructuras de repetición. En español, {Fin Repita Para}
todas comienzan con la misma palabra, Repita.

En la figura se presenta el diagrama de flujo de esta


estructura. La letra “n” representa el incremento. No
debe olvidarse que en algunos lenguajes de I = Vi hasta Vf, n
programación no es necesario especificar el
incremento.
Sentencias
REGLAS DE FUNCIONAMIENTO Cuerpo del Bucle

1. La variable de control, el valor inicial y el valor final


deben ser del mismo tipo. En caso de utilizarse la
especificación de complemento, debe acordarse el tipo de la variable de control
con el tipo del incremento.
2. Al iniciar las iteraciones, se le asigna el valor inicial a la variable de control.
3. La última repetición se realiza cuando la variable de control es igual al valor
final.
4. No se puede modificar el valor de la variable de control, ni los valores inicial o
final dentro del cuerpo del bucle.

CODIFICACIÓN (en Turbo Pascal)

En Turbo Pascal, se codifican de manera diferente los lazos Repita Para


ascendentes (o con incremento) y descendentes (o con decremento), así como
también las sentencias simples y compuestas.
Turbo Pascal no acepta índices de tipo real. Las variables de control, así como los
valores inicial y final deben ser de tipo entero.
Seguidamente se muestran las respectivas codificaciones para cada uno de los
casos antes mencionados.
Ascendentes: Descendentes:

Sentencia Simple: {Ascendente} Sentencia Simple: {Descendente}


Vi < Vf Vi > Vf
For I := Vi to Vf Do For I := Vi Downto Vf Do
Sentencia; Sentencia;

Sentencia Compuesta: {Ascendente} Sentencia Compuesta: {Descendente}


Vi < Vf Vi > Vf
For I := Vi to Vf Do For I := Vi Downto Vf Do
Begin Begin
Sentencia 1; Sentencia 1;
: Cuerpo : Cuerpo
: del Bucle : del Bucle
Sentencia n Sentencia n
End; End;
Con el fin de realizar comparaciones con el funcionamiento de las otras
estructuras, presentamos el mismo ejemplo desarrollado en esas estructuras.

Ejemplo 1: Calcular la suma de N números introducidos por teclado.

Diagrama de Flujo Algoritmo


Inicio 1.- Inicio
2.- Escribir „¿Cuántos números desea sumar?‟
¿Cuántos 3.- Leer (N)
números? 4.- Asignar Suma = 0 {Inicialización}
5.- Para I = 1 hasta N Repita
5.1.- Escribir „Introduzca sumando‟
N 5.2.- Leer (Num)
5.3.- Calcular Suma = Suma + Num
Suma = 0 {Fin Repita Para}
6.- Escribir „El resultado de la suma es „, Suma
7.- Fin
I = 1,1,N

¿Sumando?

Num

Suma = Suma + Num

Suma

Fin
Ejemplo 2: Calcular la suma 1 + 1/2 + 1/3 +... + 1/n (Serie Armónica).

Diagrama de Flujo Algoritmo


Inicio 1.- Inicio
2.- Escribir („Leer n‟)
„Leer „, N 3.- Leer (N)
4.- Asignar Suma = 0 {Inicialización}
5.- Para I = 1 hasta N Repita
N 5.1.- Calcular Suma = Suma + 1/I
{Fin Repita Para}
Suma = 0 6.- Imprimir („El resultado es ‟, Suma)
7.- Fin
I = 1 hasta N

Suma = Suma + 1/I

Suma

Fin
Ejemplo 3: Calcular las Combinaciones y las Permutaciones de m elementos,
tomados en grupos de n, usando respectivamente las fórmulas siguientes:
m! m!
Cm,n = ------------------- Pm,n = --------------
n! * (m – n)! (m – n)!
Diagrama de Flujo Algoritmo
Inicio 1.- Inicio
2.- Repita {Validaciones}
2.1.- Escribir („Introduzca valor de m‟)
¿Valor m? 2.2.- Leer (m)
2.3.- Escribir („Introduzca valor de n‟)
2.4.- Leer (n)
m Hasta (m > n)
3.- Asignar Factm = 1 {Inicializaciones}
¿Valor n? 4.- Asignar Factn= 1
5.- Hacer Factmn = 1
6.- Para I = 1 hasta m Repita
n 6.1.- Factm = Factm * I
7.- Para J = 1 hasta n Repita
7.1.- Factm = Factm * J
F m>n 8.- Para K = 1 hasta (m – n) Repita
8.1.- Factm = Factm * K
V 9. - Calcular C = Factm / (Factn * Factmn)
Factm = 1 10.- Calcular P = Factm / Factmn
Factn = 1 11.- Imprimir „Cm,n = „, C
Factmn = 1 12.- Imprimir „Pm,n = „, P
13.- Fin
I = 1 hasta m

Factm = Factm * I

J = 1 hasta n

Factn = Factn * J

K = 1 hasta (m-n)

Factmn = Factmn * K

C = Factm / (Factn * Factmn)

P = Factm / Factmn

C, P

Fin
Ejercicios Resueltos

Ejercicio III.1: Leer dos números enteros y positivos, A y B, donde B > A. Calcular
el factorial de los números comprendidos entre ellos, incluyéndolos, e imprimirlo
junto con el número correspondiente.

Diagrama de Flujo Algoritmo

Inicio
1.- Inicio
2.- Repita {Validación}
¿Valor A? 2.1.- Escribir ('Introduzca el primer número (A)')
2.2.- Leer (A)
Hasta (A > =0) {Fin Repita Hasta}
A 3.- Repita {Validación}
3.1.- Escribir ('Atención B > A')
3.2.- Escribir ('Introduzca el segundo número (B)')
F A>0 3.3.- Leer (B);
Hasta (B > A) {Fin Repita Hasta}
V 4.- Asignar Fact = 1 {Inicialización}
5.- Para M = 2 hasta A Repita
¿Valor B? 5.1.- Calcular Fact = Fact * M
{Fin Repita Para}
5.2.- Escribir ('El factorial de ', A, ' es ', Fact)
B 6.- Para J = (A + 1) hasta B Repita
6.1.- Calcular Fact = Fact * J
F 6.2.- Escribir ('El factorial de ', J, ' es ', Fact)
B>A {Fin Repita Para}
7.- Fin
V
Fact = 1

M = 2 hasta A

Fact = Fact * M

„Factorial de „,
A, „ es „, Fact

J = (A + 1) hasta B

Fact = Fact * J

„Factorial de „,
J, „ es „, Fact

Fin
ESTRUCTURAS DE REPETICIÓN ANIDADAS
El anidamiento se refiere, a colocar una estructura de repetición dentro de otra.
Por tanto, anidar estructuras de repetición, significa construir un lazo externo, con
uno o más lazos internos. En ese caso, debe terminar primero el (o los) más
interno(s), porque de lo contrario se produce un error.

El mecanismo de ejecución de las estructuras de repetición anidadas es el


siguiente:
1.- Por cada repetición del lazo externo, se ejecutan todas las iteraciones de los
lazos internos.
2.- Al terminar de repetirse el último lazo interno, se vuelven a evaluar las
variables de control del lazo externo y si debe realizarse otra iteración de este
lazo, comienzan nuevamente las repeticiones de los lazos internos, hasta
completar las todas.
3.- Así, se realizan todas las iteraciones requeridas por todos los lazos.

Si se tiene, por ejemplo, un lazo externo con tres (3) iteraciones y un lazo interno
con cuatro (4), se realizarán en total doce (12) iteraciones. Por cada una de las
tres (3) iteraciones del lazo externo se realizarán las cuatro del lazo interno.

En el anidamiento se pueden mezclar estructuras de todos los tipos, pero siempre


teniendo en cuenta lo expresado anteriormente. Debe(n) terminar primero la(s)
estructura(s) más interna(s).
Lazo 1
Lazo 1
Lazo 2 Lazo 3
Lazo 3 Lazo 2
Fin Lazo 3
Fin Lazo 3
Lazo 4

Fin Lazo 4 Lazo 4


Fin Lazo 2 Fin Lazo 1
Fin Lazo 1 Fin Lazo 2
Fin Lazo 4

Anidamiento Válido Anidamiento Inválido


Ejemplo IV.1: Programa para hallar los números de hasta tres cifras, que sean
iguales a la suma de los cubos de los dígitos que forman los números.
Por ejemplo: 153 = 13 + 53 + 33.

Diagrama de Flujo Algoritmo

Inicio 1.- Inicio


2.- Para I = 0 hasta 9 Repita
2.1.- Para J = 0 hasta 9 Repita
I = 0 hasta 9 2.1.1.- Para K = 0 hasta 9 Repita
2.1.1.1.- Calcular M = 100*I + 10*J + K
2.1.1.2.- Calcular L = I*I*I + J*J*J + K*K*K
J = 0 hasta 9 2.1.1.3.- Comparar Si M = L
Entonces
2.1.1.3.1.- Escribir ('Se cumple para el Numero ', M)
K = 0 hasta 9 {Fin Repita Para K}
{Fin Repita Para J}
{Fin Repita Para I}
M = 100 * I + 10 * J + K 3.- Fin

L = I*I*I + J*J*J + K*K*K

F V
1. M = L
-
Ini „Se cumple
ci para „,M
o
2.
-
P
ar
a
I Fin
=
0
h
as
ta
9
R
e
pi
ta

2.
1.
-
P
ar
a
J
=
0
h
as
ta
9
R
e
Ejemplo IV.2: Hacer un programa que calcule el promedio de notas de cada
alumno de una sección de PD10, que presentaron tres (3) exámenes parciales con
el mismo peso c/u y el promedio de la sección.
Codificación en Turbo Pascal

Program factoriales;
{Programa que lee dos números enteros y positivos, A y B, donde B > A. Que calcula el
factorial de los números comprendidos entre ambos, incluyéndolos, y lo imprime junto
con el número correspondiente.}
Uses
Crt, Dos;

Var
A, B, M, J, Fact: Integer;

Begin
Writeln ('Introduzca el primer número (A)');
Readln (A);
Repeat
Writeln ('Atención B > A');
Writeln ('Introduzca el segundo número (B)');
Readln (B);
Until (B > A);
Fact:= 1;
For M:= 2 to A Do
Fact := Fact * M;
Writeln ('El factorial de ', A, ' es ', Fact);
For J := (A + 1) to B Do
Begin
Fact := Fact * J;
Writeln ('El factorial de ',J, ' es ', Fact);
End;
Readln
End.
Ejercicios Propuestos

Analice, diseñe y codifique en Turbo Pascal, los siguientes problemas:

1.- Hacer un programa que lea un capital C y que calcule en cuántos meses se
duplica, si lo colocamos a un interés compuesto del 5% mensual.

2.- Hacer un programa que calcule el promedio de notas de una sección que tiene
n estudiantes y el promedio de cada estudiante, si cada uno tiene 3 notas
parciales. Calcular además cuántos alumnos fueron aprobados y cuántos
reprobados.

3.- Hacer un programa que lea dos números enteros y positivos, N1 y N2, donde
N2 > N1. Que calcule el factorial de los números comprendidos entre ellos,
incluyéndolos, y lo imprima junto con el número correspondiente.

4.- Calcular la suma: 1 + 2 + 3 + ... n


2 22 23 2n

5.- Una pelota se deja caer desde una altura H, y en cada rebote sube 10% menos
que el anterior. Hacer un programa que lea H y calcule en cuál rebote la pelota
no alcanza a subir la quinta parte de la altura inicial.

6.- En 1980 la ciudad A tenía 3.5 millones de habitantes y una tasa de crecimiento
del 7% anual y la ciudad B tenía 5 millones y una tasa de crecimiento del 5%
anual. Si el crecimiento poblacional se mantiene constante en las dos
ciudades, hacer un programa que calcule en qué año la población de la ciudad
A es mayor que la de la ciudad B.

7.- Realizar un programa que lea n números y calcule cuantos son pares y cuantos
son impares.

8.- Realizar un programa que lea del teclado, n números enteros y positivos e
indique cuantos son primos. Recordemos que un número primo es una
cantidad entera positiva únicamente divisible por uno y por sí mismo.

9.- Hacer un programa que lea un número entero, n, positivo, de cuatro dígitos,
que calcule su número inverso, y que lo imprima junto con el número leído. Ej.:
n = 1234, entonces su número inverso es ni = 4321.

10.- Hacer un programa que lea un número entero y positivo, de cualquier


número de dígitos, que le calcule su inverso y que lo imprima junto con el
número leído.

11.- Hacer un programa que lea un número N, entero y positivo, de cualquier


número de dígitos, que calcule la suma de sus dígitos y que la imprima en
pantalla, unto con el número leído. Ej.: n = 53471, entonces la suma de sus
dígitos es Suma = 20.

12.- La serie de Fibonacci es una secuencia numérica, en la cual, cada elemento


es igual a la suma de los dos anteriores, así: 0, 1, 1, 2, 3, 5, 8, 13, 21, ..., etc.
Tomando como variables iniciales los dos primeros elementos, a = 0, y b = 1,
hacer un programa que calcule e imprima, a partir del tercero, todos los
elementos de la serie de Fibonacci que sean menores que mil.

13.- El cajero de un banco solo dispone de billetes de 10.000 Bs., 20.000 Bs. y
100 Bs. Su función es cambiar los cheques, dándoles el menor número posible
de billetes. Asumiendo que todos los cheques son múltiplos de 100 Bs., hacer
un programa que lea del teclado el valor del cheque a cambiar y que le informe
al cajero cuantos billetes de cada denominación debe entregar. Como no sabe
cuántos clientes vienen en un día, el programa debe terminar cuando reciba
ceros como valor del cheque, y al final del día debe informar cuántos billetes de
cada denominación se gastaron.

14.- Hacer un programa que lea números enteros positivos y que calcule:
- Los números cuya suma de dígitos sea impar, y decir cuántos son.
- Los números que terminan en siete (7), y cuántos son.
- Todos los números que tengan más de cuatro dígitos.

Puesto que no sabemos cuántos números se van a procesar, el programa


debe tener en cuenta que el último número leído debe ser cero.

15.- Pedro tiene un capital de C1 bolívares y Juan, un capital de C2 bolívares.


Uniendo los dos no les alcanza para hacer un negocio que requiere una
inversión de C3 bolívares. Decide colocar cada uno su capital a ganar
intereses. Pedro lo colocó a un interés compuesto del 3% mensual, y Juan, al
4% mensual. Hacer un programa que calcule en cuántos meses, uniendo los
dos capitales, pueden hacer el negocio que desean. Suponiendo que el monto,
C3, de la inversión necesaria para el negocio no ha sufrido variaciones por
inflación.

16.- En una urbanización se desea realizar un censo, de todas las personas


mayores de edad. El computador debe leer por teclado la edad, sexo y grado
de instrucción de cada una de ellas. Hacer un programa que calcule:
- Cuántos hombres y cuántas mujeres hay en la urbanización, discriminados
por rango de edades, de acuerdo a lo siguiente:
a. Entre 18 y 35
b. Entre 36 y 50
c. Entre 51 y 65
d. Mayores de 65
- Cuántos hombres y mujeres hay por cada grado de instrucción. Establezca 4
grados de instrucción (analfabeta, primaria, secundaria y profesional).
17.- Hacer un programa que calcule e imprima en pantalla, cuántos múltiplos de
siete y cuantos múltiplos de nueve hay en los números comprendidos entre el
1000 y el 5000.

18.- Hacer un programa que calcule e imprima en pantalla la sumatoria de los


primeros veinte términos de la siguiente serie:
1/3 , 2/5 , 9/7 , 64/9 , 625/11 , ........., etc.

19.- El número de Combinaciones y Permutaciones de m elementos tomados en


grupos de n están dados respectivamente por las fórmulas
C = m!/(n!*(m+n)!) P = m!/(m+n)!

Hacer un programa que lea m y n, que calcule C y P e imprima los resultados.

20.- Realizar un programa que promedie una lista indeterminada de números


reales, hasta que se introduzca un número negativo. Escriba el programa de
dos formas: usando el REPITA MIENTRAS y el REPITA HASTA.

21.- Suponga que se piden X bolívares prestados a un banco, con el acuerdo de


devolver Y bolívares cada mes hasta devolver el préstamo completo. Parte del
pago mensual serán intereses, calculados como el i por ciento del capital por
devolver en ese momento. El resto del pago mensual se aplica a reducir el
capital a devolver. El programa debe determinar:
a.- La cantidad de intereses pagada cada mes.
b.- La cantidad de dinero aplicada cada mes al capital por devolver
c.- La cantidad acumulada de intereses pagados al final de cada mes.
d.- La cantidad del préstamo aún pendiente al final de cada mes.
e.- El número necesario de pagos mensuales para devolver el préstamo
completo.
f.- La cantidad del último pago (probablemente menor que Y)
Compruebe el programa usando los siguientes datos:
X = 7.200.000, Y = 360.000, i= 1%

22.- Calcular la suma de 1+ 1/(2!) + 1/(3!) + 1/(4!) + .... + 1/(n!) para un n dado.
Escriba el programa de tres formas diferentes: usando Repita mientras, Repita
hasta y Repita para.

23.- Imprimir la tabla de multiplicar del número N.

24.- Los surtidores de una gasolinera registran las ventas por galones, pero el
precio de la gasolina está fijada en litros. El programa debe calcular lo que los
clientes deben pagar y el total recaudado por la gasolinera, tomando en cuenta
lo siguiente:
- Cada galón tiene 3,785 litros.
- El precio del litro es Bs. 50 para el Tipo A, Bs. 55 para el Tipo B y para el
Tipo C, Bs. 60.
- El programa finaliza cuando se introduce una D como tipo de gasolina.
ARREGLOS
Hasta ahora hemos creado programas que utilizan solo datos simples o básicos,
como son: enteros, reales, caracter, etc. Sin embargo, es conveniente resaltar que
existen problemas de programación en los cuales se necesita procesar una
colección de valores que están relacionados entre sí. Es decir, en la vida real
normalmente se necesita crear programas que utilizan datos que requieren una
cierta organización, programas que requieren usar datos que están relacionados
entre sí. A esta conformación de los datos, se le denomina estructura de datos.
Una estructura de datos es "una colección de datos organizados de un modo
particular”1. El procesamiento de estos conjuntos de datos se realiza basándose
en los conceptos matemáticos de vectores y matrices, utilizando la estructura de
datos básica llamada array.

En general, las estructuras de datos pueden ser de dos tipos: estáticas y


dinámicas. Las estáticas son aquellas a las que se les asigna una cantidad fija de
memoria cuando se declara la variable, o desde el principio del programa. La
misma no variará durante la ejecución del programa, se reserva esa cantidad fija
de memoria para contener la estructura. Las estructuras de datos dinámicas son
aquellas en las cuales, la cantidad de ocupación de memoria puede variar,
(aumentar o disminuir), durante el tiempo de ejecución. Entre las estructuras de
datos dinámicas se tienen los punteros, y entre las estáticas se pueden encontrar
los arreglos.

Concepto: Un arreglo (en inglés array), es una


estructura de datos en la que se almacena una Notas
colección de datos del mismo tipo, como: los Notas[1] 17
Notas[2] 14
nombres de los estudiantes de una sección, las Notas[3] 12
notas parciales de esos estudiantes o los salarios ... ...
de los empleados de una empresa. ... ...
Un arreglo es una lista formada por una cantidad ... ...
determinada de elementos del mismo tipo, Notas[50] 18
agrupados bajo el mismo identificador o nombre de
variable. Nombre del vector: Notas
Se caracteriza por:
- Almacenar los elementos del arreglo en Subíndices: [1], [2], [3], ..., [50]
posiciones de memoria contigua. Contenido: Notas[1] = 17
- Tener un único nombre de variable (por ejemplo Notas[2] = 14
Notas) que representa a todos los elementos Notas[3] = 12
que lo componen. Éstos a su vez se diferencian ...
por un índice o subíndice. ...
...
- Se puede acceder de manera directa (o Notas[50] = 18
aleatoria) a los elementos del arreglo.
Un arreglo de una dimensión es un vector, y uno de
dos dimensiones, es una matriz.

1 c
Joyanes A., Luis. Programación en Turbo Pascal. M Graw Hill. 1993.
Arreglos Unidimensionales: Los Vectores

Un arreglo de una dimensión (unidimensional), también llamado vector o fila, es un


tipo de datos estructurado, compuesto de un número determinado de elementos,
de tamaño fijo y elementos homogéneos (del mismo tipo). La característica “de
tamaño fijo” se refiere a que el tamaño del arreglo debe ser conocido en tiempo de
compilación, (antes de la ejecución del programa).
Por ejemplo, si deseamos conservar las calificaciones de 50 estudiantes de un
examen de programación, se necesita reservar cincuenta posiciones de memoria,
dar un nombre al arreglo y a cada uno de los 50 estudiantes asignarles una
posición o índice del arreglo.

Operaciones con Vectores: Lectura, Escritura y Copia

Lectura

La lectura de un vector se debe hacer elemento a elemento, y se requiere de


alguna estructura repetitiva, ya sea Repita Mientras, Repita Hasta o Repita Para,
(en Pascal, While, Repeat o For, respectivamente).

Ejemplos:

I=1 I=1 N = 100


Mientras I <= 100 Repita Repita Para I = 1 hasta N Repita
Leer (Notas [I]) Leer (Notas[I]) Leer(Notas[I])
I = I +1 I=I+1 {Fin Repita Para}
{Fin Repita Mientras} Hasta I > 100

Escritura

Para visualizar un vector, (escribirlo/imprimirlo), igualmente, es necesario situarlo


dentro de una estructura repetitiva.

Para I = 1 hasta Numero Repita For I = 1 to Numero Do


Escribir (Notas [I]) Write (Notas [I])
Writeln

Nota: A menos que sea necesario, se debe evitar que todas las salidas del vector
aparezcan en la misma línea. Para eso, es recomendable hacer que se salte una
línea al imprimir, usando un comando de impresión en blanco.

Copia

Como se ha visto, para manipular un vector siempre se necesita situarlo dentro de


una estructura de repetición. Además, en caso de una copia de un vector a otro,
debe tenerse en cuenta que ambos vectores sean del mismo tipo y
preferiblemente, del mismo tamaño. Utilizando lo que se denominan, Vectores
paralelos, (vectores del mismo tipo y del mismo tamaño).
Arreglos Bidimensionales: Matrices o Tablas

Un arreglo bidimensional (también llamado tabla o matriz) es un arreglo con dos


índices. Al igual que los vectores, estos índices deben ser ordinales. Se declaran
de igual manera que los arreglos de una dimensión.

Lectura y Escritura de una Matriz

Para escribir una matriz, se debe hacer referencia tanto a la fila como a la
columna. Se puede leer horizontalmente, (por filas), o verticalmente, (por
columnas). Así, en la lectura horizontal, se controlan las filas con el lazo externo y
las columnas con el lazo interno, como se muestra en el siguiente ejemplo. Se
utiliza una estructura Repita Para, para leer horizontalmente una matriz de tres (3)
filas y cuatro (4) columnas:

Para Fila = 1 hasta 3 Repita


Para Columna = 1 hasta 4 Repita
Leer (A[Fila, Columna])

Si se desea recorrer la matriz verticalmente, o por columnas, se debe entonces,


controlar las columnas con el lazo externo y las filas con el lazo interno.
En el siguiente ejemplo se muestra la lectura vertical de una matriz, utilizando una
estructura repetitiva Repita Mientras controlada por Contador.

Columnas = 1
Mientras Columnas <= 4 Repita
Filas = 1
Mientras Filas <= 3 Repita
Leer (A[Columnas,Filas])
Filas = Filas + 1
{Fin Repita Mientras Filas}
Columnas = Columnas + 1
{Fin Repita Mientras Columnas}

Declaración en Turbo Pascal de un arreglo

Siempre se deben declarar luego de las constantes (si existen). Un arreglo se


declara por medio del tipo array. La sintaxis para un arreglo unidimensional es la
siguiente:
Type
Nombre_tipo_arreglo = array [rango del subíndice] of Tipo;

+ Nombre_tipo_arreglo: Se refiere al tipo de dato arreglo a crear y debe ser un


nombre de identificador válido.
+ Rango del subíndice: Puede ser boolean, char o un rango de tipo enumerado.
+ Tipo: Se refiere al tipo de los elementos del vector. Todos los elementos deben
ser del mismo tipo.

Var
Nombre_arreglo : Nombre_tipo_arreglo;

Ejemplos:

Type
X = array [1..8] of real;
Type
Luces = (Rojo, Verde, Ámbar);
Type
DiasDeSemana=(Lunes, Martes, Miércoles, Jueves, Viernes, Sábado, Domingo);
ConjuntoDias = array
Type
Salarios = array [A..Z] of real;

(En este caso es de tipo real porque el salario es de ese tipo. El subíndice indica
que los salarios van de los empleados cuya inicial es A hasta la Z).
Las declaraciones de tipo arreglo no crea ninguna variable específica de tipo
arreglo, sino que proporciona información del arreglo como un todo.
Para declarar una variable tipo arreglo, se utiliza la siguiente sintaxis:
Type
Valores = array [1..10] of real;
Var
Precios : Valores;

En primer lugar se crea el tipo del arreglo y luego se declara la o las variables
referenciadas al arreglo.
Otro ejemplo de aplicación puede ser el siguiente:

Const
Max = 500;
Type
Texto = array [1..Max] of char;
Var
Palabras, Letras: Texto;

En este ejemplo se crean dos variables arreglo: Palabras y Letras. Las posiciones
del arreglo van de 1 a 500 y contendrán un valor tipo caracter.
Declaración en turbo Pascal de un arreglo bidimensional o Matriz

Al igual que en los arreglos unidimensionales o vectores, se crean con


declaraciones Type y Var y deben ser de tipo ordinales o subrango. Se debe
indicar:
- El nombre del arreglo
- Tipo del arreglo y
- Rango permitido
Ejemplo:
Type
Tabla = array [1..25,1..4] of real;
Var
Grados : Tabla;
Para localizar o almacenar un valor en el arreglo se deben especificar dos
posiciones o subíndices, uno para la fila y otro para la columna.
Ejercicio: Calcular el promedio de cada estudiante de una lista de veinticinco
alumnos de una clase de Programación con notas en cuatro parciales.
Solución: Se leen las 4 notas de
cada uno de los 25 estudiantes y se Matriz Notas
almacenan en la matriz Notas, en la er do er to
que cada fila corresponde a un 1 P. 2 P. 3 P. 4 P.
Estudiante 1 12 17 14 19
estudiante y las columnas
Estudiante 2 15 11 12 10
corresponden a las notas del Estudiante 3 12 13 12 16
primero al cuarto parcial. Por tanto, : :
el promedio por filas corresponde al : :
promedio de cada estudiante. Tal Estudiante 25 13 18 10 20
como se puede ver en el ejemplo de
la figura a la derecha.
Algoritmo Diagrama de Flujo
1. Inicio {Programa Promedio} Inicio
2. Repita para I = 1 hasta 25
2.1. Inicializar Suma = 0 I = 1 hasta 25
2.2. Repita para J = 1 hasta 4
2.2.1. Escribir („Nota „,J,‟ del estudiante „,I,‟?‟) Suma = 0
2.2.2. Leer (Notas[I,J])
J = 1 hasta 4
2.2.3. Acumular Suma = Suma + Notas[I,J]
{Fin del Repita para J}
„Nota‟, J,
2.3. Calcular Prom = Suma/4 „Estudiante „,I
2.4. Escribir („Promedio estudiante „,I,‟ = „,Prom)
{Fin del Repita para I} Notas[I,J]
3. Fin
Suma = Suma + Notas[I,J]

Promedio = Suma / 4

Promedio

Fin
Program Promedio;
Uses
Crt;

Var
Notas : Array [1..25,1..4] of Real;
I,J : Integer;
Suma, Prom : Real;
Begin
For I := 1 to 25 Do
Begin
Write (`Notas del estudiante: ´, I);
Writeln (`En una misma línea escriba todas las notas ´);
Suma := 0;
For J := 1 to 4 Do
Begin
Read (Notas[I,J]);
Suma := Suma + Notas[I,J]
End;
Readln;
Prom := Suma/4;
Writeln (`La nota promedio del estudiante `,I:1,´ es `,Prom:1:1)
End
End.
Ejercicios Resueltos

1.- H
Hacer un programa que lea N datos, guardando los positivos en un vector y los
negativos en otro. Que imprima los vectores y calcule la suma de los positivos y
negativos separadamente. Inicio

Algoritmo Contp = 0 Contn = 0


Sumap = 0 Suman = 0
1. Inicio
2. Inicializar Contp = 0 „¿Cuántos
3. Inicializar Contn = 0 números?‟
4. Inicializar Sumap = 0
N
5. Inicializar Suman = 0
6. Repita
F
6.1.- Escribir ('Cuántos números?') N>0
6.2.- Leer(N) V
7. Hasta que (N > 0) I = 1 hasta N
8. Repita para I = 1 hasta N
8.1. Escribir ('Introduzca número') „ Introduzca
8.2. Leer (X) número‟
8.3. Si (X >= 0)
Entonces X
8.3.1. Incrementar Contp = Contp + 1
8.3.2. Asignar Pos[Contp] = X F
X >= 0 V
8.3.3. Acumular Sumap = Sumap + X
De lo contrario Contn = Contn + 1
8.3.4. Incrementar Contn = Contn + 1 Neg[Contn] = X
8.3.5. Asignar Neg[Contn] = X Suman = Suman + X
8.3.6. Acumular Suman = Suman + X Contp = Contp + 1
9. Escribir ('Vector de Positivos') Pos[Contp] = X
10. Repita para I = 1 hasta Contp Sumap = Sumap + X
10.1. Escribir (Pos[I], ' „)
11. Escribir ('Suma de positivos = ', Sumap)
12. Escribir ('Vector de Negativos') „Vector de Positivos‟
13. Repita para I = 1 hasta Contn
13.1. Escribir (Neg[I], ' „) I = 1 hasta Contp
14. Escribir ('Suma de negativos = ', Suman)
15. Fin Pos[I],‟ „

Sumap

„Vector de Negativos‟

I = 1 hasta Contn

Neg[I],‟ „

Suman

Fin
Program Sumaposynegativos;
Begin
Contp = 0;
Contn = 0;
Sumap = 0;
Suman = 0;
Repeat
Writeln ('Cuántos números?');
Readln(N)
Until (N > 0);
For I := 1 to N do
Begin
Writeln ('Introduzca número');
Readln(x)
If X >= 0
Then
Begin
Contp := Contp + 1;
Pos[Contp] := X;
Sumap := Sumap + X
End
Else
Begin
Contn := Contn + 1;
Neg[Contn] := X;
Suman := Suman + X
End;
End;
Writeln ('Vector de Positivos');
For I := 1 to Contp
Writeln (Pos[I], ' „);
Writeln ('Suma de positivos = ', Sumap);
Writeln ('Vector de Negativos');
For I := 1 to Contn
Writeln (Neg[I], ' „);
Writeln ('Suma de negativos = ', Suman);
Readln
End.
2.- Realizar un programa que lea N datos, con los cuales forme 2 vectores, c/u de 100
datos máximo. El primer vector con los datos pares, el segundo con los datos
impares. Si los N datos no alcanzan para llenar los vectores de 100 datos,
complete el vector de pares con el número 2 y el de impares con el número 1.
Imprímalos.
Program completarvectores;
Uses Crt;
Var
par, impar : Array[1..50] of Integer;
n, contp, conti, i : Integer;
Begin
Clrscr;
Writeln('Cuantos números desea introducir?');
Readln(n);
contp := 1;
conti := 1;
For i := 1 to 10 do
Begin
Par[i]:=2;
Impar[i]:=1
End;
For i := 1 to n do
Begin
Writeln ('Introduzca número');
Readln(n);
If n mod 2 = 0
Then
Begin
par[contp] := n;
contp := contp + 1;
End
Else
Begin
impar[conti] := n;
conti := conti + 1;
End;
End;
Writeln('Vector Par');
For I := 1 to 10 do
Write(par[i],' ');
Writeln;
Writeln('Vector Impar');
For i := 1 to 10 do
Write(impar[i],' ');
Writeln;
Readln;
End.
3.- Hacer un programa que lea un vector A de N elementos, calcule e imprima cuál es
el mayor y en qué posición se encuentra y cuál es el menor y en qué posición se
encuentra.

Program vector;
{… }
Uses
Crt, Dos;

Var
VectorA : array[1..10] of Integer;
I, numero, may, men, posmay, posmen : Integer;

Begin
Repeat
Writeln ('Cuantos números desea introducir?');
Readln (numero);
Until numero > 0;
For I := 1 to numero do
Begin
Writeln ('Introduzca elemento ‟, I,‟ del vector');
Readln (vectorA[i]);
End;
may := VectorA[1];
men := VectorA[1];
posmay := 1;
posmen := 1;
For I := 2 to numero do
Begin
If VectorA[i] > may
then
Begin
may:= VectorA[i];
posmay:=i;
End
else
If VectorA[i] < men
then
Begin
men := vectorA[i];
posmen:= i;
End
End;
Writeln ('El mayor es ', may,' y está en la posición ', posmay,' del vector');
Writeln ('El menor es ', men,' y está en la posición ', posmen,' del vector');
Readln
End.
Program PromediosSec;
{Programa para calcular el promedio de n estudiantes y el promedio por materia}

Uses
Crt;

Type
Matriz = Array[1..50,1..50] of Integer;
Vector_caracteres = Array[1..50] of String[30];
Vector_Promedios = Array[1..50] of Real;

Var
N, Estudiantes, Materias, ContMaterias, i, j, k, l, sumaest, SumaMat : Integer;
promest, proMat : Real;
Notas : Matriz;
Nombre,Nombre_Materias : Vector_caracteres;
Promedios : Vector_Promedios;

Begin
Clrscr;
Estudiantes := 1;
Repeat
Writeln('Cuantos estudiantes tiene la sección?');
Readln(N);
Until n > 0;
Repeat
Writeln(' Cuantas materias tienen los estudiantes? ');
Readln(Materias)
Until Materias > 0;
ContMaterias:= 1;
Repeat
Writeln(' Nombre de la materia? ', ContMaterias);
Readln(Nombre_Materias[ContMaterias]);
ContMaterias := ContMaterias + 1
Until ContMaterias > Materias;
While (Estudiantes <= N) do
Begin
Writeln(' Nombre del estudiante?');
Readln(Nombre[Estudiantes]);
ContMaterias := 1;
Sumaest := 0;
While ContMaterias <= Materias Do
Begin
Repeat
Writeln('Nota estudiante ', Nombre[Estudiantes],' en la Materia ',
Nombre_Materias[ContMaterias]);
Readln(Notas[Estudiantes,ContMaterias]);
Until (( 0 <= Notas[Estudiantes,ContMaterias]) and
(Notas[Estudiantes,ContMaterias] <= 20));
Sumaest := (sumaest + Notas[Estudiantes,ContMaterias]);
ContMaterias := ContMaterias + 1
End;
Promedios[Estudiantes] := Sumaest/Materias;
Estudiantes := Estudiantes + 1
End;
Clrscr;
For I := 1 to n Do
Begin
Writeln('El promedio del estudiante ', Nombre[I], ' es ', Promedios[I]:5:2,' pts');
Writeln;
Write ('Sus notas son ');
For J:= 1 to Materias Do
Write (' ', Notas[i,j]);
Writeln
End;
Writeln;
Writeln('Promedios por Materias');
For K := 1 to Materias Do
Begin
SumaMat:= 0;
For L:= 1 to N do
SumaMat:= SumaMat + Notas[L,K];
Promat:= SumaMat/N;
Writeln('El promedio de la materia ', Nombre_Materias[K],' es ',Promat:5:2);
Writeln;
End;
Readln
End.
Ejercicio: Hacer un programa que lea una matriz cuadrada A de m filas y n
columnas. Calcular e imprimir la suma de: Diagonal Principal, Triangular Inferior,
Triangular Superior y Diagonal Secundaria.
Program Diagonal_Principal;
{... }
Uses
Crt;
Type
Matriz = Array[0..100,0..100] of Integer ;
Var
N, I, J, DP, TS, TI, DS: Integer ;
A : Matriz;

Begin
Clrscr;
Repeat
WriteLn('Introduzca el Orden de la Matriz');
ReadLn(N)
Until N>0;
For I := 1 To N do
For J := 1 To N do
Begin
WriteLn('Introduzca el elemento A(',I,J,') de la matriz');
ReadLn(A[I,J])
End;
DP := 0;
TS := 0;
TI := 0;
DS := 0;
For I := 1 To N do
For J := 1 To N do
Begin
If I = J Then
DP := DP + A[I,J]
Else
If I < J Then
TS := TS + A[I,J]
Else
TI := TI + A[I,J];
If (I + J) = (N + 1) Then
DS := DS + A[I,J]
End;
WriteLn('Los elementos de la matriz son: ');
For I := 1 To N do
Begin
For J := 1 To N do
Write(A[I,J],' ');
WriteLn
End;
WriteLn('La suma de los elementos de: ');
WriteLn('La Diagonal Principal es ',DP,' , de la Triangular Superior es ',TS);
WriteLn('De la Triangular Inferior es ',TI,' y de la Diagonal Secundaria es ',DS);
ReadLn
End.
Program PromediosSec;
{Programa para calcular el promedio de n estudiantes, el promedio por materia y el
promedio del curso}

Uses
Crt;

Type
Matriz = Array[1..50,1..50] of Integer;
Vector_caracteres = Array[1..50] of String[30];
Vector_Promedios = Array[1..50] of Real;

Var
N, Estudiantes, Materias, ContMaterias, i,j,k,l, sumaest,SumaMat : Integer;
promest, proMat : Real;
Notas : Matriz;
Nombre,Nombre_Materias : Vector_caracteres;
Promedios : Vector_Promedios;

Begin
Clrscr;
Estudiantes := 1;
Repeat
Writeln('Cuantos estudiantes tiene la seccion?');
Readln(N);
Until n > 0;
Repeat
Writeln(' Cuantas materias tienen los estudiantes? ');
Readln(Materias)
Until Materias > 0;
ContMaterias:= 1;
Repeat
Writeln(' Nombre de la materia? ', ContMaterias);
Readln(Nombre_Materias[ContMaterias]);
ContMaterias := ContMaterias + 1
Until ContMaterias > Materias;
While (Estudiantes <= N) do
Begin
Writeln(' Nombre del estudiante?');
Readln(Nombre[Estudiantes]);
ContMaterias := 1;
Sumaest := 0;
While ContMaterias <= Materias Do
Begin
Repeat
Writeln('Nota estudiante ', Nombre[Estudiantes],' en la Materia ',
Nombre_Materias[ContMaterias]);
Readln(Notas[Estudiantes,ContMaterias]);
Until (( 0 <= Notas[Estudiantes,ContMaterias]) and
(Notas[Estudiantes,ContMaterias] <= 20));
Sumaest := (sumaest + Notas[Estudiantes,ContMaterias]);
ContMaterias := ContMaterias + 1
End;
Promedios[Estudiantes] := Sumaest/Materias;
Estudiantes := Estudiantes + 1
End;
Clrscr;
For I := 1 to n Do
Begin
Writeln('El promedio del estudiante ', Nombre[I], ' es ', Promedios[I]:5:2,'
puntos');
Writeln;
Write ('Sus notas son ');
For J:= 1 to Materias Do
Write (' ', Notas[i,j]);
Writeln
End;
Writeln;
Writeln('Promedios por Materias');
For K := 1 to Materias Do
Begin
SumaMat:= 0;
For L:= 1 to N do
SumaMat:= SumaMat + Notas[L,K];
Promat:= SumaMat/N;
Writeln('El promedio de la materia ', Nombre_Materias[K],' es ',Promat:5:2);
Writeln;
End;
Readln
End.
program promedia;
{Programa que lee una lista de calificaciones, calcula su media e imprime una
lista de calificaciones mayores que la media}

const
limite = 100; {numero de alumnos}

var
Notas : array[1..limite] of real;
Num, i : integer;
suma, media : real;

begin
Repeat
Writeln('Introduzca el numero de calificaciones');
Readln(Num);
If num > 100 then Writeln ('El maximo es 100');
until Num <= 100;
suma := 0;
For i := 1 to Num do
begin
repeat
Writeln('Introduzca la ',i,'a nota');
Readln(Notas[i]);
If (Notas[i] < 0) or (Notas[i] > 20)
then
Writeln('Las notas deben estar entre 0 y 20');
until (Notas[i] >= 0) and (Notas[i] <= 20);
suma := suma + Notas[i];
end;
media := suma/Num;
Writeln ('La media es ', media:3:1);
Writeln;
Writeln('Lista de calificaciones > media');
For i:= 1 to Num do
If Notas[i] >= media
then
Writeln(Notas[i]:3:1);
Readln
end.
program sumaposyneg;
{programa que toma n datos, guardando los positivos en un vector,
los negativos en otro vector; también halla sus sumas y mayor y menor}

uses
Crt, Dos;

var
Pos, Neg : array[1..50] of integer;
N, x, contp, contn, sumap,suman, i, may, men: integer;

begin
contp:= 0;
contn:= 0;
sumap:= 0;
suman:= 0;
may := 0;
men := 9999;
Writeln('Cuantos numeros desea introducir?');
Readln(n);
For i:= 1 to N do
begin
Writeln('Introduzca numero');
Readln(x);
If x >= 0
then
begin
contp := contp + 1;
pos[contp] := x;
end
else
begin
contn := contn + 1;
neg[contn] := x;
end;
If x > may
then
may := x
else
If x < men
then
men := x;
end;
For i := 1 to contp do
sumap := sumap + pos[i];
Writeln('La suma de los positivos es ', sumap);
For i := 1 to contn do
suman := suman + neg[i];
Writeln('La suma de los negativos es ', suman);
Writeln('El mayor es ', may, ' y el menor es ', men);
Readln
end.
Program Principal;
{Programa que calcula el producto de dos matrices}

Type
Matriz = Array[0..255,0..255] of Integer ;
Var
N, M, K, L, I, J, X : Integer ;
A, B,C : Matriz;

Begin {Principal}
Repeat
WriteLn('Número de Filas y columnas matriz A?');
ReadLn(N);
ReadLn(M)
Until (N > 0) and (M > 0);
Repeat
WriteLn('Número de Filas y columnas matriz B?');
ReadLn(K);
ReadLn(L)
Until (K > 0) and (L > 0);
If M = K Then
Begin
Writeln(„Elementos de la matriz A‟);
For I := 1 To N do
For J := 1 To N do
Begin
WriteLn('Introduzca numero');
ReadLn(A[i,j])
End;
Writeln(„Elementos de la matriz B‟);
For I := 1 To N do
For J := 1 To N do
Begin
WriteLn('Introduzca Número');
ReadLn(B[I,J])
End
{Calculo del producto}
For I := 1 To N do
For J := 1 To L do
Begin
C[I,J] := 0;
For X := 1 To N do
C[I,J] := C[I,J] + A[I,X]*B[X,J]
End;
End
Else
WriteLn('El producto no es posible');
{Presentacion de resultados}
If M = K Then
Begin
WriteLn('Matriz producto');
For I := 1 To N do
For J := 1 To N do
WriteLn(C([,J])
End
End.
Problemas Propuestos

Codifique en Turbo Pascal los siguientes problemas:

1.- Hacer un programa que lea una lista de calificaciones, calcule la media e
imprima una lista de calificaciones mayores que la media.

2.- Hacer un programa que lea un vector A de N elementos, calcule e imprima cuál
es el mayor y en qué posición se encuentra y cuál es el menor y en qué
posición se encuentra.

3.- Realizar un programa que lea N datos, con los cuales forme 2 vectores, cada
uno de 100 datos máximo. El primer vector con los datos pares, el segundo con
los datos impares. Si los N datos no alcanzan para llenar los vectores de 100
datos, complete el vector de pares con el número 2 y el de impares con el
número 1. Imprímalos.

4.- Hacer un programa que lea un vector de N elementos y que calcule e imprima
el valor de la siguiente sumatoria:
S = A(1) + A(2) + A(4) + A(7) + A(11) + A(16) + A(22) + A(29) + …

5.- Realizar un programa que lea N datos, guardando los positivos en un vector,
los negativos en otro vector halle las sumas de los negativos y los positivos
separadamente, y busque además el mayor y el menor de todos los números.

6.- Un instituto desea controlar los resultados de los alumnos en las diferentes
asignaturas de un semestre de la carrera de informática. Hacer un programa
que lea el nombre del estudiante y las calificaciones obtenidas en las distintas
asignaturas, luego mostrar en pantalla el nombre de cada estudiante, la media
obtenida y la lista de calificaciones de ese estudiante. El programa deberá
también calcular el promedio de todos los estudiantes en cada asignatura, es
decir la media por asignatura.

7.- Realizar un programa que obtenga a partir de una serie de 100 datos
estadísticos (Xi), las medidas más generalizadas de centralización y dispersión.
Medidas básicas de centralización y dispersión:
Valor mínimo: Xmin Valor máximo: Xmax
Rango: R= Xmax - Xmin Media aritmética: = 1/n∑ Xi
Varianza: S2 =1/n∑(Xi - X)2 = 1/n∑Xi 2- X2
Desviación típica: S = √(1/n∑Xi 2- ¯X2 )
Coeficiente de variación: r = s/X¯

8.- Para una muestra de N personas se recogen los siguientes datos: cédula,
sexo, valor del cociente intelectual dependiendo de las siguientes edades 15,
20, 30 45 años. Se desea saber:
- Cociente intelectual promedio de las personas entrevistadas.
- Cociente intelectual promedio de los hombres y de las mujeres.
- Quiénes tienen mayor cociente intelectual los hombres o las mujeres.
- A la edad de 15 años cuantos tienen un cociente intelectual mayor que 120.
- Diferencia entre los cocientes intelectuales de los que poseen 15 años y los de
45 años.
- Indicar los datos de la persona que tiene mayor cociente intelectual, en caso de
coincidir varias con el mismo cociente indicar el listado con los datos de las
mismas.

9.- El dueño de una papelería lleva el control de sus artículos mediante la


siguiente información: Descripción del artículo, código, costo, precio de venta,
origen (nacional o importado), existencia.
Se desea calcular:
- El precio definitivo de los artículos sabiendo que al precio de venta debe
incrementársele el 4% del precio del costo por concepto de impuesto si el
artículo es importado, si es nacional sólo el 2%.
- La ganancia producida por cada artículo.
- Total de la ganancia producida por cada artículo.
- Cuantos artículos son nacionales.
- Producir un listado que muestre solamente el código y la existencia de aquellos
artículos importados cuyo precio de costo sea mayor de 200.

10.- Realizar un programa que calcule la suma y la multiplicación de dos


matrices.

11.- Determinar el número de términos del vector B[J], J = 1..M, repetidos en el


vector A[I], I = 1..N.

12.- Dados dos vectores, A[I], I = 1..N y B[J], J = 1..M; que no tienen números
repetidos, elaborar un programa que cree un vector C con los términos
comunes a ambos vectores. Por ejemplo: A[I] = 5,8,3,7,2 B[J] = 1,9,5,3,6,2
C[K] = 5,3,2

13.- Hacer un programa que construya una matriz identidad I, de orden N.


Ejemplo. N = 4. N = Orden de la matriz.
1 0 0 0
0 1 0 0
I= 0 0 1 0
0 0 0 1
14.- Hacer un programa para hallar la transpuesta de una matriz. Por ejemplo
para una matriz de 3 * 3
1 2 3 1 4 7 A = Matriz Original
A= 4 5 6 B= 2 5 8 B = Matriz Transpuesta de A
7 8 9 3 6 9
15.- Hacer un programa que lea una matriz A de filas y 20 columnas. Los
elementos son números enteros y positivos. Crear e imprimir dos vectores así:
El vector B que contenga todos los números pares de la matriz y el vector C
que contenga todos los números impares.

16.- Hacer un programa que lea una matriz A de m filas y n columnas. Calcular e
imprimir la suma de cada una de sus filas y de cada una de sus columnas.

17.- Hacer un programa que lea una matriz cuadrada A de m filas y n columnas.
Calcular e imprimir la suma de: Diagonal Principal, Triangular Inferior,
Triangular Superior y Diagonal Secundaria.

18.- Hacer un programa que lea una matriz de m filas y n columnas. Calcular e
imprimir la suma de todos los elementos periféricos:

A(1,1) + A(1,2) + A(1,3) + ... + A(1,n) + A(2,1) + A(2,n) + A(3,1) + A(3,n) + A(4,1) +
A(4,n) + ... + A(m,1) + A(m,2) + A(m,3) + ... + A(m,n).

19.- Hacer un programa que construya la siguiente matriz:

1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9

20.- Hacer un programa que construya la siguiente matriz:


1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1

21.- Hacer un programa que busque un dato cualquiera X, dentro de un vector


de 100 elementos, e indique la posición donde lo encontró.
22.- Hacer un programa que coloque el último elemento de un vector de 25
enteros, en le primer lugar, el penúltimo en el segundo y así sucesivamente.
Debe imprimir el resultado al final.

23.- Dados N números de hasta 2 dígitos, hacer un programa que determine, de


esos números, cuántas veces está el número 1, el 2, el 3, ...., el 98, y el 99.
Además determine cuál número está más veces.

24.- Una empresa tiene 250 empleados, por cada uno de ellos se tiene un
registro que tiene dos datos, el nombre del empleado y su correspondiente
salario mensual. Hacer un programa que determine cuántos empleados ganan
más del promedio salarial de la empresa.

25.- Escriba un programa que almacene en un vector los días de la semana.

26.- Escriba un programa que almacene su nombre en un vector.

27.- Escriba un programa que almacene en un vector los números pares del 1
al 10.

28.- Escriba un programa que lea diez números enteros y los invierta.

29.- Escriba un programa que lea las dimensiones de una matriz, las lea,
visualice la matriz y que encuentre el menor y mayor elemento de esa matriz y
sus posiciones.

30.- Escriba un programa que encripte un password de siete letras debe


contener consonantes y vocales. El algoritmo de encriptación será sustituir
cada vocal por el número que le corresponde. (A=1, E=2,O=3,I=4,U=5).

31.- Escribir un programa que en una matriz almacene los números primos del 1
al 100.

32.- Escriba un programa que capture e imprima la siguiente tabla:


Distrito Candidato A Candidato B Candidato C
1 194 48 206
2 180 20 320
3 221 90 821
4 432 50 946

33.- Escriba un programa que almacene en una matriz los números pares del 1
al 40 y los imprima.
ORDENAMIENTO

Directos  Burbuja, Selección, Inserción


Indirectos  Shell, Ordenamiento rápido, Ordenamiento por mezcla

Ordenamiento por Burbuja

Es un método clásico, sencillo y poco eficiente. Se basa en la comparación de


elementos adyacentes de la lista (vector) e intercambiar sus valores si están
desordenados. De este modo se dice que los valores mas pequeños burbujean
hacia arriba, hacia los primeros elementos del vector, mientras que los mayores se
hunden hacia el fondo, hacia los últimos elementos del vector.

Método

Para I = 1 hasta (N -1) Repita


Para J = 1 hasta (N - i) Repita
Si A [J] > A [J + 1]
Entonces
Aux = A[J]
A[J] = A[J + 1]
A[J + 1] = Aux
{Fin Repita Para J}
{Fin Repita Para I}

Codificación en Turbo Pascal

For I = 1 to (N – 1) Do
For J = 1 to (N – I) Do
If A [J] > A [J + 1]
Then
Begin
Aux = A[J]
A[J] = A[J + 1]
A[J + 1] = Aux
End;
Programación Modular y Programación Estructurada
Uno de los métodos más conocidos para resolver un problema es dividirlo en
problemas mas pequeños, llamados subproblemas. De esta manera, en lugar de
resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de
ellas llegamos a la solución. Esta técnica se usa mucho en programación ya que
programar no es mas que resolver problemas, y se le suele llamar diseño
descendente, metodología del divide y vencerás o programación de arriba abajo
(top-down). La programación modular es uno de los métodos de diseño más
flexibles y potentes para mejorar la productividad de un programa.

Es evidente que…
Programación Modular y Programación Estructurada
Uno de los métodos más conocidos para resolver un problema es dividirlo en
problemas mas pequeños, llamados subproblemas. De esta manera, en lugar de
resolver una tarea compleja y tediosa, se resuelven otras más sencillas, y a partir
de ellas se llega a la solución. Esta es una técnica muy usada en programación,
puesto que programar no es más que elaborar programas para resolver problemas
usando el computador. A dicha técnica se le conoce como Diseño Descendente,
Metodología de Divide y Vencerás o Programación de Arriba a Abajo (Top-
Down). La programación modular es uno de los métodos de diseño más flexibles y
potentes para mejorar la productividad de un programa.

Puesto que esta metodología nos lleva a tratar con sub-problemas, entonces para
resolverlos, evidentemente hay que trabajar con subprogramas. A estos últimos
también se les conoce como módulos, de ahí el nombre de Programación
Modular.

En el esquema a continuación se muestra un ejemplo del empleo del diseño


descendente. Por ejemplo, si se desea crear un programa para gestionar las notas
de los alumnos de una sección de una materia cualquiera, y dicho programa debe
realizar las tareas de lectura de notas, cálculo de promedios y otras estadísticas,
cambiar nota, eliminar nota, producir listados de alumnos con todos sus datos, etc.
Se pueden crear diversos subprogramas que se ocupen de cada una de las tareas
en particular, de la siguiente manera:

Notas Alumnos

Leer Estadística Modificar Listar


s

Promedio Otras Por apellido Por Notas

En Turbo Pascal se dispone de dos tipos de subprogramas: los Procedimientos y


las Funciones.
FUNCIONES

Una función es un subprograma que recibe como argumentos o parámetros, datos


de tipo numérico o no numérico (caracteres, cadenas u otros) y devuelve un
resultado. Esta característica la diferencia esencialmente de un procedimiento.

Formato:
Nombre_de_función (argumento1, argumento2,…)

El argumento se conoce en términos de lenguajes de programación con el nombre


de parámetro. Para poder calcular el valor o resultado de la función, todo lo que
se necesita conocer es el valor o valores de los parámetros respectivos.
Como el concepto más difundido de función entra dentro del campo de las
matemáticas, recordaremos con un ejemplo la noción de función, asociada a
variables (argumentos o parámetros en programación).
Algunos ejemplos de funciones son:
f(x) = x
h(x) = 4/x

Cada una de estas funciones devuelve un resultado para cada valor particular de
x. Así, para x = 1, las funciones se representan por f(1), h(1) y sus valores son:

f(x) = 1
h(x) = 4/1 = 4

Las funciones son un medio muy adecuado de resolver operaciones complejas


matemáticas o de otras disciplinas afines, así como tratar diferentes tipos de datos
definidos en Turbo Pascal y realizar con ellos procesos complejos.

Tipos de Funciones

En Turbo Pascal existen dos grandes grupos de funciones:

• Funciones predefinidas, internas o estándar y


• Funciones definidas por el usuario

Funciones predefinidas, Internas o Estándar

Son las funciones que vienen incluidas, o que son aceptadas por el lenguaje....
Entre las funciones predefinidas, se tienen las matemáticas, las ....
Funciones aritméticas ó matemáticas

Funciones Matemáticas
Nombre Argumento Descripción
Abs(x) Real o Integer Devuelve el valor absoluto del argumento
ArcTan(x)* Real o Integer Devuelve el arco tangente del argumento
Cos(x)* Real o Integer Devuelve el coseno del argumento
Exp(x) Real o Integer Devuelve el exponencial del argumento
Frac(x) Real Devuelve la parte decimal del argumento
Int(x) Real Devuelve la parte entera del argumento
Ln(x) Real o Integer Devuelve el logaritmo natural del argumento
Pi Real Devuelve el valor de Pi (3.1415926535897932385)
Odd(x) Integer Devuelve un resultado lógico si el argumento es impar
Round(x) Real o Integer Devuelve el entero mas próximo del argumento
Sin(x)* Real o Integer Devuelve el Seno del argumento
Sqr(x) Real o Integer Devuelve el cuadrado del argumento
Sqrt(x) Real o Integer Devuelve la raiz cuadrada del argumento
Trunc(x) Real Devuelve la parte entera de su argumento
* El argumento de estas funciones es siempre en radianes

Funciones Ordinales
Función Definición
ord(x) Devuelve el numero ordinal correspondiente al argumento x.
chr(x) Devuelve el caracter en el código ASCII correspondiente al argumento x.
succ(x) Devuelve el sucesor del argumento; produce un error si no tiene sucesor.
pred(x) Devuelve el predecesor del argumento
Funciones Exponenciales o Logarítmicas

XY = Exp(Y * Ln(X))

Deducción:
XY = t
Ln(XY) = Ln t
Y * Ln(X) = Ln t
Exp(Y * Ln(X)) = t = XY

Funciones Definidas por el Usuario

Además de las funciones predefinidas citadas anteriormente, es posible que el


usuario pueda declarar sus propias funciones.
Como hemos dicho anteriormente, una función es un subprograma que devuelve
un único resultado al programa o subprograma que le llamó (o lo invocó).
Formato:
Function nombre_de_la_funcion (parámetros): tipo
(declaración de variables locales)
Begin
<cuerpo de la función>
Nombre_de_la_función := valor de la función
End;

Estas son, como su nombre lo indica, las que el propio usuario declara, define o
establece para realizar una tarea específica. Las funciones nacen con el propósito
de ser subprogramas que siempre tienen que devolver algún valor.

Las dos principales características de las funciones son:


 Las funciones siempre devuelven un valor al programa que las invocó.
 Para invocar una función es necesario hacerlo en una expresión. Se escribe
su nombre en el cuerpo del programa, y si los necesita, se incluyen los
parámetros entre paréntesis.

Veamos el esqueleto básico que comparten las funciones:

function nombre [(p1,p2,...)] : tipo;


const lista_constantes;
type lista_tipos;
var lista_variables;
(*declaracion de subprogramas*)
begin
(* cuerpo de la función *)
nombre := valor_devuelto
end;
Comentemos la sintaxis de una función que aparece en el cuadro anterior:
 La lista de parámetros (p1,p2,...) está encerrada entre corchetes porque es
opcional como en los procedimientos.
 tipo es el tipo del dato que devolverá la función. Así podemos dividir las
funciones en lógicas (boolean), enteras (integer), reales (real) y de carácter
(char)
 Y al final del cuerpo de la función es obligatorio asignarle un valor del tipo
devuelto al nombre de la función, porque como ya hemos dicho una función
siempre devuelve un valor.

Ejemplos

Program Cubo_de_numero;

Uses
Crt;

Var
Num, valor: Integer;

Function Cubo(Numero: Integer):Integer;


Begin
Cubo:= Num*Num*Num;
End;

Begin
Clrscr;
Writeln('Introduzca un numero entero');
Readln(Num);
Valor:= Cubo(Num);
Writeln('El cubo de ',Num,' es ', valor);
Readln
End.

Program Cubo_de_numero;
{Programa que calcula el cubo de un número, utilizando una función}

Uses
Crt;

Var
Num, Valor : Integer;

Function Cubo(Numero: Integer):Integer;


Begin
Cubo:= Numero*Numero*Numero;
End;

Begin
Clrscr;
Writeln('Introduzca un numero entero');
Readln(Num);
Valor:= Cubo(Num);
Writeln('El cubo de ',Num,' es ', Valor);
Readln
End.
Program Principal; { <-- Programa Principal --> }
{Programa para explicar el uso de funciones}
Uses
Crt;
Var
a, b, s, m, listo: Integer ;

Function suma(Var a : Integer ; Var b : Integer ): Integer ;


{ <-- Subprograma 1 --> }
Begin
suma := a+b;
End;

Function multiplica(Var a : Integer ; Var b : Integer ): Integer ;


{ <-- Subprograma 2 --> }
Begin
multiplica := a*b;
End;

Function Imprimir(Var sum : Integer ; Var prod : Integer ): Integer ;


{ <-- Subprograma 3 --> }
Var
listo : Integer ;
Begin
WriteLn('La suma es: ' , sum);
WriteLn('La multiplicación es: ' , prod);
listo := 1; {Utilicé este subterfugio para convertir un procedimiento en función}
End;

Begin {Principal}
Clrscr;
WriteLn('Introduzca dos valores:');
ReadLn(a);
ReadLn(b);
s := suma(a,b);
m := multiplica(a,b);
listo := Imprimir(s,m); {Utilicé este subterfugio para convertir un procedimiento en
función}
Readln
End.
Program Sumatoria;
{Programa que calcula la suma 1 + 2 +... + n usando una función donde n es una
variable que pasa a la función como parámetro formal}

Uses
Crt;

Var
Resultado, Num : Integer;

Function Suma(N:Integer):Integer;
{Esta es la funcion que calcula la sumatoria}

Var
Total, J :Integer;

Begin
Total := 0;
For J:= 1 to N Do
Total := Total + J;
Suma:= Total
End; {Fin de la funcion}

{Programa Principal}
Begin
Clrscr;
Writeln('Introduzca el numero de términos de la sumatoria');
Readln(Num);
Resultado:=Suma(Num);
Writeln('El valor de la suma es de los primeros ',Num, ' naturales es ',
Resultado);
Readln
End.
Program Mayor_funcion;
{Programa que calcula el mayor de tres números, usando una función}
Uses
Crt;
Var
Mayor,A,B,C : Integer;

Function Max3(N1,N2,N3:Integer):Integer;
{Funcion que calcula el mayor}
Var
Maximo: Integer;

Begin
{Encontrar el mayor de a y b}
If A > B
Then
Maximo := A
Else
Maximo := B;
{Ahora compara el mayor de a y b con c}
If Maximo > C
Then
Max3 := Maximo
Else
Max3 := C
End;

{Programa Principal}
Begin
Clrscr;
Writeln('Introduzca los tres valores ');
Readln(A,B,C);
Mayor:= Max3(A,B,C);
Writeln('El mayor de los tres números es ', Mayor);
Readln
End.
Program Anio_Bisiesto;
{Programa que determina si un año es bisiesto. Un año es bisiesto si es múltiplo
de 4;(por ejemplo 1984). Los años múltiplos de 100 no son bisiestos, salvo si ellos
son también múltiplos de 400 (2000 es bisiesto pero 1800 no lo es}
Uses
Crt;

Var
Anio : Integer;
Resultado : Integer;

Function Bisiesto(Anno:Integer):Integer;

Begin
bisiesto:= 0;
If Anno mod 4 = 0
Then
bisiesto := 1
Else
bisiesto := 0;
If (Anno mod 100 = 0) and (Anno mod 400 <> 0)
Then
bisiesto := 0;
End;

Begin {Programa Principal}


Clrscr;
Writeln('Cual es el a¤o?');
Readln(Anio);
Resultado := Bisiesto(Anio);
If Resultado = 1
Then
Writeln('El año ', Anio, ' es Bisiesto')
Else
Writeln('El añ¤o ', Anio, ' no es Bisiesto');
Readln
End.

Program Anio_Bisiesto;
{Programa que determina si un año es bisiesto. Un año es bisiesto si es múltiplo
de 4;(por ejemplo 1984). Los años múltiplos de 100 no son bisiestos, salvo si ellos
son también múltiplos de 400 (2000 es bisiesto pero 1800 no lo es}
{En este programa la función produce un resultado que es una cadena de
caracteres }

Uses
Crt;
Var
Anio : Integer;
Resultado : String[15];

Function Bisiesto(Anno:Integer):String;

Var
Esbisiesto : Integer;

Begin
Esbisiesto:= 0;
If Anno mod 4 = 0
Then
Esbisiesto := 1
Else
Esbisiesto := 0;
If (Anno mod 100 = 0) and (Anno mod 400 <> 0)
Then
Esbisiesto := 0;
If Esbisiesto <> 0
Then
Bisiesto := 'Es Bisiesto'
Else
Bisiesto := 'No es Bisiesto';
End;

{Programa Principal}
Begin
Clrscr;
Writeln('Cual es el año?');
Readln(Anio);
Resultado := Bisiesto(Anio);
Writeln('El año ', Anio,' ', Resultado);
Readln
End.
Comparación entre Funciones y Procedimientos

En vez de la palabra procedure se debe utilizar la palabra function


Al igual que en los procedimientos, el nombre de una función es un identificador.
Sin embargo, el nombre de la función se refiere a la posición de memoria que
contiene el valor devuelto por la función.
La lista de los parámetros formales son los identificadores utilizados para recibir
valores del programa.
El tipo de datos del resultado coincide con el tipo expresado en la cabecera de la
función.
En el cuerpo de la función tiene que existir una sentencia de asignación como la
siguiente:

Nombre_función := valor_función

La función sólo devuelve un valor, el procedimiento puede devolver cero, uno o


varios valores.
El tipo de dato del resultado de la función debe estar indicado en la cabecera y
puede ser tipo char, integer, real o boolean.

Ejemplo:
Program Cubo_Numero;
{Programa que calcula el cubo de un número, usando una función}

Uses
Crt;
Var
Numero, Valor: Integer;

Function Cubo (Num: Integer):Integer;


{Función que calcula el cubo del número}
Begin
Cubo := Num*Num*Num;
End;

{Programa Principal}
Begin
Write ('Introduzca un número entero: ');
Readln (Numero);
Valor := Cubo(Numero);
Write ('El cubo de ',Numero,' es ',Valor);
End.
Llamadas a una Función

Una función definida por el usuario, se invoca de igual modo que una función
Pascal estándar, (predefinida); haciendo referencia a ella en una extensión.
La llamada se realiza con el identificador de la función (designador) o nombre de
la función, acompañado por la lista de parámetros, en una sentencia de asignación
o en una sentencia de salida (escritura)

Formato:
Nombre_de_Función(lista de parámetros actuales)

Reglas:
- Los parámetros actuales deben estar separados por comas
- El número de parámetros actuales y formales debe ser el mismo, y
además los parámetros correspondientes, deben ser de
igual tipo.

Parámetros Actuales y Formales

Las sentencias de llamadas a subprogramas constan de dos partes: un nombre


de subprograma y una lista de parámetros, llamados actuales:

Nombre_subprograma (pa1, pa2, pa3, …)

Los parámetros actuales pa1, pa2, pa3, … contienen los valores que se pasan al
subprograma identificado como Nombre_subprograma.

En el momento que se hace la declaración de un subprograma, se incluye una


serie de parámetros, (pf1, pf2, pf3, …), que son denominados parámetros formales
o ficticios. Sirven para contener los valores de los parámetros actuales cuando de
realiza la llamada al subprograma.

Por ejemplo: Function Nombre_Subprograma(pf1, pf2, pf3, …:tipo):tipo

El valor de los parámetros actuales no se conoce en el momento de realizar la


declaración del subprograma, sin embargo, cuando se ejecuta la sentencia de
llamada al subprograma, es preciso que tengan valores asignados, ya que en caso
contrario se producirá error.
15. Subprogramas: Funciones y Procedimientos

4.1 Procedimientos

4.1.1 Concepto

Un procedimiento es un programa que realiza una tarea específica. Puede recibir


cero o más valores del programa que llama y devolver cero o más valores al
programa que realizó la llamada. Un procedimiento está compuesto de un grupo
de sentencias a las que se asigna un nombre (identificador) y constituye una
unidad de programa. La tarea asignada al procedimiento se ejecuta siempre que
Pascal encuentra el nombre del procedimiento.
Los procedimientos es obligatorio declararlos y deben ser declarados antes de que
puedan ser referenciados en el cuerpo del programa. En Pascal reciben el nombre
de PROCEDURE.

4.1.2 Declaración de un procedimiento

Al igual que los identificadores, los procedimientos deben declararse dentro del
cuerpo del programa. La declaración de un procedimiento NO indica a la
computadora que ejecute las instrucciones dadas, sino que indica a la
computadora cuáles son estas instrucciones y dónde están localizadas cuando
sea necesario.
El formato del procedimiento es el siguiente:

Procedure nombreproc;
Declaraciones locales
Begin
Cuerpo del procedimiento
End;

A las variables que se encuentran dentro de un procedimiento se les llaman


Variables Locales y a las que se ubican en el cuerpo principal, fuera de los
procedimientos, se les llama Variables Globales.

En resumen, un procedimiento, al igual que un programa, consta de tres partes:


 Una cabecera del procedimiento que proporciona el nombre del mismo y,
en caso de existir, una lista de parámetros formales.
 Una sección de declaración que puede contener constantes, variables e
incluso otros procedimientos.
 Una sección ejecutable: el cuerpo del procedimiento.

Ejemplo:
Program Recuadro;
Var I : Integer;
Procedure Estrellas;
(* Este procedimiento visualiza 15 asteriscos *)
Begin
For I := 1 to 15 do
Write (`*´)
End;
Begin
Estrellas; (* Llamado del procedure *);
Write (`Mensajes´);
Estrellas; (* Nuevo llamado del procedure *);
End.

Ventajas de utilizar procedimientos

La organización de un programa en procedimientos lo hace más fácil de escribir y


depurar. Los procedimientos no deben exceder de 25 líneas.
Las ventajas de utilizar procedimientos son:
 Facilita el diseño descendente.
 Los procedimientos se pueden ejecutar más de una vez en un programa y/o
en diferentes programas, ahorrando tiempo de programación.
 El uso de procedimientos facilita la división de las tareas entre un equipo de
programadores y se pueden comprobar individualmente.

16. Parámetros

Concepto

Un parámetro es un método para pasar información (valores a variables) del


programa principal a un procedimiento y viceversa.
Un parámetro es, prácticamente, una variable cuyo valor debe ser ya sea
proporcionado por el programa principal al procedimiento o ser devuelto desde el
procedimiento hasta el programa principal. Por consiguiente, existen dos tipos de
parámetros:
 Parámetros de entrada: Sus valores deben ser proporcionados por el
programa principal.
 Parámetros de salida: Son parámetros cuyos valores se calcularán en el
procedimiento y se deben devolver al programa principal para su proceso
posterior.

Transferencia de información desde y/o hasta los procedimientos

Existen dos tipos de procedimientos:


 Procedimientos sin parámetros: No existe comunicación entre el programa
principal y los procedimientos ni viceversa.
 Procedimientos con parámetros: Existe comunicación entre el programa
principal y los procedimientos o entre dos procedimientos.
Ejemplo 1:
(Parámetros de entrada)
Procedure RecuadroDos (N : Integer);
Var
J : Integer;
Begin
For J := 1 to N do
Write(`*´)
End;

Ejemplo 2:
(Parámetros de entrada/salida)
El procedimiento Geometria recibe la longitud y anchura de un rectángulo, calcula
el área y perímetro del rectángulo y devuelve los valores obtenidos al programa
principal.
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perímetro : Real);
Begin
Area := Longitud * Anchura;
Perimetro := 2 * (Longitud + Anchura)
End;

Parámetros actuales y formales

Las sentencias llamadas a procedimientos constan de dos partes: un nombre de


procedimiento y una lista de parámetros llamados actuales:
Nombreproc (pa1,pa2, pa3,...);

Los parámetros actuales pa1, pa2, pa3, ... deben tener unos valores que se pasan
al procedimiento nombreproc.
En la declaración de un procedimiento cuando se incluyen parámetros, éstos se
denominan parámetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven para
contener los valores de los parámetros actuales cuando se invoca el
procedimiento.
Procedure nombreproc (pf1, pf2, pf3, ...)

El valor de los parámetros actuales no se conoce cuando se declara el


procedimiento, sin embargo, cuando se ejecuta la sentencia de llamada al
procedimiento es preciso que tengan valores asignados, ya que en caso contrario
se producirá un error.

Program Correspondencia;
Uses Wincrt;
Var
X,Y,A,P : real;
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perimetro : Real);
Begin (* Geometría *)
Area := Longitud * Anchura;
Perimetro := 2 * (Longitud + Anchura)
End;
Begin
WriteLn ('Introducir longitud: ');
Readln (X);
WriteLn ('Introducir anchura: ');
Readln (Y);
Geometria (X,Y,A,P); (* Llamada al procedimiento *)
WriteLn ('El área es: ', A:6:2);
WriteLn ('El perímetro es: ', P:6:2)
End.

17. Parámetros valor y parámetros variable

Parámetros valor

Son parámetros unidireccionales que se utilizan para proporcionar información a


un procedimiento, pero no pueden devolver valores. Si la palabra var no aparece
delante del parámetro formal en un procedimiento, la computadora supone que el
parámetro formal es un parámetro valor. En la llamada al procedimiento el valor
del parámetro actual se pasa a la variable que represente el parámetro actual.
Este valor puede ser modificado dentro del programa, pero su valor no se puede
devolver al programa o procedimiento llamante.

Parámetros variable

En la declaración de un procedimiento, los nombres de los parámetros variables


están precedidos con la palabra var. Los parámetros variable se utilizan tanto para
recibir como para transmitir valores entre el subprograma y el programa llamante.
Estos parámetros pueden actuar como parámetros de salida o de entrada/salida.
El siguiente ejemplo ilustra la diferencia entre parámetros valor y variable en
Pascal y la correspondencia entre ellos.

Program EjemploParametros;
Uses Wincrt;
Var
A,B,C : Integer;

Procedure Imprimir (D, E, F : Integer);


Begin
WriteLn ('A = ', D:1, ' ':5,'B = ', E:1,' ':5,'C = ', F:1)
End;

Procedure Pasar (D,E : Integer; Var F : Integer);


Begin
Writeln ('Entrada al procedimiento Pasar');
Imprimir (D, E, F);
F := D * E;
WriteLn ('Salida del procedimiento Pasar');
Imprimir (D, E, F)
End;

Begin
A := 2;
B := 3;
C := 4;
WriteLn ('Antes de llamar al procedimiento Pasar');
Imprimir (A, B, C);
Pasar(A, B, C);
WriteLn ('Después de llamar al procedimiento Pasar');
Imprimir (A, B, C);
End.

La salida de este programa es:


Antes de llamar al procedimiento Pasar
a=2 b=3 c=4
Entrada al procedimiento Pasar
a=2 b=3 c=4
Salida del procedimiento Pasar
a=2 b=3 c=6
Después del retorno del procedimiento Pasar
a=2 b=3 c=6

18. Subprogramas: Funciones y Procedimientos

4.2 Paso de parámetros (repaso...)

4.2.1 Ejemplo

En este ejemplo los parámetros formales a y b recibe, cuando son llamados, los
valores contenidos en los parámetros actuales de x e y.
Program Calculo;
Uses wincrt;
Var
x,y : real;
Procedure mayor (a,b : real);
Var
max : real;
Begin
if a > b then
max := a
else
max := b;
writeln ('El mayor de los dos números es ',max:4:2);
End;
Begin
repeat
write ('Introduzca dos números ');
readln (x,y);
mayor (x,y)
until x = 0
End.

4.2.2 Ejemplo

El siguiente ejemplo muestra un intercambio de valores de dos variables con un


procedimiento.

Program Intercambio;
Uses wincrt;
Var
x,y : real;
resp : char;
Procedure cambio (var a,b : real);
Var
aux : real;
Begin
aux := a;
a := b;
b := aux;
writeln ('Ahora el valor de a es ',a:5:2,' y el valor de b es ',b:5:2);
End;
Begin
repeat
clrscr;
write ('Introduzca el valor para x ');
readln (x);
write ('Introduzca el valor para y ');
readln (y);
cambio(x,y);
writeln;
write ('Desea continuar (S/N)?');
readln (resp);
until (resp = 'N') or (resp = 'n')
End.
Práctica general

1. Hacer un programa que calcule lea la Cédula de Identidad del empleado, el


nombre del empleado y el salario bruto.
Debe utilizar un procedimiento de cálculo tomando como parámetro el salario
bruto (utilice una variable diferente al del programa principal). Finalmente, debe
calcular la deducción de la Caja y del Banco Popular y el salario neto.
La salida del programa debe ser la siguiente:
El empleado (nombre), cédula No. (ci_empleado), obtuvo un salario neto de...
Sus deducciones suman ....

2. Hacer un programa de funciones aritméticas que lea un número real y mediante


un menú y utilizando procedimientos para cada función calcule:
- El seno de ese número
- El cuadrado de ese número
- La raíz cuadrada de ese número
- La parte decimal del número
- La parte entera del número

3. Diseñe un programa que mediante una función calcule la suma de los números
que están en un rango establecido. (Por ejemplo de 1 a 100). Pruebe con varios
rangos.

4. Escribir un programa que, mediante una función devuelva el valor del día de la
semana en respuesta a la entrada de la letra inicial de dicho día.

5. Mediante una función, determinar el número de días de un mes dado.

6. Escriba un programa que mediante una función determine si un número es


primo.

Respuesta No 1.
Program Salario;
Uses crt;
Var
id_empleado,i,n : integer;
nom_empleado : string [40];
sal_bruto,salario_neto,tod_ded: real;
resp : char;

Procedure calcula (var sal_brut : real);


Var
cc_ss,b_p : real;
Begin
cc_ss := sal_brut * 0.08;
b_p := sal_brut * 0.01;
tod_ded := cc_ss + b_p;
salario_neto := sal_brut - tod_ded
End;
Begin
i:=1;
Write ('Digite el número de empleados a procesar: ');
readln (n);
While i <= n do
begin
clrscr;
write ('Id. del empleado ',i,' de ',n,' : ');
readln (id_empleado);
write ('Nombre: ');
readln (nom_empleado);
write ('Salario bruto: ');
readln (sal_bruto);
writeln;
calcula(sal_bruto);
writeln;
writeln ('El salario neto de ',nom_empleado,' es ',salario_neto:10:2);
writeln ('Sus deducciones fueron ',tod_ded:10:2);
writeln;
writeln ('Presione enter para continuar...');
readln;
i := i+1;
end;
End.

Respuesta No. 3.

Program sumas;
Uses wincrt;
Var i,n:integer;
Function Sumar (N : integer) : integer;
Var suma : integer;
Begin
Suma := 0;
For i:= 1 to N do
suma := suma + i;
Sumar := Suma;
Write ('La suma de los números del 1',' al ',n, ' es: ',suma);
Readln;
End;
Begin
Write ('Digite el número máximo: ');
Readln (N);
Sumar (N);
End.
Respuesta No. 6.

Program TestPrimos;
Uses Wincrt;
Var
N : integer;
Function Primo (Q : integer) : boolean;
Var
D : integer;
P : boolean;
Begin
If Q < 4 then
Primo := True
Else
Begin
P:= True;
D := 2;
While P and (D<=Q div 2) do
Begin
P := Q mod D <> 0;
D := D + 1
End;
Primo := P
End
End;
Begin
Writeln ('Introduzca un entero positivo o cero para terminar: ');
Readln (N);
While N > 0 do
Begin
If Primo (N) then
Writeln (N,' es primo')
Else
Writeln (N,' no es primo');
Writeln ('Introduzca otro entero');
Readln (N);
End;
Writeln
End.

También podría gustarte