Post on 30-Mar-2020
UNIVERSIDAD DEL PAPALOAPAN
Campus Tuxtepec – Loma Bonita
Cuadernillo
INTRODUCCIÓN A LA
PROGRAMACIÓN ESTRUCTURADA
M. C. Bertha López Azamar Profesor-Investigador
Tuxtepec, Oaxaca
7 Sentencias de control
M.C. Bertha López Azamar 74
7 Sentencias de control
Todo programa se ejecuta de manera secuencial, inicia en una línea de código y termina en
alguna otra línea. Se escriben las líneas de código unas a después de otras, y son evaluadas,
igualmente, una después de otra. Cada sentencia a ejecutar puede ser de uno de dos tipos: las
sentencias secuenciales y las sentencias de bifurcación.
En general la importancia de la programación estructurada, como paradigna de
programación, radica en las sentencias de control y la modularidad, ya que permite que el
programador estructurer mejor el código, evitando escribirlo por duplicado.
Por sentencia secuencial se entiende la realización de una acción concreta, generalmente implica
una línea de código. Por ejemplo: una operación aritmética, imprimir en pantalla un mensaje,
leer un valor de una variable, asignar un valor a una variable, declarar una variable.
Por sentencias de bifurcación se entienden aquellas que permiten cambiar el rumbo del flujo del
programa el ejecutarse el código, al aparecer una intersección, permitiendo tomar un camino
u otro según sea necesario. En este grupo se tiene a las sentencias:
o Condicionales
Alternativas
Repetitivas
o Incondicionales
o De invocación
Las sentencias de bifurcación condicionales, llamadas también sentencias de control, tienen
un cuerpo, es decir, implican un bloque de código (un conjunto de líneas de código que pueden ser
sentencias secuenciales u otras de bifurcación), el cual puede ejecutarse repetidamente siempre y
cuando se cumpla una condición.
Las sentencias de bifurcación puede escribirse junto con las sentencias secuenciales del
programa principal (el caso de las condicionales) o puede encontrarse en un módulo por separado (el
caso de los módulos, los cuales se llaman con la correspondiente sentencia de invocación), pero
igualmente, sus líneas de código se ejecutan secuencialmente, una tras otra, hasta que termina el
bloque, y luego se ejecuta la sentencia en orden secuencial dentro del flujo normal del programa
principal.
La característica principal de las sentencias de control, es que dependen de una condición, la
cual va a permitir ejecutar o no un bloque de código en particular. Estas se dividen en:
Sentencias alternativas permiten implementar la toma de decisiones dentro del programa,
esto para elegir entre una u otra acción a realizar. Las comunes se codifican de tal
forma que al evaluar la condición, si se cumple (resultado verdadero) se realiza una
acción y sino se cumple (resultado falso) se realiza otra acción.
Sentencias repetitivas permiten repetir la ejecución de un conjunto de sentencias, esto
siempre y cuando la condición se cumpla.
Las sentencias de invocación permiten ceder el control a un conjunto de sentencias
agrupadas bajo un nombre (modulo), y una vez ejecutadas éstas, el control se devuelve a la
sentencia que se sigue a la que la invocó.
7 Sentencias de control
M.C. Bertha López Azamar 75
Las sentencias de bifurcación incondicional (GOTO) pasan el control a una sentencia
marcada con la etiqueta indicada en la sentencia incondicional, saltándose así las sentencias que hay
entre ella y la sentencia a la cual se bifurca. Sin embargo el uso de esta sentencia en programación
estructurada esta prácticamente prohibido, y solo en casos muy especiales los programadores
experimentados se ven en la necesidad de incluirla de manera moderada, ya que un programador
principiante e inexpecto puede enredar y afectar gravemente el funcionamiento del programa, por
ello se les obliga a prescindir de ellas.
La forma general o sintaxis de esta sentencia es:
GOTO etiqueta
Por ejemplo supongamos una serie cualquiera de sentencias:
Sentencia1
Sentencia2
Sentencia3
GOTO A
B. Sentencia4
Sentencia5
A. Sentencia6
Sentencia7
En este ejemplo, después de ejecutarse la “sentencia3” nos encontramos con la
sentencia “GOTO A”, la cual nos permite bifurcar hasta la línea donde se encuentra la etiqueta
“A”, y ejecuta la sentencia6. Partiendo del supuesto que en algún lugar del programa, se
ejecuten alguna vez las sentencias incluidas desde sentencia4.
En los subtenas siguientes se mostrará el uso de las sentencias de control con pseudocodigo y
diagramas de flujo. Analice las observaciones generales en este tipo de sentencias, comprendiendo
el cuidado que debe tenerse en la forma en la que abren y cierran, para delimitar el código interno.
Es importante haber aprendido a escibir condiciones, ya que son las que
permiten ejecutar o no el bloque de código correspondiente a la sentencia de control.
7 Sentencias de control
M.C. Bertha López Azamar 76
7.1 Sentencias de repetición
Las sentencias repetitivas o cíclicas, también llamadas simplemente ciclos, permiten repetir
un bloque de código siempre y cuando se cumpla cierta condición (es decir, la evaluación de la
condición de resultado: Verdadero).
El lema general en ciclos podría decirse que es.
“Lo que se hace una vez, puede hacerse varias veces”.
Los tres ciclos principales en algoritmos se referencian por sus títulos en pseudocodigo:
DESDE … HASTA, HACER MIENTRAS y HACER.
Cuando se sabe el número exacto de veces que se requiere repetir la ejecución el bloque de código
se usa al ciclo: DESDE … HASTA.
Cuando no se sabe el número exacto de veces que se requiere ejecutar el bloque de código, se tiene a
los ciclos:
HACER MIENTRAS.- Este permite ejecutar el bloque de código cero o más veces (De
entrada puede que nunca se ejecute si la condición desde la primera vez que se evalua
da Falso).
HACER.- Este puede ejecutar el bloque de código una o más veces (De entrada se ejecuta
obligatoriamente una vez).
Todos los ciclos tienen tres partes fundamentales (no importando de cual se trate):
inicialización, condición, y progresión de la condición.
Inicialización.- Esta operación se realiza solo una vez, es la primera en ejecutarse, y consiste en
hacer que la variable o variables que participan en la condición que controla al ciclo tomen
un valor antes de pretender evaluarla. (En el DESDE…HASTA va en la cabecera, en los
otros dos ciclos se escribe antes y fuera del cuerpo del ciclo). La operación de inicialización
se puede hacer:
Leyendo el valor desde el teclado (LEER)
Asignando un valor por default.
Condición.- Se podrá ejecutar varias veces el cuerpo del ciclo siempre y cuando la condición se
cumpla (dé Verdadero) y se podrá salir de él solo cuando no se cumpla (dé falso). Cada vez
que se ejecute la ultima sentencia dentro del cuerpo del ciclo, se tendrá que evaluar
nuevamente la condición para determinar si se volverá a ejecutar (regresar nuevamente a la
primera sentencia dentro de su cuerpo) o si se va a salir de él. Por lo que, debe tenerse el
cuidado de formular la condición de tal forma que se haga verdadera solo con aquellos
valores que se requiera ejecutar el código interno, los cuales se determinan según el uso que
se le de al ciclo.
Progresión de la condición.- Una vez dentro del ciclo, se deben colocar las sentencias que permitan
hacer cambiar el valor almacenado en las variables que intervienen en la condición que
controla el ciclo, ya que si no se deja que se queden con el mismo valor se creará un ciclo
7 Sentencias de control
M.C. Bertha López Azamar 77
infinito. Así al incluir la progresión se permite que al volver a verificar la condición (al
terminar ejecutar las sentencias del ciclo), los valores sean diferentes y en algún momento se
pueda salir del ciclo (al hacerse falsa la condición). La progresión se corresponde con la
forma en que se haya codificado la inicialización, esto es:
Si en la inicialización se leyó el valor desde el teclado (LEER), entonces la
progresión es una operación de lectura del valor desde el teclado.
Si en la inicialización se asignó un valor por default, entonces la progresión se
corresponde con alguna operación aritmética que permita hacer cambiar el contenido
de la variable.
7.1.1 OBSERVACIONES GENERALES A LAS CONDICIONES DE UN CICLO:
Debe tenerse cuidado al formular las condiciones de un ciclo porque podemos cometer
cualquiera de los dos errores siguientes:
o Impedir la entrada al ciclo, es decir, no entrar al ciclo nunca (debido a que la
condición no acepta ningún valor).
o Volverlo infinito (debido a que la condición acepta todos los valores).
Por esta razó deben escribirse condiciones para los ciclos que delimiten rangos específicos de
valores, que permitan aceptar solo ciertos valores y que rechacen otros. Deben evitarse las
condiciones que acepten todos los valores, así como aquellas que rechacen todos los valores.
Ejemplo 1 Condición que NO ACEPTA NINGUN VALOR: m > 30 Y m < 25,
- 24 31
La condición no acepta ningún valor porque no hay intersección al usar el operador Y
La corrección se debe hacer analizando el uso del ciclo, por lo que debemos preguntarnos:
¿Cuál es el objetivo del ciclo?
Respondiendo esta pregunta por ejemplo, puede ser que lo que se quería era que se entrara al
ciclo con los valores del 26 al 29, por tanto lo que esta mal escrito en la condición son los
operadores relacionales y la condición debería ser: m < 30 Y m > 25 para lograr una intersección.
- 24 31
Pero si al responder la pregunta lo que se quería era entrar al ciclo con valores distintos al
rango del 25 al 30 (es decir de - a 24, de 31 a ), en este caso el error estaría en el operador lógico,
7 Sentencias de control
M.C. Bertha López Azamar 78
por lo que la condición debería ser: m > 30 O m < 25, para impedir que exista una intersecció.
- 24 31
Ejemplo 2 Condición que ACEPTA TODOS LOS VALORES: m < 30 O m >25,
- 24 31
En este caso igualmente, debe uno analizar el objetivo del ciclo, ya que este es uno de los
tipos de condiciones más incómodos, debido a que el ciclo se hace infinito, es decir nunca se puede
salir de él ya que la condición se hará verdadera siempre, no importa que valor se haya introducido.
7.1.2 ALGUNOS USOS COMUNES DE LOS CICLOS
Validar datos de entrada (uso común del ciclo HACER…MIENTRAS)
Uno de los usos de los ciclos es validar datos de entrada, es decir, obligar a que el usuario
introduzca valores acordes a los rangos requeridos por el significado de la variable. La
condición de este tipo de ciclos solo deberá admitir valores no válidos, para que así se entre
al ciclo solo cuando el usuario inserte un valor no acorde a la petición, y hasta que introduzca
un valor válido se podrá salir de él, el ciclo se convierte en una especie de pozo, del cual no
saldrá hasta que introduzca valores validos. Por ejemplo: cuando queremos leer una
calificación, si la escala de valores es de 0 a 10 los valores no validos van de - a -1 y de 11
a , por lo tanto la condición adecuada no es: calif >= 0 y calif <= 10, sino que es:
calif < 0 o calif > 10; ya que cualquier valor entre 0 y 10 es valido por lo que no deberá
entrar al ciclo, y asi solo con valores que erróneos deberá volverse a pedir el dato, leerlo y
validarlo (todo dentro del ciclo).
Simplemente repetir acciones un número no determinado de veces (uso común del ciclo
HACER)
Por ejemplo, si se desea que varios alumnos comprueben si su calificación es aprobatoria o
no, las acciones para un alumno serán las mismas que para los demás, pero el programa lo
podrá usar cualquier alumno, por lo que solo se preguntará si otro alumno quiere consultar, y
si responde que si, permanecerá en el ciclo y si responde que no, se saldrá del ciclo.
Utilizar contadores1. Realizar incrementos o decrementos constantes en ciertas variables
numéricas.
En ocaciones se requiere usar una variable para realizar conteos, para lo cual se inicializa una
1 Nombre que adquiere una variable solo al usarse dentro de un ciclo. Siempre debe inicializarse en cero, a
menos que en el enunciado se indique lo contrario. Se usa para ir contando las veces que se entra al ciclo, es decir
realizar incrementos o decrementos fijos cada vez que se entra al ciclo. La forma común para incrementos es: cont =
cont + Constante, para decrementos simplemente se resta: cont = cont – Constante; donde Constante es un valor
numérico constante.
7 Sentencias de control
M.C. Bertha López Azamar 79
variable con un valor por default y de ahí se va haciendo cambiar de valor de manera
constante, ya sea ralizando incrementos (sumar) o decrementos (restar). Generalmente se usa
un contador cuando:
Se sabe cuantas veces se va a entrar a un ciclo (uso común del ciclo DESDE … HASTA):
debido a que se indican las veces que se repetirán las acciones.
Por ejemplo leer las 5 calificaciones de 1 alumno en el parcial; se inicializará
el contador en 1 (cont = 1), se realizarán incrementos de 1 en 1 (cont = cont +
1) y se detendrá el ciclo hasta que tome un valor mayor a 5 (cont < 6).
debido a que se indican límites (inferior y superior) para así detenerlo en un valor
especifico.
Por ejemplo: si se quiere imprimir una lista de números pares comenzando del
2 (inicializacion: num=2) y terminando en el 100 (condición: num <=100), se
usa a la variable num como contador y se harán incrementos constantes de 2
en 2 (progresión: num = num + 2) para hacer cambiar el valor de la variable.
Por ejemplo imprimir una tabla de multiplicar de un número cualquiera del 1
al 10, se inicializará el contador en 1 (cont = 1), se realizarán incrementos de 1
en 1 (cont = cont + 1) y se detendrá el ciclo hasta que tome un valor mayor a
10 (cont < 11).
Se desea contabilizar la ocurrencia de ciertas acciones (puede usarse HACER
MIENTRAS, O HACER si no se sabe cuantas veces se entrará al ciclo).
Por ejemplo, si se quiere saber cuantos números positivos y cuantos números
negativos introdujo el usuario.
Utilizar acumuladores2. Para pedir varios datos con las mismas características e irlos sumando.
En ocasiones queremos realizar una petición de valores con el mismo significado, por lo
tanto, la forma de validar el dato es la misma, la variable será la misma, pero se tendrá una
variable extra que tendrá la función de acumular los valores leídos, la cual siempre deberá
ser inicializada en cero antes y fuera del ciclo inmediato donde se usa. En esté tipo de uso,
probablemente se requiera combinar con casos donde se sabe cuantas veces se entrará al
ciclo (uso del ciclo DESDE HASTA), o con casos donde no se sabe cuantas veces exactas
entrará (uso de los ciclos HACER ó HACER…MIENTRAS).
Por ejemplo: obtener el promedio de las tres calificaciones de una materia. En el ciclo se van
pidiendo (variable: calif) y acumulando las calificaciones (acum_calif = acum_calif + calif) y
fuera del ciclo se calcula el promedio (promedio=acum._calif / 3). Como se sabe que son tres
calificaciones esto implica el uso del ciclo DESDE…HASTA, para lo cual se usa un
contador que lo haga trabajar tres veces, se inicializa en 1 (cont = 1), se incrementa en 1
(cont = cont + 1) y saldrá del ciclo cuando ya se hayan leído las 3 calif (cont<=3).
Otro ejemplo: diseñar un algoritmo que calcule le valor medio de la estatura de los alumnos
2 Nombre que adquiere una variable solo al usarse dentro de un ciclo. Siempre debe inicializarse en cero, a
menos que en el enunciado se indique lo contrario. Donde la variable sirve como recipiente para valores no constantes,
en el cual se suma el nuevo valor al que ya contiene la variable. La forma común es: acum = acum + X; donde,
X es una variable numérica.
7 Sentencias de control
M.C. Bertha López Azamar 80
de determinado curso. Explicación:
- La lectura de las alturas es igual para todas las estatura (variable: estatura)
- Se usa un ciclo para leer las estaturas. Como no se indica cuantos alumnos serán
(implica usar el ciclo HACER, ya que al menos debe iniciar pidiendo una estatura),
como progresión del ciclo debe preguntarse si hay otro alumno (variable resp), y la
condición del ciclo deberá ser resp == „s‟, ya que se podra salir cuando no haya otro
alumno, es decir cuando responda „n‟
- Antes de poder calcular la estatura media, dentro del ciclo se debe ir acumulando la
estatura de cada alumno (acum_estatura = acum_estatura + estatura)
- Para saber de cuantos alumnos leyó la estatura, se debe tener un contador de alumnos
el cual se inicializa previamente fuera del ciclo en 0 (cont_alum = 0) y dentro del
ciclo se incluye la expresión aritmética que realiza el conteo de alumnos, es decir va
incrementando de 1 en 1 (cont_alum = cont_alum + 1), ya que cada vez que se entra
al ciclo, se lee la estatura de un alumno.
- Al salirse del ciclo, debe realizar el calculo de la estatura media (media =
acum_estatura / cont_alum)
A continuación se explicaran las estructuras sintácticas de los ciclos, primero en
pseudocódigo y luego los diagramas de flujo en conjunto para tener la comparativa.
7 Sentencias de control
M.C. Bertha López Azamar 81
7.1.3 Ciclo DESDE…HASTA
Se usa para representar repeticiones en las que se conoce el número exacto de veces que se
ejecutará el bloque de código. Los enunciados de problema generalmente indican el número de
veces con un valor constante (ejemplo leer tres calificaciones) o mediante rangos o límites,
indicando el valor del limite inferior y el valor del límite superior (por ejemplo, muestre los números
pares positivos desde el 500 hasta el 20)
Para controlar el ciclo se emplea una variable de tipo de dato entero que es llamada contador,
y que generalmente se incrementa en uno (dependiendo de problema a resolver).
Ejemplos:
o Leer tres calificaciones: el contador se inicializará en 1, y se irá incrementando de 1
en 1, teniendo como condición para el ciclo que el contador sea menor o igual a 3.
o Muestre los números pares positivos desde el 20 hasta el 500: el contador se
inicializará en 500 y se haran decrementos de 2 en 2, mientras que el contador sea
mayor o igual a 20.
La sintaxis para escribir la sentencia repetitiva es:
DESDE inicialización HASTA condición
//bloque de sentencias del ciclo
progresión de la condición
FIN DESDE HASTA
El funcionamiento de este ciclo es el siguiente:
1. Se inicializa la variable que controlará el ciclo, esto se considera solo la primera vez que se
entra al ciclo.
2. Se evalúa la condición.
a. Si el resultado es verdadero:
i. Se ejecuta el bloque de sentencias que conforman el cuerpo del ciclo. Incluida la
progresión del ciclo.
ii. Al llegar a la línea FIN DESDE HASTA, se debe regresar a la cabecera ciclo (línea
con la palabra DESDE), pero esta vez ya no se inicializa, sino que simplemente se va
a verificar la condición (Se repiten los pasos 2 y 3).
b. Si el resultado de evaluar la condición es falso, el cuerpo del ciclo no se ejecuta, sino que se
busca la línea de código con la palabraa FIN DE DESDE HASTA, para poder salirse del
ciclo y ejecutar la sentencia siguiente fuera del ciclo.
Ejemplo 3 Algoritmo para sumar 10 números, empleando el ciclo DESDE...HASTA
ALGORITMO Acumula10Numeros
VARIABLES num, suma, cont de tipo entero
7 Sentencias de control
M.C. Bertha López Azamar 82
INICIO
IMPRIMIR “Programa para sumar 10 números”
suma = 0 //inicialización del acumulador
DESDE cont = 1 HASTA cont <=10 //cabecera del ciclo
IMPRIMIR “Introduce un número entero:”
LEER num
suma= suma + num //acumulador
cont = cont + 1 //progresion del ciclo
FIN DESDE HASTA //línea final del ciclo
IMPRIMIR “El resultado de la suma es: “, suma
FIN
Ejemplo 4 Algoritmo para obtener el promedio de tres calificaciones.
ALGORITMO promedioDeTres
VARIABLES calif, acum_calif, promedio son flotantes
cont es entero
INICIO
IMPRIMIR “Programa para Calcular el promedio de tres calificaciones”
acum_calif = 0 //inicialización del acumulador
DESDE cont = 1 HASTA cont <=3
IMPRIMIR “Introduce la ”, cont, “ calificación: “
LEER calif
acum_calif = acum_calif + calif //acumulador
cont = cont + 1 //progresion del ciclo
FIN DESDE HASTA
promedio = acum._calif / 3
IMPRIMIR “El promedio de las tres calificaciones es: “, promedio
FIN
Ejemplo 5 Algoritmo para mostrar los números pares positivos desde el 500 hasta el 20.
ALGORITMO ParesDe500a20
VARIABLES num, cont con enteros
INICIO
IMPRIMIR “Programa para imprimir los números pares del 500 al 20”
DESDE cont = 500 HASTA cont > 20
IMPRIMIR cont, “,”
cont = cont - 2
FIN DESDE HASTA
7 Sentencias de control
M.C. Bertha López Azamar 83
IMPRIMIR cont
FIN
Ejemplo 6 Casos donde se indican las veces que se entra a cada ciclo
Ciclo Explicación del problema
DESDE a = 1 HASTA a <= 10
a = a + 1
FIN DESDE HASTA
Entra 10 veces (ya que va en incremento la progresión)
Al entra la variable toma el valor 1 y al salir del ciclo tiene el valor
11
DESDE a = 1 HASTA a < 10
a = a + 1
FIN DESDE HASTA
Entra 9 veces (ya que va en incremento la progresión)
Entra con el valor 1 y sale con el valor 10
DESDE a = 10 HASTA a >= 1
a = a - 1
FIN DESDE HASTA
Entra 10 veces (ya que va en decremento la progresión)
Entra con el valor 10 y sale con el valor 0
DESDE a = 10 HASTA a > 1
a = a - 1
FIN DESDE HASTA
Entra 9 veces (ya que va en decremento la progresión)
Entra con el valor 10 y sale con el valor 1
DESDE a = 10 HASTA a == 10
a = a - 1
FIN DESDE HASTA
Entra 1 sola vez, la progresión sirve para hacer que el valor de la
variable cambie, (pudiendo ser incremento o decremento), ya que si
no se incluye el ciclo se haría infinito.
Entra con el valor 10 y sale con el valor 9
DESDE a = 10 HASTA a <> 20
a = a + 1
FIN DESDE HASTA
Entra 11 veces, después de incrementarlo el valor por onceava vez la
variable toma el valor de 20, y se sale.
Entra con el valor 10 y sale con el valor 20
DESDE a = 15 HASTA a <= 23
a = a + 1
FIN DESDE HASTA
Entra 9 veces Entra con el valor 15 y sale con el valor 24 (ya que va
en incremento la progresión)
DESDE a = 15 HASTA a < 23
a = a + 1
FIN DESDE HASTA
Entra 8 veces. Entra con el valor 15 y sale con el valor 23
En los siguientes ejemplos se indican problemas en la definición de las partes importantes de
un ciclo.
Ejemplo 7 Casos de Ciclos infinitos
Ciclo Explicación del problema
DESDE a = 11 HASTA a >= 10
a = a + 1
FIN DESDE HASTA
La progresión va en incrementos, por lo que como valor de la
inicialización es mayor que la constante en la condición, nunca se
llegará a este valor, esto obvio debido a que no se están haciendo
decrementos para que puede llegar a tomar el valor 10. La variable va
tomando valores de: 11, 12, 13, 14, 15, … y la condición nunca se
hará valida
7 Sentencias de control
M.C. Bertha López Azamar 84
DESDE a = 5 HASTA a <= 6
a = a - 1
FIN DESDE HASTA
El valor de la inicialización es menor que el de la condición y la
progresión es en decremento, por lo tanto la variable va tomando
valores de: 5, 4, 3, 2, 1, 0, -1, … - y nunca se hará valida la
condición
DESDE a = 1 HASTA a <= 6
a = a - 1
FIN DESDE HASTA
Debido a error en la progresión, que debería ir en incremento, ya que
es una cabecera apropiada para incrementar. Por lo tanto los valores
que va a tomar son: 1, 0, -1, -2, …- y la condición nunca se cumple-
DESDE a = 5 HASTA a >= 1
a = a + 1
FIN DESDE HASTA
Debido a error en la progresión, que debería ir en decremento, ya que
es una cabecera apropiada para decrementar. Por lo tanto los valores
que va a tomar son: 5, 6, 7, 8, 9, …- y nunca sale.
DESDE a = 10 HASTA a <> 20
a = a - 1
FIN DESDE HASTA
Debido a error en la progresión ya que al ir decrementandose el valor,
la variable nunca tomará el valor de 20, y entonces la condición nunca
se hace falsa.
Ejemplo 8 Casos donde nunca entra al ciclo
Cabecera del ciclo Explicación del problema
DESDE a = 11 HASTA a <= 10 Inicialización incorrecta, ya que el valor de la inicialización es
mayor que el de la condición, y esta no se cumple desde la primera
vez. DESDE a = 5 HASTA a <= 1
DESDE a = 5 HASTA a >= 6 Mala inicialización, ya que el valor inicial es menor que el indicado
en la condición, y esta no se cumple desde la primera vez.. DESDE a = 1 HASTA a >= 5
DESDE a = 5 HASTA a == 10 La condición no es apropiada ya que no tiene caso ejecutar un ciclo
en el que solo se pretenda entrar con un valor. En los ciclos las
condiciones con el operador de igualdad no son adecuadas. DESDE a = 10 HASTA a == 20
7 Sentencias de control
M.C. Bertha López Azamar 85
7.1.4 Ciclo HACER MIENTRAS
Se usa cuando se requiere ejecutar un bloque de código solo si la condición se cumple la
primera vez, ya que lo primero que se verifica es la condición, y si no se cumple se impide entrar al
ciclo (se entra cero o más veces). Es muy adecuado cuando se quieren validar datos de entrada, ya
que en esos casos solo se entrará al ciclo en el momento en que los datos no sean válidos.
Generalmente como progresión del ciclo, se emplea una pregunta y la correspondiente
lectura de la variable, para poder hacer cambiar su valor, y así salirse o volver a entrar al ciclo.
Todo lo que se haga con DESDE…HASTA puede hacerse con HACER MIENTRAS, se
ocupará el contador para controlar el ciclo, adecuando la inicialización de la variable junto con la
condición y la progresión, para hacerlo funcionar un número determinado de veces (el contador debe
inicializarse antes y fuera del ciclo).
La sintaxis para escribir la sentencia es:
Iniciación de la variable de la condición
HACER MIENTRAS (condición)
//bloque de sentencias del ciclo
progresión de la condición
FIN DE HACER MIENTRAS
Su funcionamiento es el siguiente:
1. Se inicializa la variable que controlará al ciclo, fuera del el.
2. Al encontrar la primera línea que indica el ciclo (HACER MIENTRAS), se evalúa la
condición:
a. Si da verdadero:
i. se ejecuta el bloque de sentencias dentro del bloque del ciclo, incluida la
progresión de la condición.
ii. Al encontrar el fin del ciclo (FIN DE HACER MIENTRAS), se debe regresar a la
cabecera del ciclo (línea del HACER MIENTRAS). Es decir, se repiten el pasos 2..
b. Si da falso, se busca la línea de termino del ciclo (FIN DE HACER MIENTRAS) y se
sale del ciclo (Si desde la primera vez da falso, entonces nunca se ejecuto ninguna línea
del cuerpo del ciclo).
Veamos el mismo ejemplo realizado con DESDE…HASTA, en estos casos el control del
ciclo recae sobre el contador.
Ejemplo 9 Algoritmo para sumar 10 números, empleando el ciclo HACER MIENTRAS
ALGORITMO Prueba2
VARIABLES num, suma, cont de tipo entero
7 Sentencias de control
M.C. Bertha López Azamar 86
INICIO
suma = 0 //inicialización del acumulador
cont = 1 //inicialización del contador para controlar el ciclo
HACER MIENTRAS (cont <=10)
IMPRIMIR “Programa para sumar 10 números enteros”
IMPRIMIR “Introduce un número entero: ”
LEER num
suma= suma + num //acumular
cont = cont + 1 //progresión
FIN HACER MIENTRAS
IMPRIMIR “El resultado de la suma es: “, suma
IMPRIMIR “Números que se leyeron: “, cont - 1
FIN
Deben coordinarse correctamente la inicialización y la condición, para hacer que se entre al
ciclo el número exacto de veces que se desea. Así si observemos que se entrará al ciclo 10 veces, y
el valor que provocará que no se entre más al ciclo es el 11 (con 1 entra, con 2 entra, con 3 entra,
con 4 entra, con 5 entra, con 6 entra, con 7 entra, con 8 entra, con 9 entra, con 10 entra, con 11 no
entra y sale con ese valor), por eso si queremos mostrar cuantas veces se entro al ciclo deberá
restársele un 1 al valor del contador
Veamos que pasa si inicializamos la variable en 0, y la condición se deja igual, y notaremos
que entrará 11 veces:
cont = 0 //inicialización del contador para controlar el ciclo
HACER MIENTRAS (cont <=10)
cont = cont + 1 //progresión
FIN HACER MIENTRAS
Observemos que se entrará al ciclo 11 veces, y el valor que provocará que no se entre más al
ciclo es el 11 (con 0 entra, con 1 entra, con 2 entra, con 3 entra, con 4 entra, con 5 entra, con 6 entra,
con 7 entra, con 8 entra, con 9 entra, con 10 entra, con 11 no entra y sale con ese valor), por lo
tanto, si necesitamos saber cuantas veces se entro a el, sería conveniente que se saliera cuando tome
el valor de 10, por lo que la variable se puede inicializar en 0, y la condición se deberá modifica para
poder ejecutar el ciclo 10 veces exactas (esto es hasta el valor 9 y salir con el valor 10):
cont = 0 //inicialización del contador para controlar el ciclo
HACER MIENTRAS (cont <10)
cont = cont + 1 //progresión
FIN HACER MIENTRAS
IMPRIMIR “Números que se leyeron: “, cont
Observemos que se entrará al ciclo 10 veces, y el valor que provocará que no se entre más al
ciclo es el 10 (con 0 entra, con 1 entra, con 2 entra, con 3 entra, con 4 entra, con 5 entra, con 6 entra,
con 7 entra, con 8 entra, con 9 entra, con 10 no entra y sale con ese valor), y así al salir del ciclo, el
contador guarda el valor exacto de cuantas veces entro.
El siguiente es un ejemplo de validación de datos de entrada, observe que nunca entrara al
7 Sentencias de control
M.C. Bertha López Azamar 87
ciclo si introduce valores validos (1 al 12), por lo que la condición del ciclo esta formulada para
aceptar valores del - al 0 y del 13 al , esto es los valores no válidos, ya que el cuerpo del ciclo
volverá a pedir el dato si se introdujo incorrectamente.
Ejemplo 10 Algoritmo que permita capturar un entero que indique el mes.
ALGORITMO MesesEnLetra
VARIABLES mes es entero
INICIO
IMPRIMIR “Introduzca el número del mes para saber como se escribe:”
LEER mes
HACER MIENTRAS (mes <0 O mes >12)
IMPRIMIR “Valor invalido, solo debe ser entre 1 y 12”
IMPRIMIR “Introduzca nuevamente el mes:”
LEER mes
FIN HACER MIENTRAS
FIN
En el siguiente ejemplo de validación de datos de entrada observe que la condición del ciclo
esta formulada para aceptar valores distintos del rango de 0 al 10, esto es los valores inválidos (de -
a -1 y de 11 a ), ya que el cuerpo del ciclo volverá a pedir el dato si se introdujo
incorrectamente.
Ejemplo 11 Algoritmo para leer una calificación y validarla en el rango de 0 a 10.
ALGORITMO leerCali
VARIABLES calif son flotantes
INICIO
IMPRIMIR “Programa para leer una calificación y validarla en la escala del 0 al 10”
IMPRIMIR “Introduce la calificación: “
LEER calif //Inicialización
HACER MIENTRAS (calif < 0 O calif >10)
IMPRIMIR “Calificación incorrecta, vualva a “
IMPRIMIR “introducir la calificación: “
LEER calif /progresion
FIN HACER MIENTRAS
IMPRIMIR “Saludos”
FIN
En el siguiente ejemplo se emplea una pregunta para ejercer como progresión del valor de la
variable que controla el ciclo, en este caso, es necesario inicializar la variable con un valor por
defaul (que haga que se cumpla la condición), antes de entrar al ciclo. Es importante hacer notar que
para este ejemplo es mas adecuado el uso del ciclo HACER.
7 Sentencias de control
M.C. Bertha López Azamar 88
Ejemplo 12 Algoritmo para obtener el promedio de calificaciones de los alumnos de un grupo.
ALGORITMO promedioDeTres
VARIABLES calif, acum_calif, promedio son flotantes
cont es entero
resp es caracter
INICIO
IMPRIMIR “Programa para calcular el promedio de calificaciones de “
IMPRIMIR “varios alumnos de un grupo.”
acum_calif = 0 //inicialización del acumulador de calificaciones
cont = 0 //inicialización del contador de alumnos
resp == „s‟ //inicialización con un valor por defaul
HACER MIENTRAS (resp==’s’)
IMPRIMIR “Introduce la”, cont, “ calificación: “
LEER calif
HACER MIENTRAS (calif < 0 O calif >10)
IMPRIMIR “Calificación incorrecta, vualva a “
IMPRIMIR “introducir la”, cont, “ calificación: “
LEER calif
FIN HACER MIENTRAS
acum_calif = acum_calif + calif //acumulador
cont = cont + 1 //contador de alumnos
IMPRIMIR “¿otro alumno?”
LEER resp
FIN HACER MIENTRAS
promedio = acum._calif / 3
IMPRIMIR “El promedio de las tres calificaciones es: “, promedio
FIN
Si se observa en el ejemplo anterior se integra el ciclo de validación de una calificación. Si
deseamos separar tareas entonces deberá crearse un módulo dedicado exclusivamene a para pedir
una calificación, y así evitamos tener ciclos anidados y errores en cascada por no cerrar
correctamente una sentencia de control.
Ejemplo 13 Algoritmo para obtener el promedio de calificaciones de los alumnos de un grupo, empleando una
función.
ALGORITMO promedioDeTres
VARIABLES acum_calif, promedio son flotantes
cont es entero
resp es caracter
INICIO
7 Sentencias de control
M.C. Bertha López Azamar 89
IMPRIMIR “Programa para calcular el promedio de calificaciones de “
IMPRIMIR “varios alumnos de un grupo.”
acum_calif = 0 //inicialización del acumulador de calificaciones
cont = 0 //inicialización del contador de alumnos
//inicialización de variable que controla el ciclo con un valor por defaul
resp == „s‟
HACER MIENTRAS (resp==‟s‟ )
acum_calif = acum_calif + INVOCA LeerCalif(cont) //acumulador
cont = cont + 1 //contador de alumnos
IMPRIMIR “¿otro alumno?”
LEER resp //progresion
FIN HACER MIENTRAS
promedio = acum._calif / 3
IMPRIMIR “El promedio de las tres calificaciones es: “, promedio
FIN
LeerCalif(c es entero)
VARIABLE Calif es flotante
INICIO
IMPRIMIR “Introduce la”, c, “ calificación: “
LEER calif
HACER MIENTRAS (calif < 0 O calif >10)
IMPRIMIR “Calificación incorrecta, vualva a “
IMPRIMIR “introducir la”, c, “ calificación: “
LEER calif
FIN HACER MIENTRAS
DEVOLVER calif
FIN
7 Sentencias de control
M.C. Bertha López Azamar 90
7.1.5 Ciclo HACER
Se emplea cuando no se sabe la cantidad exacta de veces que se ejecutarán las sentencias
contenidas en el ciclo, pero se desea hacer que se entre al menos una vez. Usado por ejemplo
para:
Mostrar las calificaciones de varios alumnos que ingresen al salón,
Mostrar un mensaje hasta que el usuario elija que no lo quiere ver más,
Calcular le valor medio de la estatura de los alumnos de determinado curso,
Calcular el importe de la venta de varios artículos.
Controlar la ejecución de un menú
Su uso, a diferencia que el de los otros dos ciclos, es más generalizado para contener el
código completo de un programa o tarea específica que se requiera repetir, ya que la ventaja que
presenta su estructura permite que se ejecute al menos una vez el funcionamiento y luego
dependiendo de la elección del usuario, puede salirse del programa.
Todo lo que se haga con DESDE…HASTA puede hacerse con HACER, adecuando la
inicialización del contador con la condición y la progresión, para hacerlo funcionar un número
determinado de veces (el contador debe inicializarse antes y fuera del ciclo). Sin embargo, el trabajo
normal de este ciclo no es para un número conocido de veces, sino para cuando no se sabe cuantas
veces será necesario ejecutar el bloque de código, por lo que comúnmente como progresión se
emplea la lectura del valor de la variable encargada de controlar el ciclo, con su correspondiente
pregunta, para poder así cambiar su valor, cada vez que entra al ciclo.
La sintaxis para escribir la sentencia es:
inicialización
HACER
<sentencias de la repetitiva>
progresión de la condición
MIENTRAS (condición)
Funciona como se explica a continuación:
1. El ciclo comienza con la palabra HACER, es decir se entra al ciclo, y se ejecutan las
sentencias del cuerpo del ciclo., incluida la progresión, la cual se encuentra generalmente
antes de terminar el ciclo (es común el uso de una pregunta y la lectura de un valor).
2. Al encontrar la palabra MIENTRAS, esta indica la última línea del ciclo en la cual se
encuentra la condición, por lo que se evalúa.
a. Si de verdadero, se ejecuta nuevamente el bloque de sentencias del ciclo, es decir, se
regresa al paso 1.
b. Si da falso, se sale del ciclo y se continúa en la sentencia que se encuentre después de
la palabra MIENTRAS.
7 Sentencias de control
M.C. Bertha López Azamar 91
Ejemplo 14 Algoritmo para sumar 10 números, empleando el ciclo HACER
ALGORITMO Prueba2
VARIABLES num, suma, cont de tipo entero
INICIO
IMPRIMIR “Programa para sumar 10 números enteros”
suma = 0 //acumulador
cont = 1 //inicialización de la variable que controla el ciclo,
HACER
IMPRIMIR “Introduce un número entero: ”
LEER num
suma= suma + num //incremento del acumulador
cont = cont + 1 //progresión
MIENTRAS (cont <= 10)
IMPRIMIR “El resultado de la suma es: “, suma
MPRIMIR “Números que se leyeron: “, cont
FIN
Lo que se indica en el ejemplo anterior no es el uso normal del ciclo, aunque como se ve,
puede obligarse a trabajar de esa manera; ya que se incluye un contador que es inicializado fuera del
ciclo para que al trabajar la progresión antes de checar la condición, esta tome un valor que permita
salir cuando se cumpla la lectura de los 10 números. Debe tenerse en cuenta que la condición se
verifica a lo último del ciclo, y que al menos una vez ya se entro al mismo. Así vemos que si se
inicializa en 1: entra una vez, toma el valor de 2 y entra nuevamente, con 3 entra, con 4 entra, con 5
entra, con 6 entra, con 7 entra, con 8 entra, con 9 entra, con 10, entra, con 11 se sale del ciclo, por lo
que vemos que entra efectivamente 10 veces.
En el ejemplo siguiente se observa el trabajo común de este ciclo, cuando no se sabe cuantas
veces se ejecutarán las acciones que contiene, en este ejemplo no se sabe cuantos alumnos tiene el
grupo por lo que es necesario tener un contador, para saber de cuantos alumnos se capturó la
calificación, y luego poderlo usar para calcular el promedio, sin embargo ese contador no es quien
controla el ciclo, como se observa, la progresión se realiza preguntando simplemente si hay o no
otro alumno a capturar. Se incluye primero el algoritmo sin módulo y luego con módulo, para tener
la comparativa de ambos códigos.
Observese los ciclos anidados cuando no se usa módulo.
Ejemplo 15 Algoritmo para obtener el promedio de calificaciones de los alumnos de un grupo.
ALGORITMO PromedioDelGrupo
VARIABLES calif, acum_calif, promedio son flotantes
cont es entero
resp es caracter
INICIO
IMPRIMIR “Programa para calcular el promedio de calificaciones de “
IMPRIMIR “varios alumnos de un grupo.”
7 Sentencias de control
M.C. Bertha López Azamar 92
acum_calif = 0 //acumulador
cont = 0 //contador de alumnos
HACER
IMPRIMIR “Introduce la”, c, “ calificación: “
LEER calif
HACER MIENTRAS (calif < 0 O calif >10)
IMPRIMIR “Calificación incorrecta, vualva a “
IMPRIMIR “introducir la”, c, “ calificación: “
LEER calif
FIN HACER MIENTRAS
acum_calif = acum_calif + calif //acumulador
cont = cont + 1 //contador de alumnos
IMPRIMIR “¿otro alumno?”
LEER resp //progresión
MIENTRAS (resp==’s’)
IMPRIMIR “Los alumnos capturados fueron: “, cont
promedio = acum._calif / cont
IMPRIMIR “El promedio de calificaciones es: “, promedio
FIN
A continuación observe como el uso del módulo simplifica el algoritmo, y permite separar
funcionalidades.
Ejemplo 16 Algoritmo para obtener el promedio de calificaciones de los alumnos de un grupo.
ALGORITMO PromedioDelGrupo
VARIABLES acum_calif, promedio son flotantes
cont es entero
resp es caracter
INICIO
IMPRIMIR “Programa para calcular el promedio de calificaciones de “
IMPRIMIR “varios alumnos de un grupo.”
acum_calif = 0 //acumulador
cont = 0 //contador de alumnos
HACER
acum_calif = acum_calif + INVOCA LeerCalif(cont) //acumulador
cont = cont + 1 //contador de alumnos
IMPRIMIR “¿otro alumno?”
LEER resp //progresión
MIENTRAS (resp==’s’)
IMPRIMIR “Los alumnos capturados fueron: “, cont
7 Sentencias de control
M.C. Bertha López Azamar 93
promedio = acum._calif / cont
IMPRIMIR “El promedio de calificaciones es: “, promedio
FIN
LeerCalif(c es entero)
VARIABLE Calif es flotante
INICIO
IMPRIMIR “Introduce la”, c, “ calificación: “
LEER calif
HACER MIENTRAS (calif < 0 O calif >10)
IMPRIMIR “Calificación incorrecta, vualva a “
IMPRIMIR “introducir la”, c, “ calificación: “
LEER calif
FIN HACER MIENTRAS
DEVOLVER calif
FIN
En este caso, como la variable contador (cont) se empleará para saber cuantos alumnos en
total se capturaron, es necesario inicializarlo en cero, y así al salirse del ciclo, se tiene el valor
exacto (si se inicializará en 1 se tendría un valor de más y seria necesario restar un 1 al valor del
contador de alumnos). Igualmente se incluye la función que ya se había realizado anteriormente para
leer una calificación, observe que no hay cambio en la llamada a la función ni en la definición de la
función, lo único que varia en el ejemplo es el tipo de ciclo empleado, donde el ciclo HACER es el
más adecuado para dar solución a este enunciado de problema.
Ejemplo 17 Algoritmo que calcule estatura promedio de los alumnos de un curso.
ALGORITMO ValorMedioAlturas
VARIABLES estatura, media son flotantes
cont_alum es entero
resp es caracter
INICIO
IMPRIMIR “Programa para calcular el promedio de estaturas de “
IMPRIMIR “varios alumnos de un grupo.”
media = 0 //acumulador
cont_alum = 0 //contador de alumnos
HACER
estatura = INVOCA LeerEstatura()
media = media + estatura //acumulador de calificaciones
cont_alum = cont_alum + 1 //contador de alumnos
7 Sentencias de control
M.C. Bertha López Azamar 94
IMPRIMIR “¿otro alumno?”
LEER resp //progresión
MIENTRAS (resp==’s’)
media = media / media
IMPRIMIR “La media de altura de “, cont_alum
IMPRIMIR “alumnos es: “, media
FIN
LeerCalif()
VARIABLE est es flotante
INICIO
IMPRIMIR “¿Cuánto es tu estarura en metros?
LEER est
HACER MIENTRAS (est < 0 O est >2.5)
IMPRIMIR “Estatura incorrecta, vualva a introducir “
IMPRIMIR “su estatura (entre 0 a 2.5 metros): “
LEER est
FIN HACER MIENTRAS
DEVOLVER est
FIN
Vemos que si la variable acumuladora no se empleará para algún otro cálculo, esa misma
variable podemos emplear para hacer el cálculo de la media.
El mismo ejemplo pero con ciclos anidados es el siguiente, notese la importancia que toma la
modularidad al separar las tareas y los posibles problemas en cascada que ocaciona la anidación de
sentencias de control.
Ejemplo 18 Diseñar un algoritmo que calcule le valor medio de la altura de los alumnos de un curso, validando la
altura
ALGORITMO ValorMedioAlturas
VARIABLES estatura, media son flotantes
cont_alum es entero
resp es caracter
INICIO
media = 0 //acumulador
cont_alum = 0 //contador de alumnos
HACER
IMPRIMIR “Introduce la altura del alumno No. ”, cont_alum
LEER estatura
HACER MIENTRAS (estatura < 1 O estatura > 2)
IMPRIMIR “altura fuera de un rango valido”
7 Sentencias de control
M.C. Bertha López Azamar 95
IMPRIMIR “introdúzcala nuevamente:”
LEER estatura
FIN DE HACER MIENTRAS
media = media + estatura //acumulador de calificaciones
cont_alum = cont_alum + 1 //contador de alumnos
IMPRIMIR “¿otro alumno?”
LEER resp //progresión
MIENTRAS (resp==’s’)
media = media / cont_alum
IMPRIMIR “La media de altura de “,cont_alum
IMPRIMIR “alumnos es: “,media
FIN
Actividad 1 Realice algoritmos para los enunciados siguientes, no olvide realizar el análisis respectivo.
1. Algoritmo para capturar 20 números enteros Al final debe mostrar la suma de los
valores que se capturaron.
2. Algoritmo para capturar tantos números enteros como el usuario desee. Al final debe
mostrar la suma de los valores que se capturaron.
3. Algoritmo para mostrar la tabla de multiplicar de un número positivo cualquiera.
4. Algoritmo para mostrar la tabla de multiplicar de un número positivo cualquiera,
desde el número de inicio que se desee, hasta el número final que se desee.
5. Algoritmo que permita capturar un número y luego imprima en pantalla, las veces
que el mismo número indica.
6. Algoritmo que permita capturar un número y luego lo imprima en pantalla 50 veces.