Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La utilización de los ciclos en la programación son de gran utilidad, ya que van a permitir procesar
grandes cantidades de datos utilizando un solo grupo de acciones que se van repetir varias veces,
dependiendo estas de una condición de control.
Mentalmente la acción de ciclo no está implementado, pero, si se puede obtener los elementos
necesarios para implementar un ciclo, lo que debemos conocer es que elementos se deben buscar
en el ejemplo. Para poder identificar elementos, debemos conocer los tipos diferentes de ciclos y
sus elementos.
Tipos de Ciclos
Ciclo Mientras
Ciclo Para
Ciclo hacer Mientras
Ciclo Mientras: Ejecuta un conjunto de instrucciones en forma repetitiva, mientras una condición
sea verdadera.
Formato
Seudocódigo
Acciones a repetir
Fin mientras
Donde condición es una expresión lógica, por lo que implica una pregunta y su resultado por
tanto es verdadero o falso.
Características
- Las acciones a repetir se van a ejecutar mientras la condición sea verdadera.
- Cuando se plantea un ciclo mientras, lo primero que se ejecuta es la evaluación de la
condición. Esto indica que si la condición es falsa la primera vez, las acciones a repetir no se
ejecutarían ni una sola vez, ya que saltaría el control a las instrucciones después del fin
mientras.
- Dentro de las instrucciones debe haber una acción o acciones que permitan que la condición
que controla el ciclo se vuelva falsa, de lo contrario el ciclo se vuelve infinito porque siempre
sería verdadero.
- Siempre que se alcance el Fin Mientras el control de ejecución, regresa a evaluar la condición,
si es verdadera continua dentro del ciclo, pero si es falso el control de ejecución salta a la
instrucción siguiente al fin mientras.
- En el diagrama del PseInt no se encuentra fin mientras, este se presenta cuando la condición
es falsa, entonces el flujo continúa como lo especifica el diagrama.
Ejercicio ciclo 1
Se tienen 4 valores numéricos determinar la cantidad números pares. Realizarlo con ciclo.
Retomamos el ejercicio anterior y sobre este se analiza la condición que va a controlar el ciclo.
Para poder realizar este ejercicio, se necesita que los datos entren uno a la vez, por lo que se
utiliza una sola variable.
El siguiente algoritmo muestra esta característica. En donde se puede apreciar que un bloque de
acciones se repite 4 veces
Inicio
CP 0
Leer NUM // primer dato
Si ( NUM mod 2 = 0)
Entonces
CP CP +1
Fin si
Este es el algoritmo sin ciclo, con ciclo se tendría algo parecido a lo siguiente:
Inicio
CP 0
Repetir 4 veces
Leer NUM
Si ( NUM mod 2 = 0)
Entonces
CP CP +1
Fin si
Pero Repetir 4 veces no es una acción valida dentro de la computación, para eso se necesita
aplicar una instrucción ciclo, como mientras.
- Para esto se tiene en cuenta, que cada vez que la definición del problema plantea que se
tienen cierta cantidad de datos, normalmente se utiliza un contador que controla la cantidad
de esos datos, y este contador se lo utiliza para controlar el ciclo.
Para el ejemplo se están planteando 4 datos numéricos por lo que la mente espera recibir
únicamente 4 datos y trabajarlos como se planteó, uno a la vez
Modelo mental
Datos de entrada
4 6 9 8
Estos datos entran uno a uno hasta completar y la mente controla está entrada, es decir, no va a
permitir que entre un quinto dato.
El siguiente modelo muestra un comportamiento de los cuatro tiempos y las acciones mentales
que se hacen en cada uno.
1 2 3 4
4 6 9 8
CP
Cantidad de pares = 3 // Salida
CD está soportado en la memoria, por que la definición indica cuatro datos que van a llegar, y cada
vez que llega uno a la mente, esta lo cuenta. Si no ha llegado ninguno la mente no lo cuenta y la
cuenta ira en 0. Según lo anterior, entonces CD toma los valores de 0 1 2 3 4, el 5 no porque solo
indica 4 valores
CD CD +1
CP CP + 1
Se debe considerar aquí, que al ser contadores deben tener un inicio, en este caso son en 0 (cero )
Entonces
CD 0
CP 0
Y deben ir antes de empezar a leer los datos.
CP
Cantidad de pares = 3 // Salida
El ejercicio se lo va a desarrollar con un ciclo mientras, por lo que se debe buscar en el modelo
mental los siguientes elementos
Condición de control de ciclo
Bloque de instrucciones a repetir
Acciones para que el ciclo no se vuelva infinito que deben estar dentro de las acciones a
repetir
Condición de control está fundamentada en la definición de problema que solo son 4 datos y la
variable que lleva este valor es CD por tanto la condición será:
¿CD<4?
CD CD + 1
Leer NUM
Si ( NUM mod 2 = 0)
Entonces
CP CP +1
Fin si
Cuando se trabaja con un ciclo se complementa indicando las condiciones iniciales antes del ciclo y
las acciones después del ciclo, que están especificadas en el modelo mental. Entonces el algoritmo
queda
Inicio
CD<- 0 // valor inicial del CD
CP<- 0 // valor inicial de CP
Mientras ( CD < 4 ) hacer
CD<- CD + 1
Leer NUM
Si ( NUM mod 2 = 0)
Entonces
CP <- CP +1
Fin si
Fin mientras
Escribir “Cantidad de pares = “,CP
Fin
Diagrama en dfd
Diagrama de flujo en PsInt
En las tres representaciones se puede apreciar que el seudocódigo y el diagrama en dfd se
especifica la palabra mientras para indicar la presencia de un ciclo, pero en PsInt el ciclo se
especifica únicamente con la condición, en donde la condición por verdadero determina el ciclo y
el flujo determina las acciones a repetir y el sitio donde tiene que regresar para la repetición
(siempre es antes de la condición ), el falso es el fin del ciclo, que es donde se coloca las acciones a
seguir después del ciclo.
El ejercicio anterior especifica claramente, como un ciclo puede ser controlado por un contador,
esto se presenta mucho dentro de la programación y sobre todo cuando se conoce un número
especifico de casos, como en el ejemplo, que planteaba para 4 datos.
Cuando se tiene un ciclo controlado por un contador se debe tener presente lo siguiente:
- El inicio del contador, esto depende de la descripción del problema y el análisis que se le haga
al mismo. Generalmente este contador inicia en 0 o en 1, depende del análisis que se haga.
- La variación. En el contador la variación es constante, generalmente es de 1 en 1, el cual va
aumentando hasta alcanzar el valor tope, pero, hay problemas que exige otras variaciones, en
donde pueden ser hasta negativas.
- El valor tope o valor frontera. Indica hasta donde va a llegar el contador. Esta frontera según
la definición del problema puede ser constante o variable, lo más general es que sea variable.
El ejercicio planteado es solo para un valor constante de 4, si fuera variable sería para
cualquier cantidad de datos.
Ejercicio ciclo 2
Se tiene una cantidad dada de datos numéricos, determinar la cantidad de números pares que se
presentan.
Este ejercicio tiene las mismas características del que se acaba de resolver. La variación está en
que los datos ya no van a ser 4, sino, una cantidad dinámica de datos, depende de una variable, la
cual indica el valor, al cual debe llegar el contador.
Para el modelo mental lo primero que va a hacer es solicitar la cantidad de datos que se van a
procesar y este va a ser el limite.
Ejemplo
Cantidad de datos 6
Según esto en el modelo mental hay un nuevo dato 6, el cual indica la cantidad de datos a entrar y
debe ser variable, el modelo anterior se complementa con:
CNE // entrada
Cantidad de datos 6
Leer CNE
CD Y CP funcionan igual
CD<CNE?
Inicio
Leer CNE // Entrada de la cantidad de números
CD 0 // valor inicial del CD
CP 0 // valor inicial de CP
Mientras ( CD < CNE ) hacer
CD CD + 1
Leer NUM
Si ( NUM mod 2 = 0)
Entonces
CP CP +1
Fin si
Fin mientras
Escribir “Cantidad de pares = “,CP
Fin
Este algoritmo funciona para cualquier cantidad de datos, es decir queda genérico. Lo que esta en
color azul hace que la cantidad de datos sea variable y como cambia la condición del ciclo
mientras.
Ejercicio para reforzar los conceptos de contador, acumulador y ciclo mientras controlado por un
contador.
Ejercicio ciclo 3
Se tiene una cantidad dada de datos numéricos, hallar el promedio de los números que sean
múltiplos de 5.
Modelo mental
Cantidad de datos 6
Datos 3 10 12 20 5 15
El objetivo del ejercicio es llegar a 12,5 y para esto, se debe buscar el 50 que es un sumador o
acumulador y el 4 que es un contador.
Regla Trabajar un dato a la vez y determinar que es lo que hace la mente con ese dato de
acuerdo a la solución
Numero de datos 6
DATO 1 2 3 4 5 6
3 10 12 20 5 15
10 30 50
35
1 2 4
3
Promedio múltiplo de 5 = 50/4 = 12,25
Resultado
Promedio múltiplos de 5 = 12,25
El modelo mental anterior, es lo que realmente hace la mente en términos genéricos se lo mira
así.
CDN
Numero de datos 6
CN CN CN CN CN CN
1 2 3 4 5 6
NUM NUM NUM NUM NUM NUM
3 10 12 20 5 15
NUM NUM NUM NUM NUM NUM
3 mul de 5? 10 mul de 5? 12 mul de 5? 20 mul de 5? 5 es mul de 15 mul de 5?
5?
No Si No Si Si Si
S5 S5 S5 S5
10 30 35 50
C5 C5 C5 C5
1 2 3 4
S5 C5 PROM5
Promedio múltiplo de 5 = 50 / 4 = 12,25
PROM5
“Promedio múltiplo de 5 =”, 12,5
Definición variables
CDN // entrada
Numero de datos 6
Asignación
S5 C5 PROM5
Promedio múltiplo de 5 = 50 / 4 = 12,25
Asignaciones
Para CN
CN CN + 1
Es un contador de 1 en 1
Y
CN 0
Para S5
S5 S5 + NUM
Acumulador de los múltiplos de 5
S5 0
Para C5
C5 C5 + 1
Contador de 1 en 1
C5 0
¿NUM mod 5 = 0?
Leer CDN
Leer NUM Leer NUM Leer NUM Leer NUM Leer NUM Leer NUM
S5 0 Si (NUM mod 5 =0) Si (NUM mod 5 =0) Si (NUM mod 5 =0) Si (NUM mod 5 =0) Si (NUM mod 5 =0) Si (NUM mod 5 =0)
Entonces Entonces Entonces Entonces Entonces Entonces
C5 0 S5 S5 + NUM S5 S5 + NUM S5 S5 + NUM S5 S5 + NUM S5 S5 + NUM S5 S5 + NUM
C5 C5 + 1 C5 C5 + 1 C5 C5 + 1 C5 C5 + 1 C5 C5 + 1 C5 C5 + 1
Fin si Fin si Fin si Fin si Fin si Fin si
PROM5 S5/C5
Escribir “ Promedio múltiplos de 5 = “, PROM5
CN CN+1
Leer NUM
Si (NUM mod 5 =0)
Entonces
S5 S5 + NUM
C5 C5 + 1
Fin si
Se repite 6 veces por lo tanto, se lo trabaja con un ciclo mientras controlado por el contador de
números CN y la condición de control será la siguiente:
CN<6?
CN < CDN?
Con esta condición el ciclo queda
Lo que está fuera del cuadro del modelo mental, son las acciones antes del ciclo y después del
ciclo
Leer CDN
CN0
S50
C50
Algoritmo completo
Inicio
leer CDN
CN<-0
C5<-0
S5<-0
Mientras ( CN < CDN ) hacer
CN<-CN+1
Leer NUM
Si ( NUM mod 5 = 0)
Entonces
S5<-S5+NUM
C5<-C5+1
Fin si
Fin mientras
PROM5 <- S5/C5
Escribir "Promedio de múltiplos de 5 = ",PROM5
Fin
Diagrama en PsInt
Diagrama en Dfd
En computación es muy importante tener presente que la operación de división por cero es
indefinida.
Si en un programa se presenta división por cero este cancelará, por lo que se debe incluir en la
programación, instrucciones de validación de esta situación.
En el ejemplo que acabamos de especificar puede darse el hecho de que ningún dato numérico
sea múltiplo de 5, entonces según la lógica S5 y C5 quedan con el valor de cero (0) y al calcular el
promedio se presenta
Si ( C5 > 0 )
Entonces // Significa que por lo menos hay un múltiplo de 5
PROM5 <- S5 / C5
Escribir “ Promedio de 5 = “, PROM5
Sino
Escribir “ No hay múltiplos de 5 “
Fin si
Inicio
leer CDN
CN<-0
C5<-0
S5<-0
Mientras ( CN < CDN ) hacer
CN<-CN+1
Leer NUM
Si ( NUM mod 5 = 0) Entonces
S5<-S5+NUM
C5<-C5+1
Fin si
Fin mientras
Si ( C5 > 0 ) // se pregunta si por lo menos hay un múltiplo de 5
Entonces // Significa que por lo menos hay un múltiplo de 5
PROM5 <- S5 / C5
Escribir “ Promedio de 5 = “, PROM5
Sino
Escribir “ No hay múltiplos de 5 “
Fin si
Fin
Hallar el valor promedio es muy utilizado, por lo que es importante el proceso de validación
Diagrama en PsInt
Con los elementos planteados hasta el momento para los ciclo se plantean los siguientes
ejercicios, todos realizando los respectivos modelos mentales, teniendo en cuenta las reglas que
se han planteado
Ejercicio ciclo 4
Sumar los números desde el 0 hasta un número dado
Solución
Este ejercicio tiene un solo dato de entrada que es el límite hasta donde se deben sumar los datos.
Número dado 5
Suma 1+2+3+4+5 = 15
Respuesta Suma = 15
Modelo
Numero dado 5
1 2 3 4 5 <- 4+1
1 3 6 10 15<-10+5
Suma = 15
Observe que los datos son una secuencia de datos con variación de 1 en 1 y que esos datos se van
sumando
Pasos genéricos
Entrar un número
Generar los números desde 1 hasta el número dado
Por cada dato generado sumarlo
Mostrar el resultado de la suma
Nro // Entrada
Numero dado 5
SUM // salida
Suma = 15
Definición de variables
Nro : Número límite tipo numérico entero
CON : Contador tipo numérico, genera la secuencia de 1 en 1 hasta Nro. Tipo numérico entero
SUM : Sumador o Acumulador, lleva la suma de los valores generados en CON. Tipo numérico
entero
Asignaciones:
Ahora CON y SUM tienen un valor inicial de Cero (0), antes de que lleguen los números, y se lo
establece con asignación y van antes del proceso de los números que se lo hace con un ciclo.
CON 0
SUM 0
Leer Nro
5
Las instrucciones
CON CON + 1
SUM SUM + 1
Se repiten 5 veces, por lo que se va a utilizar un ciclo controlado por un contador, el contador es el
mismo que genera los números del 1 hasta el 5, es decir CON. Según esto la condición que
controla el ciclo es
Inicio
Leer Nro
CON <- 0
SUM <- 0
Mientras (CON < Nro ) hacer
CON <- CON +1
SUM <- SUM + CON
Fin Mientras
Escribir "Suma = ", SUM
Fin
Algoritmo PsInt
El ejercicio anterior es importante, porque se sumaron varios números que no fueron entrados, se
generaron internamente con la variable CON que a su vez sirvió para controlar el ciclo.
Hay muchos ejercicios que tienen esta característica, con el análisis se los reconoce.
Ejercicio ciclo 6
Sumar los números pares desde el 0 hasta un número dado
Solución
Modelo mental
Numero dado 13
2+4+6+8+10+12 = 42
Numero dado 13
2 4 6 8 10 12
2 6 12 20 30 42
Modelo general
NRO
Numero dado 13
NRO SUMP
Suma de pares menores que 13 = 42
Variables
Nro : Valor numérico dado
PAR : Contador de pares
SUMP : Acumulador de pares
Como hay bloques de acciones que se repiten, se lo trabaja con un ciclo controlado por un
contador que es PAR.
Condición de control del ciclo PAR < Nro
Algoritmo resultante
Inicio
Leer Nro
PAR <- 0
SUMP <- 0
Mientras (PAR <= Nro ) hacer
PAR <- PAR +2
SUMP <- SUMP + PAR
Fin Mientras
Escribir "Suma pares = ", SUMP
Fin
Se debe evaluar siempre la frontera para determinar que pasa con los últimos valores.
La evaluación de la frontera es determinar que pasa con el último dato. Muchas veces ocurre que trabaja uno más o uno
menos, por lo que hay que ajustar la condición.
El algoritmo queda
inicio
Leer Nro
PAR <- 0
SUMP <- 0
Mientras (PAR <= Nro-2 ) hacer
PAR <- PAR +2
SUMP <- SUMP + PAR
Fin Mientras
Escribir "Suma pares = ", SUMP
Fin
Esta solución permite ver que el contador perfectamente puede iniciar su valor en un valor diferente de 0. En este caso
el valor inicia e 2 y la ultima instrucción es el incremento del contador.
Los siguientes ejercicios van a recibir una cantidad dada de números, que van a ser trabajados con
una sola variable, como se trabajo en anteriores ejercicios.
Los siguientes ejercicio se los trabaja con ciclos y presentan otra forma de definir
9. Determinar si un número dado es múltiplo de 5 sin utilizar el operador residuo (mod)
10. Determinar si un número dado es múltiplo de otro sin utilizar el operador residuo (mod)
11. Hallar la multiplicación de dos números con sumas
12. Determinar para un número dado la cantidad de números que lo dividen exactamente
13. Determinar si un número dado es o no primo
Ejercicio ciclo 7
Determinar para un número dado, la cantidad de números que lo dividen exactamente.
Modelo mental
Numero dado 6
Mentalmente podríamos decir que los números que lo dividen exactamente son
1, 2, 3 y 6
O sea son 4.
10
1 2 5 10
Un dato a la vez
Número dado 6
6 mod 1 = 0? si 1
6 mod 2 = 0? si 2
6 mod 3 = 0? si 3
6 mod 4 = 0? no
6 mod 5 = 0? no
6 mod 6 = 0? Si 4
NRO CN CD
6 mod 1 = 0? si 1
CN CD
6 mod 2 = 0? si 2
CN CD
6 mod 3 = 0? si 3
CN
6 mod 4 = 0? no
CN
6 mod 5 = 0? no
CN CD
6 mod 6 = 0? Si 4
CD
Respuesta Cantidad de divisores = 4
Definicion de variables
Este ejercicio se lo va a realizar con un ciclo controlado por un contador en donde, por cada
variación del contador CN se va a realizar lo siguiente:
Leer Nro
6
CN CN CN CN CN CN
1 2 3 4 5 6
NRO CN NRO CN NRO CN NRO CN NRO CN NRO CN
¿6 MOD 1 = 0? ¿6 MOD 2 = 0? ¿6 MOD 3 = 0? ¿6 MOD 4 = 0? ¿6 MOD 5 = 0? ¿6 MOD 6 = 0?
SI SI SI NO No SI
CD CD CD CD
1 2 3 4
Leer Nro
6
Inicio
Leer NRO
CN <- 0
CD <- 0
Mientras (CN < NRO ) Hacer
CN <-CN + 1
Si ( NRO MOD CN = 0)
Entonces
CD <- CD + 1
Fin si
Fin mientras
Escribir “Cantidad de divisores exactos =”, CD
Fin
Diagrama de flujo
Ejercicio ciclo 8
Determinar si un número dado es primo.
Con estos conceptos más los conceptos de las acciones, se puede dar un ejemplo
Número dado 7
El 5 es primo
1 5
Numero dado 6
Mentalmente se puede hacer este análisis para números pequeños y establecemos la respuesta
directamente, pero computacionalmente debemos decirle al detalle que es lo que hace la mente.
Número dado 7
7 mod 1 = 0? si 1
7 mod 2 = 0? no
7 mod 3 = 0? no
7 mod 4 = 0? no
7 mod 5 = 0? no
7 mod 6 = 0? no
7 mod 7 = 0? Si 2
Número dado 6
6 mod 1 = 0? si 1
6 mod 2 = 0? si 2
6 mod 3 = 0? si 3
6 mod 4 = 0? no
6 mod 5 = 0? no
6 mod 6 = 0? Si 4
Pasos genéricos
Entonces todo el análisis realizado para el ejercicio anterior sirve para determinar si es primo
Leer Nro
6
Si ( CD = 2)
Entonces
Escribir NRO, “ Es primo “
Sino
Escribir NRO, “ No es primo “
Fin si
Después del ciclo se evalúa si el contador de divisores exactos es menor o igual a 2 ( CD <=2 ), si es
así, significa que el numero evaluado ( NRO ), si es primo, de lo contrario no los es.
Algoritmo.
Inicio
Leer NRO
CN 0
CD 0
Mientras (CN < NRO ) Hacer
CN CN + 1
Si ( NRO MOD CN = 0)
Entonces
CD CD + 1
Fin si
Fin mientras
Si ( CD = 2)
Entonces
Escribir NRO, “ Es primo “
Sino
Escribir NRO, “ No es primo “
Fin si
Fin
Se resalta la parte que se adiciona al ejercicio anterior para evaluar el contador de divisores, que
permite determinar si es o no primo.
Diagrama de flujo
Ejercicios
Estos dos ejercicios son muy útiles, para identificar las características de un conjunto de datos que
es muy importante analizarlos.
Ejercicio ciclo 9
Determinar de una cantidad de números dada, el número mayor.
Solución
Cantidad de datos 5
Datos 7 20 30 15 10
Para que sea computacional se trabaja un dato a la vez y por cada dato se analiza lo que hace la
mente.
Cantidad de datos 5
Dato 2 20
Cuando llega el 20 se compara con el valor mayor que se lleva
¿20>7?
Si
Ahora el mayor es 20
Dato 3 30
¿30>20?
Si
Ahora el mayor es 30
Dato 4 15
Dato 5 10
¿10>30?
No
No hace nada
Cantidad de datos 5
1 2 3 4 5
7 20 30 10 15
A partir del segundo, todo dato se compara con el mayor que lleve.
Esto indica que si se va a trabajar con un ciclo controlado por un contador, el primer dato no debe
estar dentro del ciclo porque su acción es diferente a las demás.
CD // Entrada
Cantidad de datos 5
Mayor 30
Definición de Variables
Leer CD
Leer NRO Leer NRO Leer NRO Leer NRO Leer NRO
Inicio
Leer CD
CON <- 1
Leer NRO
MAYOR <- NRO
Mientras ( CON < CD) Hacer
CON <- CON + 1
Leer NRO
SI ( NRO > MAYOR )
Entonces
MAYOR <- NRO
Fin si
Fin mientras
Escribir “ Mayor = “, MAYOR
Fin
Diagrama de flujo
Ejercicio ciclo 11
Determinar de una cantidad de números, el número menor
Para obtener el menor de los datos, el análisis es el mismo y lo que cambia es la variable MAYOR
por MENOR y la decisión es la siguiente:
Que indica si el nuevo número que se lee es menor que el menor que se lleva, se lo cambia
Inicio
Leer CD
CON 1
Leer NRO
MENOR NRO
Mientras ( CON < CD) Hacer
CON CON + 1
Leer NRO
SI ( NRO < MENOR )
Entonces
MENOR NRO
Fin si
Fin mientras
Escribir “ Menor = “, MENOR
Fin
El método anterior lee un dato por fuera del ciclo y lo establece como MAYOR o como MENOR,
esto se hace con el propósito de tener un dato válido para realizar las comparaciones con los
demás datos.
Ejercicio ciclo 12
Sacar el mayor y el menor de una cantidad de datos numéricos dada
Con el método anterior se tendría como resultado la combinación de los dos primeros en donde
cambiaría la condición.
Inicio
Leer CD
CON 1
Leer NRO
MENOR NRO
MAYOR NRO
Mientras ( CON < CD) Hacer
CON CON + 1
Leer NRO
SI ( NRO > MAYOR )
Entonces
MAYOR NRO
Sino
Si ( NRO < MENOR )
Entonces
MENOR NRO
Fin si
Fin si
Fin mientras
Escribir “ Mayor = “, MAYOR
Escribir “ Menor = “, MENOR
Fin
Diagrama de flujo
Inicio
Leer CD
CON <- 1
Leer NRO
MENOR <- NRO
MAYOR <- NRO
Mientras ( CON < CD) Hacer
CON <- CON + 1
Leer NRO
SI ( NRO > MAYOR )
Entonces
MAYOR <- NRO
Fin si
Ejercicio ciclo 13
Determinar de una cantidad de números dada, el número mayor. Utilizando otro método
En el siguiente ejercicio va determinar el mayor de los datos, con otro método que incluye la
lectura de todos los datos dentro del ciclo.
Cuando se busca el mayor y el menor de una cantidad de datos, la mente reserva un espacio de
memoria para ir llevando el mayor o el menor, sabiendo que el primer dato, por ser el primero
será el mayor y el menor, a partir del segundo ya se puede comparar porque al menos hay un dato
en la memoria.
El método anterior lee un dato por fuera y este, lo vuelve mayor y menor, y durante el ciclo los
compara con los demás datos.
Ahora el método que se propone es leerlos todos dentro del ciclo, por lo que debe haber alguna
señal que diga quien es el primero.
Modelo mental
Cantidad de datos 5
1 2 3 4 5
7 20 30 10 15
Mayor 30
CD
Cantidad de datos 5
CON Asignación Asignación Asignación Asignación Asignación
0 CON CON CON CON CON
1 2 3 4 5
Entrada Entrada Entrada Entrada Entrada
NRO NRO NRO NRO NRO
7 20 30 10 15
Decisión Decisión Decisión Decisión Decisión
NRO NRO NRO NRO NRO
¿7 es el primero? ¿20 es el primero? ¿30 es el primero? ¿10 es el primero? ¿15 es el primero?
Si No No No No
Asignación Decisión Decisión Decisión Decisión
MAYOR NRO MAYOR NRO MAYOR NRO MAYOR NRO MAYOR
7 ¿20 > 7? ¿30 > 20? ¿10 > 30? ¿15 > 30?
Si Si No No
Asignación Asignación
MAYOR MAYOR
20 30
Mayor 30
Este ejercicio se realiza con un ciclo controlado por el contador CON, donde la condición de
control es, CON < CD .
Para determinar si es el primero se lo hace preguntado si CON vale 1. Solo para el primer dato
CON vale 1, para los demás es diferente de 1 por lo tanto, para los demás datos la condición ya no
va a ser verdadera y pasa por el falso a comparar con el valor leído en NRO
Algoritmo
Inicio
Leer CD
CON <- 0
Mientras ( CON < CD ) Hacer
CON <- CON + 1
Leer NRO
SI ( CON = 1 )
Entonces // si es verdadero es porque es el primero
MAYOR <- NRO // el primer dato lo vuelve mayor
Sino // ya no es el primero entra a comparar
Si ( NRO > MAYOR )
Entonces
MAYOR <- NRO
Fin si
Fin si
Fin mientras
Escribir “ Mayor = “, MAYOR
Fin
Ejercicio ciclo 14
Determinar de una cantidad de números dada, el número mayor. Método 3
Existe un tercer método para obtener el mayor y el menor que es muy utilizado, y es
estrictamente computacional.
Para hallar el mayor o el menor, se parte del hecho de que se debe tener en una variable MAYOR o
MENOR un dato para comparar, y esto no se lo tiene, sino se ha leído el primer dato, para evitar
esto, por fuera del ciclo se inicializa MAYOR con el valor más pequeño y para MENOR con el valor
más alto del tipo de dato.
Ejemplo
Inicio
Leer CD
CON <- 0
MAYOR <- 0 // se inicializa en 0 para que en la primera comparación cambie
Mientras ( CON < CD ) Hacer
CON <- CON + 1
Leer NRO
Si ( NRO > MAYOR )
Entonces
MAYOR <- NRO
Fin si
Fin mientras
Fin
Hasta ahora los ciclos han sido controlados por contadores que van en forma creciente a alcanzar
un número dado. Ahora, depende del análisis del ejercicio el que determina que tipo de contador
es.
Ejercicio ciclo 15
Determinar el factorial de un número dado.
El factorial de un número se lo define de la siguiente forma:
5!
Es 5*4*3*2*1 = 120
El factorial de 5 es 120
Ejemplo
Modelo mental inicial
Dato dado 5
5! = 5*4*3*2*1 = 120
Con un dato a la vez se obtiene el siguiente modelo, esto es que pasa con cada valor decreciente.
Cantidad de datos 5
5 4 3 2 1
Factorial de 5 = 120
NRO // Entrada
Cantidad de datos 5
FAC
Factorial de 5 = 120
FAC es una variable que va llevando multiplicaciones de varios valores y funciona igual que la
sumatoria, en este caso se llama productoria y funciona asi:
120 60 * 2
Donde 120 es FAC, 60 es FAC y 2 es CON. Entonces queda
FAC FAC*CON
CON 6
CON NRO + 1 // para que la primera vez de 5
El algoritmo queda:
Inicio
Leer NRO
CON <- NRO + 1
FAC <- 1
Mientras ( CON > 1) Hacer
CON <- CON - 1
FAC <- FAC * CON
Fin mientras
Escribir “Factorial de “, NRO , “ = “, FAC
Fin
Diagrama de flujo
Este es un ejemplo de multiplicaciones sucesivas
Ejercicio ciclo 16
Determinara el factorial de un número dado. Método 2
NRO // Entrada
Cantidad de datos 5
FAC
Factorial de 5 = 120
Algoritmo
Inicio
Leer NRO
CON <- 0
FAC <- 1
Mientras ( CON <NRO) Hacer
CON <- CON +1
FAC <- FAC * CON
Fin mientras
Escribir “Factorial de “, NRO , “ = “, FAC
Fin
Ciclos anidados
Se habla de ciclos anidados cuando dentro de un ciclo hay otro ciclo en sus instrucciones a repetir.
Formato general
Esta situación planteada muestra que hay 3 ciclos mientras anidados con sus respectivas acciones
genéricas.
Características
- Cuando se tiene ciclos anidados, el ciclo más interno se acaba primero
- El orden del fin mientras de cada ciclo, está especificado desde el más interno hasta el más
externo. Por eso es que se acaba primero.
- Cada ciclo interno tiene sus condiciones antes del ciclo y después del ciclo, que se deben
manejar muy bien, para evitar errores.
Ejercicios ciclo 17
Se tiene una cantidad de números dada, determinar el promedio de los números primos que están
en esos números.
Cantidad de números 6
Números 8 7 2 4 13 17
Cantidad de Números 6
1 2 3 4 5 6
8 7 2 4 13 17
CNUM // Entrada
Cantidad de Números 6
La pregunta
NRO
¿8 es primo?
No
Exige que se ejecuten las acciones para determinar si NRO es primo, entonces esta pregunta se
transforma en:
CN 0
CD 0
Mientras (CN < NRO ) Hacer
CN CN + 1
Si ( NRO MOD CN = 0)
Entonces
CD CD + 1
Fin si
Fin mientras
Si ( CD = 2)
Entonces // el número si es primo
SUMP SUMP + NRO
CONP CONP + 1
Fin si
CON CON + 1
Leer NRO
CN 0
CD 0
Mientras (CN < NRO ) Hacer
CN CN + 1
Si ( NRO MOD CN = 0)
Entonces
CD CD + 1
Fin si
Fin mientras
Si ( CD = 2)
Entonces // el número si es primo
SUMP SUMP + NRO
CONP CONP + 1
Fin si
Definición de variables
Algoritmo
Inicio
Leer CNUM
CON <- 0
SUMP <- 0
CONP<- 0
Mientras ( CON < CNUM ) hacer // ciclo para controlar la entrada de datos
CON <- CON + 1
Leer NRO
CN <- 0
CD <- 0
Mientras (CN < NRO ) Hacer // ciclo para determinar divisores exactos
CN <-CN + 1
Si ( NRO MOD CN = 0)
Entonces
CD <- CD + 1
Fin si
Fin mientras
Si ( CD = 2)
Entonces // el número si es primo
SUMP <- SUMP + NRO
CONP <- CONP + 1
Fin si
Fin mientras
Si ( CONP > 0 ) // Valida si hay al menos un número primo
Entonces
PROMP <- SUMP/CONP
Escribir “ Promedio de Primos = “,PROMP
Sino
Escribir “ No hay números primos “
Fin si
Fin
El algoritmo muestra en otro color que implica establecer si un dato es o no primo, el cual necesita
de un ciclo para determinar la cantidad de divisores exactos.
Diagrama de flujo
Ejercicio
Modelo mental
23 mod 5 = 3
23
No es múltiplo de 5
5 10 15 20 25
¿23 = 25?
No
El 23 no es múltiplo de 5
5 10 15 20 25 30
Al final se pregunta
¿30=30?
Si
30 es múltiplo de 5
Pasos genéricos
Leer número
Generar la secuencia de 5 mientras sea menor que número
Si el número es igual al último generado
Entonces el número es múltiplo de 5
Sino el número no es múltiplo de 5
Num
Numero dado 23
C5 C5 C5 C5 C5
5 10 15 20 25
Num C5
¿23 = 25?
No
23 no es múltiplo de 5
Definición de variables
Asignación
C5 C5 + 5
C5 0
Decisión
Si ( Num = C5 ) Entonces
Escribir Num, “ es múltiplo de 5”
Sino
Escribir Num, “ No es múltiplo de 5”
Fin si
Algoritmo
Inicio
Leer Num
C5<-0
Mientras ( C5 < Num ) hacer
C5 <- C5 +5
FinMientras
Si ( Num = C5) Entonces
Escribir Num, " Es multiplo de 5"
SiNo
Escribir Num, " No es multiplo de 5"
FinSi
Fin
Diagrama en PsInt
Existe otro método, que le permite determinar si es múltiplo.
Generar una secuencia con variaciones de -5 hasta llegar a 0, si se llega a 0 es múltiplo de 5 sino,
no lo es.
¿C5 = 0?
Si es múltiplo de 5
No No es múltiplo de 5
C5 C5 – 5
Antes de ciclo
C5 Num
Algoritmo
Inicio
Leer Num
C5<-Num
Mientras ( C5 > 0 ) hacer
C5 <- C5 -5
FinMientras
Si ( C5 = 0) Entonces
Escribir Num, " Es multiplo de 5"
SiNo
Escribir Num, " No es multiplo de 5"
FinSi
Fin
Diagrama
El anterior ejercicio determina un método para averiguar si un número determinado pertenece o
no a una serie que tiene unas características determinadas.
En el ejemplo la serie es la secuencia de 5, en donde se generó la serie hasta el número dado y se
averiguó que pasaba en esa frontera.
Ejercicio ciclo
Esta serie se genera con un ciclo donde por cada repetición o iteración del ciclo se genera un
término.
Modelo mental
Numero de Términos 10
A B T T T
1 2 3 4 5 6 7 8 9 10
0 1 1 2 3 5 8 13 21 34
A B
A B
A B
Donde los dos primeros números por definición ya se los tiene generados, faltan los otros 8 los
cuales se los realiza de la siguiente forma
Lo que se conoce es
1 2 3 4 5 6 7 8 9 10
C C C C C C C C C C
1 2 3 4 5 6 7 8 9 10
A B T T T T T T T T
0 1 1 2 3 5 8 13 21 34
Para que el nuevo termino se genere, se debe tener en cada tiempo los dos valores anteriores. En
el modelo mental se tiene que valores debe estar en las variables A y B, que siempre van a ser los
dos anteriores para obtener el proximo que es T
T<- A+B
Esto significa que antes de generar el termino T los valores de A y B deben haber cambiado y lo
hacen como en el ejemplo. Eso significa que
A <- B
B <- T
Ahora cada vez que se genera un numero de la serie se lo muestra. Entonces el modelo es el
siguiente
NT
Numero de términos 10
C C C<-C+1 C<-C+1 C<-C+1 C<-C+1 C<-C+1 C<-C+1 C<-C+1 C<-C+1
1 2 3 4 5 6 7 8 9 10
A B T<- A+B T<-A+B T<-A+B T<-A+B T<-A+B T<- A+B T<- A+B T<-A+B
0 1 1<- 0+1 2<-1+1 3<-1+2 5<-2+3 8<-3+5 13<-5+8 21<-8+13 34<-13+21
Sale A T T T T T T T T
Sale B Sale 1 Sale 2 Sale 3 Sale 5 Sale 8 Sale 13 Sale 21 Sale 34
A<-B A<-B A<-B A<-B A<-B A<-B A<-B A<-B
B<-T B<-T B<-T B<-T B<-T B<-T B<-T B<-T
Donde A<-B y B<-T dejan preparado los valores para generar el próximo numero fibonacci, el
cual se hace en el siguiente tiempo.
El algoritmo queda
Inicio
Leer NT
C <- 1
A<-0
B<-1
Escribir A
Escribir B
C<-2
Mientras ( C<NT ) Hacer
C<-C+1
T<-A+B
Escribir T
A<-B
B<-T
Fin mientras
Fin
Ejercicio ciclo
Determinar si un valor dado pertenece a la serie de fibonacci
O determinar si un numero dado es fibonacci
Ejemplo
Número dado 30
Para saber si pertenece a la serie, se debe conocer la serie, por lo que se debería generarla y mirar
si el número está o no en la serie. Para este número se tendría:
0 1 1 2 3 5 8 13 21 34
Con esto se concluye que el 30, no es un número de Fibonacci, porque no está en la serie donde
debería estar, que es entre el 21 y el 34, los demás valores que siguen, por la característica de la
serie serán mayores que el 30, y no tendría sentido seguir generando la serie.
Para el 30 se genera
0 1 1 2 3 5 8 13 21 34
Para el 21
0 1 1 2 3 5 8 13 21
Pasos
Leer el Numero
Generar la serie hasta el número evaluado
Preguntar si el último número generado es igual al número evaluado
Si es igual es Fibonacci
Sino es igual no es Fibonacci
NRO
Para el 21
A B T ...
A B T T T T T T T
0 1 1 2 3 5 8 13 21
¿T<NRO?
NRO = T
¿21 = 21?
Si
NRO es Fibonacci
Inicio
Leer NRO
A<-0
B<-1
T<-0 // T debe valer 0 para que también tome el 0 que si es fibonacci
Mientras ( T < NRO ) Hacer
T<-A+B
A<-B
B<-T
Fin mientras
Si ( NRO = T ) Entonces
Escribir NRO, " ES FIBONACCI "
Sino
Escribir NRO, " NO ES FIBONACCI "
Fin si
Fin
Ejercicios
Ejercicio
Se tienen una cantidad de números dado, determinar el promedio de los números que son
fibonacci.
En los números pueden haber fibonacci y no fibonacci.
Cantidad de números 4
Datos numéricos 4 5 11 34
4 es fib?
(5+34)/2 = 19.5
Un dato a la vez
Elementos claros
Entrada de varios datos
Sumador
Contador
Determinar si es fibonacci
Promedio
Inicio
// leer cantidad de datos
Leer CDN
CON <- 0
SUMF<-0
CONF<-0
// Ciclo para la entrada de datos y evaluación
Mientras ( CON < CDN ) hacer
CON <- CON+1
Leer NRO
A<-0
B<-1
T<-0
Mientras ( T < NRO ) Hacer
T<-A+B
A<-B
B<-T
Fin Mientras
Si ( T= NRO) Entonces
SUMF <- SUMF+NRO
CONF<- CONF + 1
Fin si
Fin mientras
Si (CONF>0) Entonces
PROMF<-SUMF/CONF
Escribir “ Promedio = “,PROMF
Sino
Escribir “ No hay fibonacci”
Fin si
Fin
Ejercicio ciclo
Se tiene una cantidad de numeros dada, determinar el primo menor de estos.
Ejemplo
Cantidad de numeros 6
Numeros dados 4 8 7 5 13 9
El primo menor es 5
El primero se lo puede controlar con un contador de primos, de tal forma que cuando se
encuentre un primo se incremente en 1, y cuando este valga 1, significa que es el primer primo,
por lo tanto se lo determina como el menor, si hay más primos el contador se va a incrementar y
ya no va a ser 1 ahora vale 2 o más, indicando con esto, que ya no es el primero, por lo que cada
primo nuevo, se debería comparar con el menor que se lleve.
Con estas anotaciones planteamos el modelo mental siguindo la regla de un dato a la vez.
Cantidad de numeros 6
1 2 3 4 5 6
4 8 7 3 13 9
Primo menor = 3
NRO // decisión NRO // decisión NRO // decisión NRO // decisión NRO // decisión NRO // decisión
¿4 es primo? ¿8 es primo? ¿7 es primo? ¿3 es primo? ¿13 es primo? ¿9 es primo?
No No Si Si Si No
¿7 es el primero? ¿3 es el ¿13 es el primero?
Si primero? NRO Menor
Menor NRO Menor No ¿13 < 3?
7 No ¿ 3 < 7? No
Si
Menor
3
Resultado
Menor
Primo menor = 3
Para la pregunta
¿NRO es primo?
Sabemos que no es computacional, esto implica que para determinar si NRO es primo, como se
dijo en el ejercicio anterior, se debe realizar varias intrucciones con las cuales se va a hallar la
cantidad de divisores exactos, para evaluarlo y determinar si es primo. El siguiente codigo
determina este proceso:
C<-0
CD<-0
Mientras ( C<NRO ) Hacer
C<-C+1
Si ( NRO mod C = 0) Entonces
CD <- CD+1
Fin si
Fin mientras
Si (CD = 2) Entonces // si es verdadero, es primo
CP<-CP+1
¿NRO es el primero?
Si
Menor
7
CP <- CP+1
Si ( CP = 1 ) Entonces // Indica que es el primero
Menor <- NRO
Sino // indica que ya no es el primero y lo debe comparar como lo muestra en el algoritmo
Algoritmo:
Inicio
Leer CDN
CP<-0
CN<-0
Mientras (CN<CDN) Hacer
CN<-CN+1
Leer NRO
C<-0
CD<-0
Mientras ( C<NRO ) Hacer
C<-C+1
Si ( NRO mod C = 0) Entonces
CD <- CD+1
Fin si
Fin mientras
Si (CD = 2) Entonces
CP <- CP + 1
Si ( CP = 1 ) Entonces
Menor<-NRO
Sino
Si (NRO<Menor) Entonces
Menor <- NRO
Fin si
Fin si
Fin si
Fin mientras
Escribir “ Primo menor “,Menor
Fin
Inicio
Leer CDN
CP<-0
CN<-0
Mientras (CN<CDN) Hacer
CN<-CN+1
Leer NRO
C<-0
CD<-0
Mientras ( C<NRO ) Hacer
C<-C+1
Si ( NRO mod C = 0) Entonces
CD <- CD+1
Fin si
Fin mientras
Si (CD = 2) Entonces
CP <- CP + 1
Si ( CP = 1 ) Entonces
Menor<-NRO
Mayor<-NRO
Sino
Si (NRO<Menor) Entonces
Menor <- NRO
Fin si
SI (NRO>Mayor) Entonces
Mayor<-NRO
FinSi
Fin si
Fin si
Fin mientras
Escribir " Primo menor ",Menor
Escribir " Primo mayor ",Mayor
Fin
Diagrama en PseInt
Ejercicio
Se tiene una cantidad dada de números, determinar el primo menor de ellos.
Para este ejercicio se planteó la solución anterior, donde se controló el primer primo con un
contador CP, donde el valor de 1 indicaba que era el primero.
Esta parte del algoritmo se lo puede modificar utilizando una bandera o switche, el cual va a tener
dos comportamientos B<-0 para indicar que es el primero y B<-1 para indicar que ya pasó por el
primero. El resto del algoritmo permanece igual.
Entonces la pregunta
¿NRO es el primero?
Si
Menor
7
CP <- CP+1
Si ( CP = 1 ) Entonces // Indica que es el primero
Menor <- NRO
Sino // indica que ya no es el primero y lo debe comparar como lo muestra en el algoritmo
Inicio
Leer CDN
B<-0 // variable bandera, inicia en 0 para indicar que es el primero
CN<-0
Mientras (CN<CDN) Hacer
CN<-CN+1
Leer NRO
C<-0
CD<-0
Mientras ( C<NRO ) Hacer
C<-C+1
Si ( NRO mod C = 0) Entonces
CD <- CD+1
Fin si
Fin mientras
Si (CD = 2) Entonces
Si ( B = 0 ) Entonces
Menor<-NRO
B<-1 // Con esto se garantiza que no vuelva a pasar por estas acciones
Sino
Si (NRO<Menor) Entonces
Menor <- NRO
Fin si
Fin si
Fin si
Fin mientras
Escribir “ Primo menor “,Menor
Fin
El 7 se tiene que dividir por todos los números del 1 al 7 para ver, si lo dividen exactamente
Número dado 7
7 mod 1 = 0? si 1
7 mod 2 = 0? no
7 mod 3 = 0? no
7 mod 4 = 0? no
7 mod 5 = 0? no
7 mod 6 = 0? no
7 mod 7 = 0? Si 2
Inicio
Leer NRO
CN 0
CD 0
Mientras (CN < NRO ) Hacer
CN CN + 1
Si ( NRO MOD CN = 0)
Entonces
CD CD + 1
Fin si
Fin mientras
Si ( CD = 2)
Entonces
Escribir NRO, “ Es primo “
Sino
Escribir NRO, “ No es primo “
Fin si
Fin
Se lee un valor
Se va a tomar una variable bandera B que va a tomar el valor de 0
Realizar un ciclo controlado por un contador entre 2 y el número menos 1 (Se descarta el 1 y el
número mismo porque si son divisibles exactamente, para todos).
Dentro del ciclo, se aplica la operación modulo entre el numero y contador, y si hay un numero,
que lo divida exactamente cambia el valor de la bandera a 1.
Despues del ciclo se evalúa la bandera. Si B es 0, el número es primo, si es 1, el número no es
primo.
Análisis
El 7 se tiene que dividir por todos los números del 1 al 7 para ver, si lo dividen exactamente
Número dado 7
B=0
7 mod 2 = 0? no
7 mod 3 = 0? no
7 mod 4 = 0? no
7 mod 5 = 0? no
7 mod 6 = 0? no
B = 0?
Si 7 es primo
Número dado 6
B <- 0
6 mod 2 = 0? si B<-1
6 mod 3 = 0? si B<-1
6 mod 4 = 0? no
6 mod 5 = 0? no
B=0?
No
6 no es primo.
Inicio
Leer NRO
CN<- 1
B <- 0 // inicia la bandera en 0
Mientras (CN < NRO-1 ) Hacer
CN CN + 1
Si ( NRO MOD CN = 0)
Entonces
B <-1 // cambia la bandera
Fin si
Fin mientras
Si ( B=0)
Entonces
Escribir NRO, “ Es primo “
Sino
Escribir NRO, “ No es primo “
Fin si
Fin
Esto significa que, que entra a realizar el ciclo si la condición es verdadera por lo que CN < NRO-1 y
B=0 deben ser verdaderas y dejará de ejercutarse cuando CN<NRO-1 o B=0 se vuelva falso, esto
significa que se presentan dos situaciones, por lo que se puede volver falso:
- El ciclo puede terminar si CN<NRO-1 se vuelve falso, esto ocurrirá cuando un número es
primo, lo cual indica que la bandera B no cambia su valor de 0, porque ningún número entre 2
y el número evaluado-1, lo dividió exactamente.
- El ciclo puede terminar si B=0 se vuelve falso. Esto ocurrirá cuando hay un número que lo
divide exactamente, lo que hace que la bandera cambie a 1 (B<-1).
Ahora, si hay una condición compuesta, en ejecución no se va a saber por que termina el ciclo, una
de las dos, fue la que se volvió falsa, por lo que se debe programar, para que después del ciclo se
determine el porque de la salida. Si se trabaja con bandera, generalmente se evalúa la bandera,
porque el propósito del ciclo es determinar si es primo o no.
Si la bandera cambia, no es primo.
Si la bandera no cambia es primo.
El algoritmo es el siguiente:
Inicio
Leer NRO
CN<- 1
B <- 0 // inicia la bandera en 0
Mientras (CN < NRO-1 and B= 0) Hacer
CN CN + 1
Si ( NRO MOD CN = 0)
Entonces
B <-1 // cambia la bandera
Fin si
Fin mientras
Si ( B=0)
Entonces
Escribir NRO, “ Es primo “
Sino
Escribir NRO, “ No es primo “
Fin si
Fin
También se pudo haber realizado lo siguiente después del ciclo. Preguntar si la que se volvió falsa
es la otra condición simple. Esto quedaría así:
Si ( CN=NRO-1)
Entonces
Escribir NRO, “ Es primo “
Sino
Escribir NRO, “ No es primo “
Fin si
Dentro de la programación hay muchos procesos que necesitan estár conmutando entre 2 grupos
de acciones. Cuando se presenta esto, se utiliza una bandera para que controle esta conmutación.
La conmutación se realiza dentro de un ciclo, donde los grupos de acciones se ejecutan
alternadamente, durante un conjunto determinado de veces.
Ejercicio bandera
Generar una cantidad dada de términos de la siguiente serie:
4 9 7 12 10 15 13 18 16 21 19
Entonces se tiene:
El ejercicio plantea que sumar 5 y restar 2 se realiza en forma alterna, lo cual indica que si se
ejecutó la suma de 5 la siguiente vez se debe restar 2 y luego sumar 5 y después restar 2. Esto lo
coordina la bandera de la siguiente forma:
Entonces,
si SW = 0 se suma 5 y el SW debe cambiar a 1 para que la proxima vez vaya a restar 2.
si SW = 1 se resta 2 y el SW debe cambiar a 0 para que la proxima vez vaya a sumar 5.
1 2 3 4 5 7 8 9
4 si no si no si no si
9 7 12 10 15 13 18
CT
Cantidad de términos 9
NT NT NT NT NT NT NT NT
1 2 3 4 5 7 8 9
0 Si no si no si no si
T T T T T T T T
4 9<-4+5 7<-9-2 12 10 15 13 18
SW SW SW SW SW SW SW
1 0 1 0 1 0 1
CT
Cantidad de términos 9
0 Si Si Si Si Si Si Si
4 9 7 12 10 15 13 18
1 0 1 0 1 0 1
Algoritmo
Inicio
Leer CT
NT<-1
SW<-0
T<-4
Escribir T
Mientras ( NT < CT ) Hacer
NT <- NT + 1
Si (SW= 0) Entonces
T<-T+5
Escribir T
SW <- 1 // Garantiza que la proxima vez va a restar 2
Sino
T<-T-2
Escribir T
SW <- 0 // Garantiza que la proxima vez va a sumar 5
Fin si
Fin mientras
Fin
Lo que está en otro color determina como se maneja la variable bandera SW para que alterne
acciones.
Es importante tener bien claro el comportamiento de un ciclo, porque muchas veces se realizan
acciones para que se tengan en cuenta en la próxima iteración o repetición del ciclo, como fue el
caso de los números de fibonacci, donde se dejaban listos los valores de A y B para la siguiente
repetición. En este ejercicio ocurre lo mismo el SW queda listo para irse por el siguiente bloque de
acciones.
Ejercicios
4 9 7 12 10 15 13 18
Se tiene una cantidad dada de números enteros, determinar si la suma de los dos primeros primos
es un número de fibonacci.
cdn
Cantidad de numeros 6
num
6 4 3 8 5 13
cp
P1
Primo 1 3
P2
Primo 2 5
sum
3+5 = 8
8 es fibonacci? si
Inicio
Leer cdn
Cn <- 0
Cp <- 0
B1 <- 0
Mientras ( Cn < cdn & B1 = 0 ) hacer // controla la entrada de numeros
Cn<-Cn+1
Leer Num
c <- 1
b2 <- 0
Mientras (c < Num-1 & b2=0) hacer // Para determinar si es primo
c <- c+1
Si (Num mod c = 0) Entonces
b2 <- 1
Fin si
Fin mientras
Si ( b2=0) Entonces // El numero es primo
cp<-cp+1
Si (cp = 1) Entonces
p1<-Num // Se obtiene el primer primo
sino
si ( cp= 2) Entonces
p2<-Num // Se obtiene el segundo primo
B1 <- 1
fin si
fin si
fin si
Fin mientras
Sum <- p1+p2
A<-0
B<-1
T<-0
Mientras ( T < Sum ) Hacer // Genera serie de fibonacci hasta sum
T<-A+B
A<- B
B <- T
Fin mientras
Si ( T = Sum ) Entonces // Evalua si es fibonacci
Escribir “La suma ”, Sum, “ es fibonacci ”
Sino
Escribir “La suma ”, Sum, “ no es fibonacci ”
Fin si
Fin
Ejercicio de aplicación
Realizar un programa para el manejo de los pagos de los empleados de una empresa X, que tiene
la siguiente información:
Cantidad de empleados
Código empleado
Número de horas trabajadas
Valor de la hora
Porcentaje de descuento
Para que entregue la siguiente información:
Resultados
Por cada empleado
Codigo y sueldo Neto a pagar
Ejemplo
Numero de empleados 2
_________________________________________________
Número empleado 1
Codigo1 1
Numero de Horas 20
Valor de hora 30000
Descuento 10%
Codigo2 2
Numero de Horas 30
Valor hora 50000
Descuento 15%
Para este ejercicio se tiene en cuenta que por cada empleado se tiene que los campos
determinados sirven para leer la información de todos los empleados, por lo que, al leer la
información de cada empleado se deben realizar los cálculos pertinentes, como están
especificados en el ejemplo. Si esto no se realiza, cuando llegue el siguiente empleado borra la
información del actual, y ya no se podrán realizar los cálculos.
Este ejemplo tiene solo dos empleados, pero el modelo sirve para cualquier cantidad de
empleados.
Ejemplo
NEMP
Numero de empleados 2
_______________________________________________________
CE
Numero empleado 1
CODE
Codigo1 1
NHT
Numero de Horas 20
VALH
Valor de hora 300000
DES
Descuento 10%
NHT VALH SUELT
Total sueldo 20 * 30000 = 600000
SUELT PDESC DESCUENTO
Descuento 6000000 * 10 / 100 = 60000
SUELT DESCUENTO SUELN
Sueldo Neto 6000000 - 60000 = 540000
CODE SUELN
Resultado Codigo E001 Sueldo Neto 540000
SUMS
Suma neto 540000
SUMD
Suma Descuento 60000
__________________________________________________________
CE
Numero empleado 2
CODE
Codigo2 2
NHT
Numero de Horas 30
VALH
Valor hora 50000
PDESC
Descuento 15%
_________________________________________________________________
SUMS
Resultado Total sueldo empleados 1775000
SUMD
Total descuentos 285000
Definición de variables
NUME : Número de empleados numérico entero
CE : Contador de empleados numérico entero
CODE : Codigo del Empleado tipo alfanumérico
NHT : Número de horas trabajadas numerico entero
VALH : Valor hora numerico real
PDESC : Porcentaje descuento numerico entero
SUELT : Suedo total empleado numérico real
DESCUENTO : Descuento empleado numerico real
SUELN : Sueldo Neto empleado numerico real
SUMS : Acumulador sueldos netos numérico real
SUMD : Acumulador descuentos numérico real
Determinación de acciones
Algoritmo completo
Inicio
Leer NUME
SUMS <- 0
SUMD <- 0
CE <- 0
Mientras ( CE < NUME) Hacer
CE<-CE + 1
Leer CODE
Leer NHT
Leer VALH
Leer DESC
SUELT <- NHT * VALH
DESCUENTO <- SUELT * DESC/100
SUELN <- SUELT – DESCUENTO
Escribir “ Código Empleado “, CODE, “ Sueldo Neto “, SUELN
SUMS <- SUMS + SUELN
SUMD <- SUMD + DESCUENTO
Fin mientras
Escribir “ TOTAL SUELDO EMPLEADOS “, SUMS
Escribir “ TOTAL DESCUENTOS “, SUMD
Fin
Ejercicio anterior con diseño de entrada de información. Las modificaciones se limitan a establecer
un mensaje manejado con instrucciones de escribir, que detallan la información que se debe
digitar.
Esto hace parte del diseño, por lo que toma gran importancia cuando se selecciona el lenguaje de
programación en la fase de compilación
Si se tiene un material educativo computacional como el PseInt, se puede realizar aspectos que
tienen que ver con diseño, como en el siguiente caso:
Inicio
Escribir " CANTIDAD DE EMPLEADOS "
Leer NUME
SUMS <- 0
SUMD <- 0
CE <- 0
Mientras ( CE < NUME) Hacer
CE<-CE + 1
Escribir " CODIGO EMPLEADO "
Leer CODE
Escribir " HORAS TRABAJADAS "
Leer NHT
Escribir " VALOR HORA "
Leer VALH
Escribir " DESCUENTO "
Leer DESC
SUELT <- NHT * VALH
DESCUENTO <- SUELT * DESC/100
SUELN <- SUELT - DESCUENTO
Escribir " Código Empleado ", CODE, " Sueldo Neto ", SUELN
SUMS <- SUMS + SUELN
SUMD <- SUMD + DESCUENTO
Fin mientras
Escribir " "
Escribir " TOTAL SUELDO EMPLEADOS ", SUMS
Escribir " TOTAL DESCUENTOS ", SUMD
Ejercicio de aplicación de ciclos.
Para una empresa X se requiere realizar un programa que haga el calculo del valor a pagar a cada
uno de sus empleados, para lo cual se tiene la siguiente información:
Cantidad de empleados
Por cada empleado se tiene:
Código empleado
Número de Horas Trabajadas
Valor de la Hora
Para cada empleado se realiza un descuento de la siguiente forma:
Si el sueldo total está entre 0 – 200000 descuento del 5%
Si sueldo total está entre 200001 – 500000 descuento del 10%
Si Sueldo total es mayor que 500000 descuento del 12%
Resultados
Para este ejercicio se deben tener bien claro los siguientes conceptos.
Entrada de varios datos controlados por ciclos, para la entrada de cada uno de los empleados.
Control de un ciclo con contador
Calculos con acciones de asignación
Acciones de decisión para controlar los descuentos
Obtener el mayor y el menor de varios datos
Sumar varios datos, para la suma total de los sueldos y descuentos
Contador para el cálculo de promedios
Con todos los ejercicios anteriores se tiene ya se tiene la destreza para solucionar este problema.
Modelo mental
Modelo computacional
Algoritmo
Todos los ejercicios anteriores trabajados con ciclos, fueron controlados por contadores o por
condiciones que eran el resultado de operaciones aritméticas, como en el caso de los números
fibonacci, donde el T estaba en función de la suma de A y de B. En esencia estos ciclos que erán
controlados de esta forma, se denomina control de ciclos con un esquema cuantitativo.
Ahora y como complemento a lo anterior se tiene, que un ciclo también puede ser controlado con
un esquema cualitativo, el cual se describe a continuación.
Registro.
Conjunto de campos de memoria agrupados, con el objeto de manejar información relacionada y
que hace referencia a una situación, objeto, individuo etc.
Ejemplo
Registro empleado. Puede tener los siguientes campos
Código Empleado
Cédula
Nombres
Apellidos
Cargo
Fecha Ingreso
Fecha de Nacimiento
Hasta el momento en algunos ejercicios que se han realizado se ha trabajado con registros y en
especial con información de empleados para el cálculo del sueldo neto.
Dentro de la temática del manejo de ciclos con esquema cualitativo se trabaja mucho con el
concepto de registro y se tienen los siguientes conceptos:
Campo Centinela. Del grupo de campos de un registro, se determina un campo que va a llevar la
marca de fin de registros, generalmente es un código que identifica el registro, en el empleado
puede ser código del empleado o la cédula, y su valor debe ser del mismo tipo pero no debe estar
en el rango de los datos validos de procesamiento.
Dentro de la asignación de los códigos de una empresa se debe tener claro que el código 9999 no
debe ser asignado a ningún empleado, y va a servir para procesar información en diferentes
aplicativos que se relacionen con registros de empleados.
Para entrar información de varios registros que no se tiene la cantidad de registros, pero se sabe
que el último registro viene con un valor centinela se realiza lo siguiente.
Por cada empleado van a llegar varios registros o ninguno por lo que cabe la posibilidad de que
solo haya el registro centinela.
Cuando se trabaja con registros centinela, la lectura del registro no se lo hace en su totalidad, se
lee primero el campo centinela, y si este es de un registro válido, dentro del ciclo se lee el resto de
los campos, de la siguiente forma:
Leer CodigoEmpleado
Mientras ( CodigoEmpleado <> 9999) Hacer
Leer otros campos del registro
Leer CodigoEmpleado
Fin mientras
Leer CODE
Mientras ( CODE <> 9999) Hacer
Leer NHT,VHT,DES
Leer CODE
Fin mientras
Código empleado
Numero de horas trabajadas
Valor de la hora
Porcentaje de descuento
Para este ejercicio se tiene en cuenta que por cada empleado se tiene un registro y los campos
determinados sirven para leer la información de todos los empleados, por lo que se debe realizar
las acciones pertinentes por cada empleado que son la siguientes.
Sueldo neto por empleado
Resultados
Código Empleado
Ejemplo
Codigo1 E001
Numero de Horas 20
Valor de hora 300000
Descuento 10%
Codigo2 E002
Numero de Horas 30
Valor hora 50000
Descuento 15%
Este ejemplo tiene solo dos empleados, el último registro tiene en el código de empleado 9999 por
lo tanto indica que no hay más.
Ejemplo
_______________________________________________________
CODE
Codigo1 E001
NHT
Numero de Horas 20
VALH
Valor de hora 300000
DES
Descuento 10%
NHT VALH SUELT
Total sueldo 20 * 30000 = 600000
SUELT PDESC DESCUENTO
Descuento 6000000 * 10 / 100 = 60000
SUELT DESCUENTO SUELN
Sueldo Neto 6000000 - 60000 = 540000
CODE SUELN
Salida Codigo E001 Sueldo Neto 540000
SUMS
Suma neto 540000
SUMD
Suma Descuento 60000
__________________________________________________________
CODE
Codigo2 E002
NHT
Numero de Horas 30
VALH
Valor hora 50000
PDESC
Descuento 15%
_________________________________________________________________
__________________________________________________________________
SUMS
Resultado Total sueldo empleados 1775000
SUMD
Total descuentos 285000
El ejemplo anterior tiene 3 registros, los dos primeros con valores válidos, y el tercero con valores
de fin de archivo, el cual solo tiene valor en el campo centinela CODE cuyo valor es 9999. En los
demás campos no hay valores validos, por eso no hay que leerlos.
Definición de variables
Determinación de acciones
Por cada empleado, se utilizan las mismas variables, esto permite trabajar con ciclos y servirá para
cualquier cantidad de empleados.
Leer CODE
Mientras ( CODE <> 9999) Hacer
Leer NHT
Leer VALH
Leer DESC
SUELT <- NHT * VALH
DESCUENTO <- SUELT * DESC/100
SUELN <- SUELT – DESCUENTO
Escribir “ Código Empleado “, CODE, “ Sueldo Neto “, SUELN
SUMS <- SUMS + SUELN
SUMD <- SUMD + DESCUENTO
Leer CODE
Fin mientras
Según el enfoque cualitativo, primero se lee el código ( Leer CODE) antes de ciclo, si el registro es
válido, entra al ciclo y lee los demás campos del registro (NHT,VALH, DESC ).
La última instrucción del ciclo es leer nuevamente el codigo del empleado unicamente (Leer
CODE), así, para el ultimo registro que es 9999, solo se leería este campo, y cuando se evalue en la
condición el ciclo va a terminar.
Algoritmo completo
Inicio
SUMS <- 0
SUMD <- 0
Leer CODE
Mientras ( CODE <> 999) Hacer
Leer NHT
Leer VALH
Leer DESC
SUELT <- NHT * VALH
DESCUENTO <- SUELT * DESC/100
SUELN <- SUELT – DESCUENTO
Escribir “ Código Empleado “, CODE, “ Sueldo Neto “, SUELN
SUMS <- SUMS + SUELN
SUMD <- SUMD + DESCUENTO
Leer CODE
Fin mientras
Escribir “ TOTAL SUELDO EMPLEADOS “, SUMS
Escribir “ TOTAL DESCUENTOS “, SUMD
Fin
Según lo anterior:
CODE es el campo centinela y 999 es el valor centinela, esto indica que al llegar este valor el ciclo
termina y por lo tanto la llegada de más datos de empleados.
El anterior ejercicio, no me plantea la cantidad de datos, pero si me establece que los números son
positivos, por lo que se puede tener la condición del ciclo de entrada de datos, mientras el número
de entrada sea positivo.
Esto quiere decir que los datos van a llegar hasta que el dato de entrada sea negativo.
Numeros de entrada 3 8 5 10 30 7 -5
3 Si Si Si Si Si
NRO
No Si No Si SP No
SP SP 48
8 18 CP
CP CP 3
1 2 NRO
8 5 10 30 -5
SP CP PROMP
PROMP 48 / 3 = 16
PROMP
Promedio pares = 16
Si Si Si Si Si Si
NRO // Entrada
NRO// Decision NRO// Decision NRO// Decision NRO// Decision NRO// Decision NRO// Decision
3
No Si No Si Si
SP SP SP No
8 18 48
CP CP CP
1 2 3
SP CP PROMP
PROMP 48 / 3 = 16
PROMP
Promedio pares = 16
El modelo anterior presenta la pregunta ¿NRO>0?, lo que se entiende que por cada iteración se
hace la pregunta
Definición de variables
NRO :Campo numérico para la entrada de todos los datos. Entero
SP :Acumulador de los números pares. Entero
CP :Contador de números pares. Entero
PROMP :Promedio de los números pares. Real
Inicio
SP <- 0
CP <- 0
Leer NRO
Mientras ( NRO > 0 ) Hacer
Si ( NRO mod 2 = 0) Entonces
SP <- SP+NRO
CP <- CP + 1
Fin si
Leer NRO
Fin mientras
Si ( CP > 0 ) Entonces
PROMP <- SP/CP
Escribir “Promedio Pares = “, PROMP
Sino
Escribir “No hay numeros pares “
Fin si
Fin
Ejercicio ciclo
Concepto: Rompimiento de control
Uno de los conceptos que tienen gran aplicabilidad dentro de la computación, es el agrupamiento
de información y la toma de decisiones por cada grupo de datos. Esto obliga a que la información
esté agrupada por uno o varios campos.
Ejemplo 1
Un ejemplo claro es un directorio telefónico que está agrupado por apellido y dentro de apellido,
por nombres.
En el directorio vamos a encontrar que por un mismo apellido hay varias repeticiones y dentro de
estos apellidos van a existir varios usuarios con nombres repetidos, este orden facilita el buscar un
número telefónico.
Ejemplo. 2
En una empresa X se puede tener varios departamentos (contabilidad, informática, producción,
ventas, entre otros), identificados por un codigoDepartamento, y en cada departamento varios
empleados. Si la información de los empleados está agrupada por departamentos, se podría
determinar que pasa con cada departamento.
- Cuantos empleados tiene cada departamento
- Que departamento es el que más pagó por nómina
- Que departamento es el que más gasta.
Entre otros.
Ejemplo
La siguiente cantidad de números viene agrupada de la siguiente forma.
3 3 3 3 3 5 5 5 7 7 7 7-5
Aquí se presentan tres rompimientos de control, cuando se termina los 3 y comienza el 5., y
cuando termina el 5 y comienza el 7 y cuando termina el 7 y llega el fin de datos que es -5
Ciclo externo . Controla la entrada de los datos y lo hace con registro centinela
Ciclo interno. Controla el rompimiento de control
Los dos ciclos van a trabajar con un campo centinela, como se había trabajado anteriormente.
Para el ciclo interno, se debe trabajar con un Campo Centinela auxiliar que va a controlar el valor
a repetir dentro del grupo. Esto se especifica en forma genérica de la siguiente forma:
Leer CampoCentinela
Mientras ( CampoCentinela <> ValorCentinela) Hacer
Ejercicio
Se tiene una cantidad de datos numéricos con valores repetidos y agrupados, determinar cual es el
dato que se repite y las veces que lo hace. Los datos son positivos y termina con -5
Ejemplo
3 3 3 7 7 7 7 13 13 13 -5
Resultado 3 3 veces
7 4 veces
13 3 veces
Modelo con nombres
Ejemplo
Nro Nro Nro Nro Nro Nro
3 3 3 7 7 7 7 13 13 13 -5
Aux Aux Aux
1 2 3 1 2 3 4 1 2 3
Aux CG
Resultado 3 3 veces
Aux CG
7 4 veces
Aux CG
13 3 veces
De lo anterior se puede concluir que cada vez que termine un grupo se debe
Modelo mental con un dato a la vez
CG
Nro Nro 7 7 7 13 7
3
3 7 CG CG
3 4
El cuadro anterior muestra lo que se realiza en los dos ciclos, la pregunta Nro<>-5? es la del ciclo
externo y la pregunta Nro=Aux? controla el ciclo interno.
El valor de Aux, permanece constante controlando la permanencia en el grupo, hasta que en Nro
llegue la información del siguiente grupo o la terminación de los datos.
Las evaluaciones del ciclo externo se presentan cuando el ciclo interno termina.
Las actividades repintadas determinan las acciones que se realizan después de cada grupo.
Cuando llega el valor centinela -5 hace que se salga de los dos ciclos.
Dentro del ciclo interno se realiza la lectura de proximo valor por lo que el ciclo termina.
Definicion de variables
Algoritmo
Inicio
Leer Nro
SF<-0
Mientras (Nro > 0) Hacer
Aux <- Nro // En Aux se guarda el representante del grupo
CG <- 0
Mientras ( Nro = Aux ) Hacer // recorre el grupo
CG <- CG + 1
Leer Nro
Fin mientras
//Si DeterminarFibonacci(CG) = 0 Entonces
// SF<-SF+DeterminarFactorial(CG)
A<-0
B<-1
T<-0
Mientras T<CG hacer
T<-A+B
A<-B
B<-T
Fin Mientras
Si T=CG entonces
// Determinar factorial de CG
Ejemplo
3 3 3 7 7 7 7 13 13 13 -5
Resultado 3 3 veces
7 4 veces
13 3 veces
Resultado
Grupo de mayor repetidos 7 Cantidad de repetidos 4
Ejemplo
Nro
3 3 3 7 7 7 7 13 13 13 -5
Aux CG
Resultado 3 3 veces
Aux CG
7 4 veces
Aux CG
13 3 veces
Resultado DMY GMY
Grupo de mayor repetidos 7 Cantidad de repetidos 4
El comportamiento es el mismo anterior pero tiene una variación, despues de contar los
elementos de cada grupo y mostrarlo, hace la comparación de que grupo es el mayor. Para esto
utilizamos dos variables.
GMY lo iniciamos en 0, para que cambien con el contador del primer grupo que llegue
DMY lo iniciamos en -5, que es el valor centinela.
CG
Nro Nro 7 7 7 13 7
3
3 7 CG CG
3 4
Si Si Si
3 3 3
El resultado que va después del ciclo se lo realiza una vez termina el ciclo externo.
Entonces el algoritmo queda:
Definicion de variables
Inicio
Fin
Para esto se maneja un campo de memoria de tipo carácter o alfanumérico que va a recibir una
respuesta que puede ser ‘S’o ‘N’ y dependiendo de esta respuesta, se ejecuta o nó las acciones del
ciclo.
Este método es muy utilizado , si se quiere dejar la decisión de terminar al usuario, dependiendo
de una respuesta.
El siguiente grupo de instrucciones, es una propuesta genérica de lo que sería un ciclo controlado
por pregunta y respuesta.
Modelo mental
Definición de variables
Resp
A
B
C
Algoritmo TipoTriangulo
Escribir " Desea procesar trianguloa S/N"
Leer resp
mientras ( resp='s'|resp=’S’) Hacer
Leer a,b,c
Si (a=b) Entonces
Si (b=c) Entonces
Escribir " Triangulo equilatero "
SiNo
Escribir " Triangulo isosceles "
FinSi
SiNo
Si (a!=c) Entonces
Si (b!=c) Entonces
Escribir " Triangulo escaleno "
Sino
Escribir " Triangulo isosceles "
FinSi
Sino
Escribir " Triangulo isosceles "
FinSi
FinSi
Escribir " Desea procesar más triangulos (S/N) "
Leer resp
FinMientras
FinAlgoritmo