Está en la página 1de 98

FUNDAMENTOS DE PROGRAMACIÓN

DOCUMENTO MANEJO DE CICLOS


PROFESOR NELSON JARAMILLO ENRIQUEZ

Instrucciones de repetición o ciclo

Permiten repetir un conjunto de acciones un número condicionado de veces, donde la condición


es la que va a determinar las veces que se deben repetir las acciones. La condición es una
expresión lógica que va a tener como resultado verdadero o falso, en donde las acciones a repetir
se van a ejecutar siempre que la condición sea verdadera y van a dejar de ejecutarse si la
condición es falsa. La forma como se maneje la condición determina los tipos de ciclos existentes.

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

Mientras ( condición ) hacer

Acciones a repetir

Fin mientras

Diagrama de flujo en dfd


Diagram de flujo en PseInt

Donde condición es una expresión lógica, por lo que implica una pregunta y su resultado por
tanto es verdadero o falso.

Se lo entiende entonces, de la siguiente forma:

Mientras la condición sea verdadera Hacer las siguientes acciones


Acciones a repetir
Fin mientras

Si la condición es falsa no se ejecutarán las acciones

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.

Cómo se establece la condición que controla un ciclo.

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

Leer NUM // segundo dato


Si ( NUM mod 2 = 0)
Entonces
CP  CP +1
Fin si

Leer NUM // tercer dato


Si ( NUM mod 2 = 0)
Entonces
CP  CP +1
Fin si

Leer NUM // cuarto dato


Si ( NUM mod 2 = 0)
Entonces
CP  CP +1
Fin si

Escribir “Cantidad de pares “, CP


Fin

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

Escribir “Cantidad de pares “, CP


Fin

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.

Elemento a buscar en el modelo mental para implementar un ciclo mientras

- El ciclo mientras tiene los siguientes elementos


Condición de control
Bloque de instrucciones a repetir
Incluir acciones para que el ciclo no se vuelva infinito

- 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.

- Generalmente la definición del problema plantea la posibilidad de utilizar ciclos.

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

4 es par? 6 es par? 9 es par? 8 es par?


Si Si No Si
1 2 3
En la mente se presenta como está especificado aquí, en donde aparece una secuencia de 1 hasta
4, indicando que son solo 4 datos los que van a ser procesados

Colocar nombres y acciones que la soportan, del modelo queda:

Asignación Asignación Asignación Asignación


CD CD CD CD
1 2 3 4
Entrada Entrada Entrada Entrada
Num Num Num Num
4 6 9 8

Decisión Decisión Decisión Decisión


Num Num Num Num
4 es par? 6 es par? 9 es par? 8 es par?
Si Si No Si
Asignación Asignación Asignación
CP CP CP
1 2 3

CP
Cantidad de pares = 3 // Salida

Donde se obtienen las siguientes variables

CD :contador de números que entran


CP :contador de números pares
Num :Variable que recibe los datos a procesar

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

En programación se tiene que las acciones de asignación para CD Y CP corresponden a dos


contadores, ambos de 1 en 1 y generan en su variación secuencias con variaciones constantes.
Estas son:

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.

El modelo mental mas completo es el siguiente:

CD 0 CD CD+1 CD CD+1 CD CD+1 CD CD+1


CP 0 1 2 3 4

Leer Num Leer Num Leer Num Leer Num


4 6 9 8
Num mod 2=0? Num mod 2=0? Num mod 2=0? Num mod 2=0?
4 es par? 6 es par? 9 es par? 8 es par?
Si Si No Si
CPCP+1 CPCP+1 CPCP+1
1 2 3

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?

Esta condición debe ir al inicio acompañando a la palabra mientras

Mientras ( CD < 4 ) hacer

Bloque de instrucciones a repetir esta en el modelo mental y son:

CD CD + 1
Leer NUM
Si ( NUM mod 2 = 0)
Entonces
CP  CP +1
Fin si

Donde se tiene incluida la instrucción


CD  CD + 1
que garantiza que el ciclo no se vuelva infinito

El bloque total del ciclo mientras queda:


Mientras ( CD < 4 ) hacer
CD CD + 1
Leer NUM
Si ( NUM mod 2 = 0)
Entonces
CP  CP +1
Fin si
Fin mientras

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.

Ciclos controlados por un contador

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

Datos que van a entrar 10, 7, 8, 4, 5, 20

Respuesta cantidad de datos pares = 4

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

Y como es variable se debe leer

Leer CNE

Datos que van a entrar 10, 7, 8, 4, 5, 20

Donde CNE, sería la Cantidad de Números de Entrada

CD Y CP funcionan igual

La condición ahora del ciclo mientras sería:

CD<CNE?

El algoritmo en seudocódigo sería el siguiente:

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

Primer modelo mental

Cantidad de datos 6

Datos 3 10 12 20 5 15

Promedio múltiplos de 5 10+20+5+15 = 50 = 12,5


4 4
Este modelo indica que si se puede desarrollar el problema. Pero no es un modelo apropiado para
encontrar los elementos computacionales que se necesitan, ya que se está mirando todos los
datos a la vez, aspecto que no hace el modelo computacional.

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

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

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í.

La mente recibe la cantidad de datos que va a procesar


Por cada dato que va recibir realiza:
Cuenta el dato que va a recibir
Recibe el dato valido
Determina si el dato es múltiplo de 5
Si es múltiplo de cinco lo suma y lo cuenta
Después de leer los seis datos calcula el promedio con la suma y la cuenta
Muestra el promedio

Determinar variables y constante del modelo

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 :Cantidad de números: entero


CN :Contador de números : entero
NUM :Númerico, recibe todos los números : entero
S5 :Sumador de Múltiplos de 5 : entero
C5 :Contador de múltiplos de 5 : entero
PROM5 : Promedio de los múltiplos de 5 : Real
Determinación de acciones

CDN // entrada
Numero de datos 6

Asignació Asignación Asignación Asignación Asignación Asignación Asignación


n CN CN CN CN CN CN
CN 1 2 3 4 5 6
0
Entrada Entrada Entrada Entrada Entrada Entrada
NUM NUM NUM NUM NUM NUM
3 10 12 20 5 15
Decisión Decisión Decisión Decisión Decisión Decisión
NUM NUM NUM NUM NUM NUM
¿3 mul de 5? ¿10 mul de 5? ¿12 mul de ¿20 mul de ¿5 es mul de ¿15 mul de 5?
5? 5? 5?
No Si Si
No Si Si
Asignació Asignación Asignación
S5 Asignación Asignación S5
n
10 S5 S5 50
S5
30 35
0
Asignació Asignación Asignación
C5 Asignación Asignación C5
n
1 C5 C5 4
C5
2 3
0

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

Los contadores y acumuladores inician en 0


Para la decisión
Mentalmente se tiene
NUM
¿3 múltiplo de 5?

No es computacional esta se convierte en

¿NUM mod 5 = 0?

Entonces la instrucción de decisión completa queda

Si (NUM mod 5 =0)


Entonces
S5  S5 + NUM
C5  C5 + 1
Fin si

Modelo sin valores numéricos

Leer CDN

CN 0 CNCN+1 CNCN+1 CNCN+1 CNCN+1 CNCN+1 CNCN+1

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

El modelo anterior tiene solo acciones computacionales en donde

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

Mientras ( CN < CDN ) hacer


CN  CN+1
Leer NUM
Si (NUM mod 5 =0)
Entonces
S5  S5 + NUM
C5  C5 + NUM
Fin si
Fin mientras

Lo que está fuera del cuadro del modelo mental, son las acciones antes del ciclo y después del
ciclo

Antes del ciclo

Leer CDN
CN0
S50
C50

Los contadores y los acumuladores inician en 0

Después del ciclo

PROM5 <- S5/C5


Escribir "Promedio multiplos de 5 = ",PROM5

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

Anotación importante para la división.

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

PROM5  S5/C5 o sea 0 / 0 // en este caso el programa cancela

Para evitar esto se debe validar de la siguiente forma

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

Los algoritmos quedan:

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

El bloque resaltado, determina la validación para evitar división por cero.

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

Ejercicios planteados para ciclos


1. Sumar los números desde el 0 hasta un número dado
2. Sumar los números pares hasta un número dado
3. Hallar la tabla de multiplicar de un número dado

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.

Modelo mental inicial

Número dado 5

Suma 1+2+3+4+5 = 15
Respuesta Suma = 15

Esto demuestra que se entiende el objetivo pero no tiene características computacionales.

Para volverlo computacional se inicia con la regla de un dato a la vez

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

Regla. Colocar nombres y acciones

Nro // Entrada
Numero dado 5

Asignación Asignación Asignación Asignación Asignación


CON CON CON CON CON
1 2 3 4 5

Asignación Asignación Asignación Asignación Asignación


SUM SUM SUM SUM SUM
1 3 6 10 15

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:

Para CON CON CON +1


Para SUM
Sale del modelo mental, veamos para SUM en 15.
15 sale de la suma de 10 + 5 en donde 15 es SUM, 10 es SUM y 5 es CON, por lo que se tiene:

SUM SUM CON


15  10 + 5

Entonces la asignación de SUM es:

SUM  SUM + CON

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

El modelo entonces queda

Leer Nro
5

Asignación Asignación Asignación Asignación Asignación


CON 0 CONCON+1 CONCON+1 CONCON+1 CONCON+1 CONCON+1
1<- 0+1 2 3 4 5

Asignación Asignación Asignación Asignación Asignación


SUM0 SUMSUM+CON SUMSUM+CON SUMSUM+CON SUMSUM+CON SUMSUM+CON
1<- 0 + 1 3 6 10 15 <- 10 + 5

Escribir “Suma = “, SUM


15

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

CON < Nro donde Nro para el ejemplo es 5

Entonces el algoritmo queda:

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

Respuesta Suma de números pares hasta el 13 = 42

Con esto determinamos que el objetivo de la solución es claro, pero no es computacional.


Modelo mental con regla de un dato a la vez

Numero dado 13

2 4 6 8 10 12

2 6 12 20 30 42

Suma de pares menores que 13 = 42

Este es el planteamiento general de modelo mental que si es computacional. El análisis es el


mismo que se había planteado para el ejercicio anterior.
El modelo mental muestra una secuencia de 2, 4, 6, 8, 10, 12 que es un contador de dos en dos, y
cada valor par generado se lo suma.

Modelo general

Leer un valor limite


Generar los números pares desde el 2 hasta el valor límite // esto implica un ciclo
Cada valor generado sumarlo
Mostrar suma de valores pares

Modelo con nombres de variables

NRO
Numero dado 13

PAR PAR PAR PAR PAR PAR


2 4 6 8 10 12
SUMP SUMP SUMP SUMP SUMP SUMP
2 6 12 20 30 42

NRO SUMP
Suma de pares menores que 13 = 42

Determinación de los valores de variables (entrada, asignación).

Leer Nro PAR < NRO // condición control


13 12 < 13

Asignación Asignación Asignación Asignación Asignación Asignación


PAR 0 PARPAR+2 PARPAR+2 PARPAR+2 PARPAR+2 PARPAR+2 PARPAR+2
2 4 6 8 10 12

Asignación Asignación Asignación Asignación Asignación Asignación


SUMP SUMPSUMP+PA SUMPSUMP+PAR SUMPSUMP+PA SUMPSUMP+PAR SUMPSUMP+PA SUMPSUMP+PAR
0 R 6 R 20 <- 12 + 8 R 42
2 12 30

Escribir “Suma = “, SUM


15

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

Diagrama de flujo PsInt

La condición del ciclo es par<=nro-2

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

Otra solución posible es la siguiente:


Inicio
Leer Nro
PAR <- 2
SUMP <- 0
Mientras (PAR <= Nro ) hacer

SUMP <- SUMP + PAR


PAR <- PAR +2
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.

Ejercicio ciclo propuestos

Se tiene una cantidad de números dada, determinar:


1. La cantidad de números mayores que 10
2. La cantidad de números mayores que un numero dado
3. El promedio de los números que están entre los valores 20 y 50
4. El promedio de los números que están entre dos valores dados
5. El promedio de los números pares que están entre dos valores dados
6. El número mayor
7. El número menor
8. El numero mayor y menor

Cada ejercicio es independiente

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.

Para este ejercicio se deben tener claro el concepto de división exacta,


Un número divide exactamente a otro, cuando al hacer la división entera no hay residuo.
Concepto de residuo. Se trabaja con el operador mod para encontrar el residuo de una división.

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

Esto se pudo hacer porque el número es pequeño.

Que se hace mentalmente para llegar al 4

Se divide por todos los valores entre 1 y 6 y se pregunta si el residuo es 0, si es 0 se lo cuenta. Se


debe utilizar el operador mod para esto.

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

Esta es una forma de realizar un modelo mental.


En este modelo mental que se identifica.

6 que es el número dado


Secuencia del 1 al 6 que es un contador
Secuencia del 1 al 4 que es el contador de divisiones exactas y son variables

Modelo mental con Nombres de variables


NRO
Número dado 6

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

NRO Número dado entero


CN Contador de 1 en 1 que va hasta NRO
CD Contador de 1 en 1 cuenta las divisiones exactas

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

Cantidad de divisores exactos , CD


4
Modelo mental con acciones computacionales

Las variaciones de CN y CD dentro del ciclo van a ser:


CN  CN + 1
CD  CD + 1
Por fuera del ciclo
CN  0
CD  0
La condición que controla el ciclo va a ser CN < NRO

Leer Nro
6

CN  0 Asignación Asignación Asignación Asignación Asignación Asignación


CNCN+1 CNCN+1 CNCN+1 CNCN+1 CNCN+1 CNCN+1
1 2 3 4 5 6
CD  0 Decisión Decisión Decisión Decisión Decisión Decisión
Si (NRO MOD CN =0) Si (NRO MOD CN =0) Si (NRO MOD CN =0) Si (NRO MOD CN =0) Si (NRO MOD CN =0) Si (NRO MOD CN =0)
Entonces Entonces Entonces Entonces Entonces Entonces
CD  CD + 1 CD  CD + 1 CD  CD + 1 CD  CD + 1 CD  CD + 1 CD  CD + 1
Fin si Fin si Fin si Fin si Fin si Fin si

Cantidad de divisores exactos , CD // salida


4
Con lo anterior se tiene que el algoritmo resultante es:

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.

Conceptos que debe tener claro.


Número primo. Un número es primo si y solo si, es divisible exactamente por 1 y por el mismo.
División exacta. División entera con residuo 0, en computación para averiguar el residuo se utiliza
mod.

Con estos conceptos más los conceptos de las acciones, se puede dar un ejemplo

Número dado 7

Al 7 solo lo divide exactamente el 1 y el 7.

El 5 es primo
1 5

Por lo tanto es primo

Numero dado 6

Al 6 lo divide exactamente el 1, 2, 3 y 6 por lo tanto no es primo.

Esto es un ejemplo y cumple con el objetivo.

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.

Regla de un dato a la vez.


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

Este es el comportamiento mental paso a paso para el 7.


El 7 es primo porque solo hay 2 números que lo dividen exactamente, el 1 y 7.

Para el numero 6 se tiene el siguiente modelo

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

No es primo porque hay 4 valores que lo dividen exactamente.

Entonces para determinar si un dato es primo, se utiliza el ejercicio anterior, el de determinar la


cantidad de números que lo dividen exactamente.

Pasos genéricos

Leer número a evaluar


Hallar la cantidad de números que lo dividen exactamente
Si la cantidad de número es igual a 2 el número es primo
De lo contrario no es primo

Entonces todo el análisis realizado para el ejercicio anterior sirve para determinar si es primo

Leer Nro
6

CN  0 Asignación Asignación Asignación Asignación Asignación Asignación


CNCN+1 CNCN+1 CNCN+1 CNCN+1 CNCN+1 CNCN+1
1 2 3 4 5 6
CD  0 Decisión Decisión Decisión Decisión Decisión Decisión
Si (NRO MOD CN =0) Si (NRO MOD CN =0) Si (NRO MOD CN =0) Si (NRO MOD CN =0) Si (NRO MOD CN =0) Si (NRO MOD CN =0)
Entonces Entonces Entonces Entonces Entonces Entonces
CD  CD + 1 CD  CD + 1 CD  CD + 1 CD  CD + 1 CD  CD + 1 CD  CD + 1
Fin si Fin si Fin si Fin si Fin si Fin si

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

Determinar de una cantidad de números dada el promedio de los números primos


Determinar de una cantidad de números dada, el número mayor.
Determinar de una cantidad de números, el número menor
Determinar el mayor y el menor de una cantidad dada de números
Determinar el primo mayor y el primo menor
Determinar de una cantidad de números dada el primo mayor
Determinar de una cantidad de números dada el primo mayor y el primo menor
Determinar de una cantidad de números dada el factorial del primo mayor

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

Primer modelo mental

Cantidad de datos 5

Datos 7 20 30 15 10

Resultado Dato mayor = 30


Con este ejemplo se tiene claro lo que se busca, pero no es un modelo con características
computacionales.

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 1 7 que hace la mente?

Se guarda como el mayor. Esto porque es el primero.

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

¿15 > 30?


No
No hace nada

Dato 5 10
¿10>30?
No
No hace nada

Como ya no hay más datos, el mayor es 30

Visto de otra forma se tiene

Cantidad de datos 5

1 2 3 4 5

7 20 30 10 15

Mayor ¿20>7? ¿30>20? ¿10>30? ¿15>30?


7 Si Si No No
Mayor Mayor
20 30
Mayor 30

En este modelo se ve mejor lo que pasa.


Si el dato es el primero no se compara con nadie y es el mayor

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.

Modelo mental con nombres de variables y acciones

CD // Entrada
Cantidad de datos 5

Asignación Asignación Asignación Asignación Asignación


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
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
MAYOR MAYOR
20 30

Mayor 30

Definición de Variables

CD : Cantidad de Datos numérico entero


CON : Contador de datos de entrada entero
NRO : Número de entrada numérico entero
MAYOR: Número mayor de los datos numérico entero

Modelo con acciones computacionales y sin datos

Leer CD

Asignación Asignación Asignación Asignación Asignación


CON  1 CONCON+1 CONCON+1 CONCON+1 CONCON+1

Leer NRO Leer NRO Leer NRO Leer NRO Leer NRO

SI (NRO>MAYOR) SI (NRO>MAYOR) SI(NRO>MAYOR) SI (NRO>MAYOR)


MAYORNRO Entonces Entonces Entonces Entonces
MAYORNRO MAYORNRO MAYORNRO MAYORNRO
Fin si Fin si Fin si Fin si

Escribir “ Mayor “, MAYOR


De lo anterior se determina que lo que debe ir en el ciclo controlado por el contador CON son las
acciones a partir del segundo dato. El algoritmo resultante es el siguiente:

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:

SI ( NRO < MENOR )


Entonces
MENOR  NRO
Fin si

Que indica si el nuevo número que se lee es menor que el menor que se lleva, se lo cambia

Algoritmo para el menor

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

Otra forma del ejercicio

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

Si ( NRO < MENOR )


Entonces
MENOR <- NRO
Fin si
Fin mientras
Escribir “ Mayor = “, MAYOR
Escribir “ Menor = “, MENOR
Fin

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

Para 5 datos que son 7,20,30,10,15 donde el mayor es 30

Paso a paso necesita hacer la pregunta de si es el primero

Cantidad de datos 5

1 2 3 4 5

7 20 30 10 15

¿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
Mayor ¿20>7? ¿30>20? ¿10>30? ¿15>30?
7 Si Si No No
Mayor Mayor
20 30

Mayor 30

Modelo con variables y acciones

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

Diagrama de flujo PsInt


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
MENOR <- NRO
Sino // ya no es el primero entra a comparar
Si ( NRO > MAYOR )
Entonces
MAYOR <- NRO
Fin si
Si ( NRO < MENOR )
Entonces
MENOR <- NRO
Fin si
Fin si
Fin mientras
Escribir " Mayor = ", MAYOR
Escribir " Menro = ", MENOR
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

MAYOR 0 si los datos son positivos


y
MENOR  32767
Si el máximo valor que puede entrar es 32767
Esto garantiza que tanto el mayor como el menor, con la primera comparación cambien.

El algoritmo para el mayor queda:

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

Ciclo controlado por un contador decreciente contador decreciente.

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.

El siguiente ejercicio es un ejemplo de un contador decreciente.

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

Respuesta Factorial de 5 = 120

Nuevamente este es un modelo que no tiene características computacionales. Las características


se las establece con la regla de un dato a la vez. Pero si podemos apreciar que hay un contador
que va decrementándose ( 5 ,4,3,2,1)

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

5 20 60<-20*3 120<-60*2 120

Factorial de 5 = 120

Adición de nombres y acciones

NRO // Entrada
Cantidad de datos 5

Asignación Asignación Asignación Asignación Asignación Asignación


CON<- CON CON CON CON CON
NRO+1 5<-6-1 4<-5-1 3 2 1
6 <- 5 +1
Asignación Asignación Asignación Asignación Asignación Asignación
FAC FAC<-FAC*CON FAC FAC FAC<-FAC * FAC
1 5 <- 1 * 5 20 60 CON 120
120<-60*2

FAC
Factorial de 5 = 120

Definición de las acciones de asignación

CON es un contador decreciente de 1 en 1


CON CON-1

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

Valores iniciales de FAC y CON

CON  6
CON  NRO + 1 // para que la primera vez de 5

FAC  1 // para que la multiplicación no de 0

Condición del ciclo controlado por el contador CON


CON > 1

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

Ahora el ejercicio anterior se lo pudo haber realizado de la siguiente forma:

5! = 5*4*3*2*1 = 1*2*3*4*5 = 120

Esto porque la multiplicación es conmutativa.

El algoritmo entonces depende como se lo analiza. Si se analiza de la segunda forma se tiene, un


contador ascendente y no decreciente como el anterior. Con cualquier método se puede realizar
lo importante, es seguir lo analizado.

NRO // Entrada
Cantidad de datos 5

Asignación Asignación Asignación Asignación Asignación Asignación


CON0 CONCON+1 CONCON+1 CONCON+1 CONCON+1 CONCON+1
0 1 2 3 4 5
Asignación Asignación Asignación Asignación Asignación Asignación
FAC1 FACFAC*CON FACFAC*CON FACFAC*CON FACFAC*CON FACFAC*CON
1 1 2 6 24 120

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

Los siguientes ejercicios tienen ciclos anidados.

Se habla de ciclos anidados cuando dentro de un ciclo hay otro ciclo en sus instrucciones a repetir.

Formato general

Mientras ( Condicion 1) hacer


Acciones ciclo 1
Mientras ( Condición 2 ) hacer
Acciones ciclo 2
Mientras ( Condición 3 ) hacer
Acciones ciclo 3
.
.
Fin mientras // ciclo 3
Fin mientras // ciclo 2
Fin mientras // ciclo 1

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 propuestos, donde se necesitan ciclos anidados

- Hallar las tablas de multiplicar del 1 al 10


- Se tiene una cantidad de números dada, determinar cuantos números primos hay en esos
números.
- Se tiene una cantidad de números dada, determinar el promedio de los números primos que
están en esos números.
- Se tiene una cantidad de números dada, determinar el primo menor de los números primos.
- Se tiene una cantidad de números dada, determinar la suma de los factoriales de los números
pares.

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.

Modelo mental inicial

Cantidad de números 6

Números 8 7 2 4 13 17

Promedio 7+2+13+17 = 39 = 9.75


4 4
Resultado Promedio Primos = 9.75

Modelo mental con características computacionales. Un dato a la vez

Cantidad de Números 6

1 2 3 4 5 6

8 7 2 4 13 17

¿8 es primo? ¿7 es primo? ¿2 es primo? ¿4 es primo? ¿13 es primo? ¿17 es primo?


No Si Si No Si Si
7 9 22 39
1 2 3 4

Promedio primos = 39 = 12,25


4
Promedio = 12,25

Modelo con Nombres de variables y tipo de acción

CNUM // Entrada
Cantidad de Números 6

Asignación Asignación Asignación Asignación Asignación Asignación Asignación


CON CON CON CON CON CON CON
0 1 2 3 4 5 6
Entrada Entrada Entrada Entrada Entrada Entrada
NRO NRO NRO NRO NRO NRO
8 7 2 4 13 17

NRO NRO NRO NRO NRO NRO


¿8 es primo? ¿7 es primo? ¿7 es primo? ¿4 es primo? ¿7 es primo? ¿7 es primo?
No Si Si No Si Si
Asignación Asignación Asignación Asignación Asignación
SUMP SUMP SUMP SUMP SUMP
0 7 9 22 39
Asignación Asignación Asignación Asignación Asignación
CONP CONP CONP CONP CONP
0 1 2 3 4

SUMP PROMP // Asignación


Promedio primos = 39 = 9,75
CONP
4
PROMP //Salida
Promedio = 9,75

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

Las acciones a repetirse entonces son las siguientes:

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

CNUM : Cantidad de Números a evaluar


CON : Contador de Números a entrar
NRO : variable que recibe todos los números
SUMP : Variable acumulador de números primos
CONP : Variable contador de números primos
CN : Contador utilizado para determinar un número primo
CD : Contador de divisores exactos para determinar si es primo
PROMP : Promedio de primos

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

Determinar si un número dado es múltiplo de 5 sin utilizar el operador residuo

Modelo mental

23 mod 5 = 3

23
No es múltiplo de 5

El objetivo no es utilizar la división y hallar el residuo.


Solución moverse en todos los múltiplos de 5 hasta llegar al número evaluado y preguntar si el
último número generado es el buscado.

Para el 23 sería entonces:

5 10 15 20 25

¿23 = 25?
No

El 23 no es múltiplo de 5

Para el numero 30 se tendría

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

Modelo detallado con variables

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

Num :Campo numérico recibe valor a evaluar


C5 :Campo numérico contador genera la secuencia de 5 en 5

Definición de valores y acciones


Num // entrada
Numero dado 23

C5 Asignación Asignación Asignación Asignación Asignación


0 C5 C5 C5 C5 C5
5 10 25 20 25
Num C5
¿23 = 25? // Decisión
No
23 no es múltiplo de 5

La secuencia de 5, se genera con un ciclo y la condición de control es ¿C5<Num?

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

Se lo hace también con ciclo y su condición ¿C5>0?

Cuando sea igual a 5 o menor que 5 se termina el ciclo

Las variables son las mismas, cambia es la asignación de C5

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

Generar la serie de Fibonacci para n términos.

La serie de Fibonacci tiene el siguiente comportamiento. Inicia con 0 y 1 y el siguiente término es


la suma de los dos anteriores.

0 1 1 2 3 5 8 13 21 34 55 . 89 144 . 233 377

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

0 1 1<-0+1 2<-1+1 3<-1+2 5<-2+3 8 13 21 34

El anterior modelo indica lo que pasa mentalmente. Con nombres queda:

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

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
A<-1 A<-1 A<-2 A<-3 A<-5 A<-8 A<-13 A<-21
B<-1 B<-2 B<-3 B<-5 B<-8 B<-13 B<-21 B<-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

Entonces las acciones que se repiten son:


C<-C+1
T<-A+B
Escribir T
A<-B
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.

Computacionalmente se hace el siguiente análisis.

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

La condición del ciclo que se va a generar queda

¿T<NRO?

Después del ciclo se pregunta

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

Diagrama de flujo en PseInt


Los ejercicios realizados hasta el momento, utilizaron ciclos controlados por contadores o por
variables que tenían variaciones con resultados aritméticos, estos ciclos tienen un esquema
cuantitativo y generalmente se los utiliza cuando se conoce el número de veces que se va a repetir
el conjunto de acciones.

Ejercicios

Se tiene una cantidad de números dados.


- Determinar el mayor y el menor de los número primos
- Determinar el mayor de los fibonacci
- Determinar el mayor y el menor de los fibonacci.
- Determinar el promedio de los número fibonacci.
- Determinar el factorial de la diferencia del primo mayor con el primo menor
- Determinar si la diferencia del primo mayor con el fibonacci menor es un numero fibonacci

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

Leer cantidad de datos


Por cada dato de entrada // implica un ciclo
Determinar si es fibonacci
Si es fibonacci
Sumarlo y contarlo
Hallar el promedio con la suma y contador

Elementos claros
Entrada de varios datos
Sumador
Contador
Determinar si es fibonacci
Promedio

CDN : Cantidad de datos


CON : Contador de los datos que van a entrar
NRO : Variable donde van a entrar todos los datos
SUMF : sumador de los numeros fibonacci
CONF : Contador de los números fibonacci
A : para generar serie fibonacci
B : para generar serie fibonacci
T : para generar serie fibonacci
PROMF : promedio de fibonacci

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

Este es un ejemplo de lo que se pide, pero no es computacional.


Se debe tener presente en este ejercicio, que se va a obtener el menor de los primos de una
cantidad de datos, donde todos no son primos, por lo que se debe preguntar por cada dato leido,
si el dato es primo.
Ahora si el dato es primo debo tener en cuenta que si éste es el primero, para hacerlo hasta ese
momento el menor de los primos, como se lo explicó en ejercicios anteriores.
Si el primo no es el primero, significa que ya hay un primo menor con el que se puede comparar.

Como controlar que sea el primero

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

¿4 es primo? ¿8 es primo? ¿7 es primo? ¿3 es primo? ¿13 es primo? ¿9 es primo?


No No Si Si Si No
¿es el primero? ¿3 es el ¿13 es el
Si primero? primero?
Menor
7 No No
¿3<7? ¿13<3?
Si No
Menor
3
Resultado

Primo menor = 3

Identificación de variables y acciones


CDN
Cantidad de numeros 6
CN // asignación CN // asignación CN // asignación CN // asignación CN // asignación CN // asignación
1 2 3 4 5 6
NRO // Entrada NRO // Entrada NRO // Entrada NRO // Entrada NRO // Entrada NRO // Entrada
4 8 7 3 13 9

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

El número es primo si la condición anterior es verdadera y pasa a evaluar la siguiente pregunta

¿NRO es el primero?
Si
Menor
7

Como se dijo anteriormente se lo maneja con un contador CP que va a iniciar en 0 y se va a


incrementar cada vez que llegue un primo. Se sabrá que es el primero, cuando después de
incrementarse, el contador CP valga 1.

La pregunta anterior y la definicion del menor se transforma en computacionalmente en:

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

Determinar el primo mayor y menor de una cantidad de números dada

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

Variable tipo bandera o switche


Ejercicio anterior con bandera
Ejercicio primo con bandera
Ejercicio de serie con conmutación
Rompimiento de control
Ciclos con esquema Cualitativo.

Variable tipo bandera o switche


La bandera es un campo de memoria que durante la ejecución de un programa almacena valores
que le permite determinar si el flujo de ejecución de un programa pasa por un conjunto de
acciones específicas, que le permita tomar decisiones y volver así más óptimo el programa.
Generalmente, esta variable toma dos valores 0 o 1, donde cada valor tiene un significado
específico. Esta bandera debe estar asociado con una condición que indica si es 0 o 1, y tomar las
acciones respectivas.

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

Como se dijo anteriormente se lo maneja con un contador CP que va a iniciar en 0 y se va a


incrementar cada vez que llegue un primo. Se sabrá que es el primero, cuando después de
incrementarse, el contador CP valga 1.

La pregunta anterior y la definicion del menor se transforma en computacionalmente en:

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

Para manejar este comportamiento con bandera se utiliza la bandera B inicialmente en 0

Si ( B = 0 ) Entonces // Indica que es el primero


Menor <- NRO
B<-1 // Cambia la bandera para que no vuelva a pasar por este camino
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

Con la variable B se garantiza que si vale 0, es el primero, si vale 1, ya no es el primero, y se la


trabaja de la forma como se especifica en el ejercicio, lo que se encuentra con otro color indica
donde se colocan las acciones. Cuando se da el valor de 1 obliga a que el flujo del programa se
vaya por la otra situación, que es la de comparar el NRO con el valor.

La variable tipo bandera permite optimizar algunos algoritmos, sobretodo en el proceso de


ejecución. El siguiente ejercicio permite optimizar el algoritmo de un número primo.

Ejercicio ciclo bandera 2


Determinar si un número dado es primo utilizando bandera.

El algoritmo para determinar si un valor es primo, se lo realiza utilizando el contador de divisores


exactos, el cual se avaluaba después del ciclo, para determinar si era o no primo.
El análisis fue el siguiente:

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

Este es el comportamiento mental paso a paso para el 7.


El 7 es primo porque solo hay 2 números que lo dividen exactamente, el 1 y 7.

Y el algoritmo en seudocódigo fue el siguiente:

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

Para implementarlo con bandera. Se va realizar lo siguiente.

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

Para el numero 6 se tiene el siguiente modelo

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.

El algoritmo elimina el contador de divisores y se incluye la variable bandera B, y queda así:

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

Lo que está en otro color es lo que se modifica para determinar si es primo.

Condición compuesta para controlar el ciclo.

Cuando se utiliza variables como banderas, se acostumbra a utilizar condiciones compuestas


controlando un ciclo.

El algoritmo anterior recorre todo el ciclo especificado, lo cual, no es necesario si la variable B


cambia a 1, porque, con un solo valor que lo divida exactamente, el número ya no es primo.

Si se requiere que el ciclo termine inmediatamente se encuentre un valor que lo divida


exactamente, se debe incluir dentro de la condición que controla el ciclo, la evaluación de la
bandera de la siguiente forma:
B<-0
Mientras ( CN < NRO-1 and B=0 ) hacer
Donde CN < NRO-1 and B=0 es una condición compuesta.

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).

En la primera situación el ciclo termina totalmente. En la segunda el ciclo no termina


completamente.

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

Es importante tener en cuenta lo anterior cuando se trabaja con condiciones compuestas.

Manejo de banderas para conmutar procesos.

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

La generación del número 9 se obtiene sumando 5 al 4, la generación de 7 se logra restando 2 al 9


y asi sucesivamente.

Entonces se tiene:

4 (+5) 9 (-2) 7(+5) 12(-2) 10(+5) 15(-2) 13(+5) 18

Si se va a trabajar con una variable bandera SW se tiene lo siguiente:

Si SW es igual a 0 se incrementa 5 al termino que se está trabajando.


Si SW es igual a 1 se resta 2 al termino que se está trabajando

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.

4 (+5) 9 (-2) 7(+5) 12(-2) 10(+5) 15(-2) 13(+5) 18

Análisis con un dato a la vez


CT
Cantidad de términos 9

1 2 3 4 5 7 8 9

0 sw=0? sw=0? sw=0? sw=0? sw=0? sw=0? sw=0?

4 si no si no si no si

9 7 12 10 15 13 18

Con nombres de variables queda:

CT
Cantidad de términos 9

NT NT NT NT NT NT NT NT

1 2 3 4 5 7 8 9

SW SW=0? SW=0? SW=0? SW=1? SW=0? SW=0? SW=0?

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

NT NT<-NT+1 NT<-NT+1 NT<-NT+1 NT<-NT+1 NT<-NT+1 NT<-NT+1 NT<-NT+1


1 2 3 4 5 6 7 8

SW Si (SW=0) Si (SW=0) Si (SW=0) Si (SW=0) Si (SW=0) Si (SW=0) Si (SW=0)

0 Si Si Si Si Si Si Si

T T<-T+5 T<-T+2 T<-T+5 T<-T-2 T<-T+5 T<-T-2 T<-T+5

4 9 7 12 10 15 13 18

SW <- 1 SW <- 0 SW <- 1 SW <- 0 SW <- 1 SW <- 0 SW <- 1

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

- Realizar un algoritmo que permita determinar si un número dado pertenece a la siguiete


secuencia

4 9 7 12 10 15 13 18

Ejercicio ciclos de aplicación

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

Por cada empleado:

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

Por todos los empleados

Total sueldos pagados


Total descuentos

Ejemplo

Numero de empleados 2
_________________________________________________
Número empleado 1

Codigo1 1
Numero de Horas 20
Valor de hora 30000
Descuento 10%

Total sueldo 20*30000=600000


Descuento 600000*10/100 = 60000

Sueldo Neto 600000-60000=540000

Salida Codigo 1 Sueldo Neto 540000

Suma neto 540000


Suma Descuento 60000
_________________________________________________
Numero empleado 2

Codigo2 2
Numero de Horas 30
Valor hora 50000
Descuento 15%

Total Sueldo 30*50000=1500000


Descuento 1500000*15/100 = 225000
Sueldo Neto 1500000-225000 = 1275000

Salida Codigo 2 Sueldo Neto 1275000

Suma neto 1775000


Suma Descuento 285000
_________________________________________________

Resultado Total sueldo empleados 1775000


Total descuentos 285000

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 con nombres de variables

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%

NHT VALH SUELT


Total Sueldo 30 * 50000 = 1500000
SUELT PDESC DESCUENTO
Descuento 1500000 * 15/100 = 225000
SUELT DESCUENTO SUELN
Sueldo Neto 1500000 - 225000 = 1275000
CODE SUELT
Resultado Codigo E002 Sueldo Neto 1275000
SUMS
Suma neto 1775000
SUMD
Suma Descuento 285000

_________________________________________________________________

SUMS
Resultado Total sueldo empleados 1775000
SUMD
Total descuentos 285000

El ejemplo anterior tiene 2 registros.

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

La información de los empleados son por entrada


Todos los calculos son por asignación
Sumadores por asignación, teniendo en cuenta en iniciarlos en 0 antes de ciclo.

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

Sueldo neto por cada empleado


Con Código y sueldo Neto.

Total valor pagado (sueldos netos)


Total de descuentos

Empleado que más gana (codigo y valor pagado)


Empleado que menos gana ( codigo y valor pagado)
Promedio de sueldos
Promedio de descuentos

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

Esquema cualitativo con respecto a los ciclos.

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.

Control de un ciclo con esquema cualitativo.

Este esquema se presenta generalmente, cuando no se conoce el número de veces que se va a


repetir un conjunto de instrucciones dentro de un ciclo.
Como no se conoce la cantidad de datos que van a llegar, entonces en la entrada de datos se
deben especificar algunas características que determine o demarque hasta donde se debe entrar
los datos. Generalmente la información que demarca hasta donde se debe llegar es una
información inválida para ser procesada.

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

Son campos relacionados que me va a manejar información específica de un empleado en


particular.

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:

Registro centinela. Para el procesamiento de varios registros donde no se conoce exactamente


cuantos vienen, se maneja este concepto y se determina como registro centinela al último
registro que va a entrar y no tiene información válida. Cuando este registro llega indica de que no
hay más datos o no hay más registros para ser procesados.

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.

Ejemplo. Registro empleado


Registro centinela: Registro que tiene en el campo código empleado 9999

Campo centinela: Código empleado


Valor centinela: 9999

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.

Entrada de registros con valor centinela

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.

Leer Campo centinela del registro


Mientras ( Campo Centinela <> del Valor Centinela) hacer
Leer Siguientes campos de registro

Trabajar con el registro

Leer Campo Centinela siguiente registro


Fin mientras

Con el empleado sería lo siguiente:


Campo centinela CodigoEmpleado
Valor centinela 9999
Esto significa que ningún empleado debe tener asignado el codigo 9999 y que cuando llegue este
valor centinela significa el fin de los registros, por lo tanto, no deben leerse más campos.

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

Acciones con el registro empleado.

Leer CodigoEmpleado
Fin mientras

Leer CODE
Mientras ( CODE <> 9999) Hacer
Leer NHT,VHT,DES

Acciones con el registro empleado.

Leer CODE
Fin mientras

Ejercicio ciclos cualitativos


Realizar el calculo de los sueldos de los empleados que tienen registros con la siguiente
información

Código empleado
Numero de horas trabajadas
Valor de la hora
Porcentaje de descuento

El último registro tiene en su campo código 999

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

Acumulación del sueldo neto


Acumulación del descuento

Resultados

Sueldo neto por cada empleado

Código Empleado

Total sueldos pagados


Total descuentos

Ejemplo
Codigo1 E001
Numero de Horas 20
Valor de hora 300000
Descuento 10%

Total sueldo 20*30000=600000


Descuento 6000000*10/100 = 60000

Sueldo Neto 6000000-60000=540000

Salida Codigo E001 Sueldo Neto 540000

Suma neto 540000


Suma Descuento 60000

Codigo2 E002
Numero de Horas 30
Valor hora 50000
Descuento 15%

Total Sueldo 30*50000=1500000


Descuento 1500000*15/100 = 225000

Sueldo Neto 1500000-225000 = 1275000


Salida Codigo E002 Sueldo Neto 1275000

Suma neto 1775000


Suma Descuento 285000

Codigo 3 9999 // Fin de los empleados

Resultado Total sueldo empleados 1775000


Total descuentos 285000

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 con nombres de variables

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%

NHT VALH SUELT


Total Sueldo 30 * 50000 = 1500000
SUELT PDESC DESCUENTO
Descuento 1500000 * 15/100 = 225000
SUELT DESCUENTO SUELN
Sueldo Neto 1500000 - 225000 = 1275000
CODE SUELT
Salida Codigo E002 Sueldo Neto 1275000
SUMS
Suma neto 1775000
SUMD
Suma Descuento 285000

_________________________________________________________________

Codigo3 9999 // Fin de los empleados

__________________________________________________________________

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

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

Los registros de los empleados son por entrada


Todos los calculos son por asignación
Sumadores por asignación, teniendo en cuenta en iniciarlos en 0 antes de ciclo.

Por cada empleado, se utilizan las mismas variables, esto permite trabajar con ciclos y servirá para
cualquier cantidad de empleados.

Manejo del ciclo con valor centinela

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.

Ejercicio ciclo esquema cualitativo


Realizar un algoritmo que determine el promedio de los números pares positivos. Terminar
cuando llegue un número negativo.

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

Promedio pares 8 + 10 +30 = 48 = 16


3 3

Con un dato a la vez y con nombres

NRO ¿3>0? ¿8>0? ¿5>0? ¿10>0? ¿30>0? ¿7>0?


Si

3 Si Si Si Si Si

NRO

NRO NRO NRO NRO 30 es par? NRO

3 es par? 8 es par? 5 es par? 10 es par? Si 7 es par?

No Si No Si SP No

SP SP 48

8 18 CP

CP CP 3

1 2 NRO

NRO NRO NRO NRO 7 NRO

8 5 10 30 -5

SP CP PROMP
PROMP 48 / 3 = 16
PROMP
Promedio pares = 16

El tratamiento de esta información tiene el mismo comportamiento que el ejercicio anterior,


donde el campo NRO va a ser el campo centinela, y el valor centinela sera cualquier valor negativo,
en el ejemplo es el -5
Como en el ejercicio anterior lo primero que se hace es leer antes de ciclo el primer valor para
NRO que en el ejemplo vale 3 que es un valor positivo por lo que el valor entra al ciclo a evaluarse
si es par.
Ahora, si el primer valor es negativo, no va a entrar al ciclo y no habrá promedio.
Con un dato a la vez y con nombres

¿NRO>0? ¿NRO>0? ¿NRO>0? ¿NRO>0? ¿NRO>0? ¿NRO>0?

Si Si Si Si Si Si
NRO // Entrada

NRO// Decision NRO// Decision NRO// Decision NRO// Decision NRO// Decision NRO// Decision
3

3 es par? 8 es par? 5 es par? 10 es par? 30 es par? 7 es par?

No Si No Si Si
SP SP SP No

8 18 48

CP CP CP

1 2 3

NRO// Entrada NRO// Entrada NRO// Entrada


NRO// Entrada
NRO// Entrada NRO// Entrada
5 30 7
-5
8 10

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.

La agrupación de esta información tiene las siguientes características:


- No se conoce la cantidad de registros. Esto implica que debe manejarse con registro centinela
y por tanto un campo centinela y un valor centinela.
- No se conoce la cantidad de elementos por grupo. Esto implica que se debe controlar el fin de
un grupo, y el comienzo de otro, esto es lo que se denomina Rompimiento de Control.

Rompimiento de Control. Se presenta cuando la información se encuentra agrupada, y se habla de


un rompimiento de control cuando termina la información de un grupo e inicia otro

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

Como se trabaja el rompimiento de control


El rompimiento de control puede tener diferentes niveles, la siguiente explicación muestra como
se debe trabajar el rompimiento de control de un un nivel.

Para un nivel de rompimiento de control se lo trabaja con dos ciclos anidados.

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

CentinelaAux <- CampoCentinela


Mientras ( CampoCentinela = CentinelaAux ) Hacer
Leer Siguientes campos del registro
Trabajar con el registro
Leer CampoCentinela
Fin mientras

Acciones a realizar con el grupo


Fin mientras

El campo CentinelaAux va a guardar el valor representativo del grupo el cual se va comparando


con el campoCentinela que va avanzando en el grupo, y mientras sean iguales estarán dentro del
grupo. Cuando sean diferentes significa que el grupo acaba o es el fin de los datos. El siguiente
ejercicio clarifica este concepto.

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

Nro Nro <> Nro Nro <> Nro<


-5? <> -5? -5? > -5
3
3<>5? 7<>5? 13<>5 -
? 5<>5?
Si Si
Si No
Aux Aux
Aux
3 7
13
Nro= Nro=
Nro=
Aux? Aux? Nro= Nro= Nro=
Aux?
3=3? 7=7 Aux? Aux? Aux?
Nro= Nro= Nro= Nro= Nro= Nro= Nro=
13=13
Si Si 13=13 13=13 -5=13
Aux? Aux? Aux? Aux? Aux? Aux? Aux?
Si
CG 1 Si Si No
3=3? 3=3? 7=3? 7=7 7=7 7=7 13=7
1
1 Nro 2 3 Escribir
Si Si No Si Si Si No
Nro
Nro 7 Nro Nro Aux
CG CG Escribir 2 3 4 Escribir
13
3 13 -5 13
2 3 Aux Nro Nro Nro Aux

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

Nro : Campo numérico entero para la entrada de los enteros


Aux : Campo numérico entero para almacenar representante del grupo
CG : Campo numérico entero, contador de elementos de cada grupo

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

Escribir “ Grupo “, Aux, “ “, CG, “ Veces “


Fin Mientras
Fin

Ejercicio rompimiento de control 2


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, y el grupo que más datos repetidos tiene. 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

Resultado
Grupo de mayor repetidos 7 Cantidad de repetidos 4

Modelo con nombres

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 Contador grupo mayor


DMY almacena al representante del grupo

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.

Nro Nro <> Nro Nro <> Nro<


-5? <> -5? -5? > -5
3
3<>5? 7<>5? 13<>5 -
? 5<>5?
Si Si
Si No
GMY
Aux Aux
Aux
0
3 7
13
Nro= Nro=
Nro=
DMY Aux? Aux? Nro= Nro= Nro=
Aux?
-5 3=3? 7=7 Aux? Aux? Aux?
Nro= Nro= Nro= Nro= Nro= Nro= Nro=
13=13
Si Si 13=13 13=13 -5=13
Aux? Aux? Aux? Aux? Aux? Aux? Aux?
Si
CG 1 Si Si No
3=3? 3=3? 7=3? 7=7 7=7 7=7 13=7
1
1 Nro 2 3 Escribir
Si Si No Si Si Si No
Nro
Nro 7 Nro Nro Aux
CG CG Escribir 2 3 4 Escribir
13
3 13 -5 13
2 3 Aux Nro Nro Nro Aux

CG
Nro Nro 7 7 7 13 7

3
3 7 CG CG

3 4

CG>GM CG>GM CG>GM


Y? Y? Y?

3>0? 3>0? 3>0?

Si Si Si

GMY<- GMY<- GMY<-

3 3 3

DMY<- DMY<- DMY<-


3 3 3
GMY DMY
Grupo de mayor repetidos 7 Cantidad de repetidos 4

El resultado que va después del ciclo se lo realiza una vez termina el ciclo externo.
Entonces el algoritmo queda:

Definicion de variables

Nro : Campo numérico entero para la entrada de los enteros


Aux : Campo numérico entero para almacenar representante del grupo
CG : Campo numérico entero, contador de elementos de cada grupo
GMY : Campo numérico entero, almacena el contador mayor de cada grupo
DMY : Campo numérico entero, almacena el dato representante del mayor de cada grupo

Inicio

GMY <- 0 // Para garantizar que la primera vez cambie


DMY <- -5
Leer Nro
Mientras (Nro <> -5) 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
Escribir “ Grupo “, Aux, “ “, CG, “ Veces “
Si ( CG> GMY) Entonces
GMY <- CG
DMY <- Aux
Fin si
Fin Mientras
Si GMY > 0 Entonces
Escribir " Grupo con mas datos repetidos ", DMY
Escribir " Cantidad de veces que se repite ", GMY
SiNo
Escribir " no hay grupos"
FinSi

Fin

Manejo de ciclo con ciclos controlados con enfoque cualitativo, respuesta.

Dentro de la computación se acostrumbra a controlar ciclos preguntando al usuario si quiere


seguir procesando más datos, para lo cual se va a tener una respuesta positiva o una respuesta
negativa.
Si la respuesta es positiva se procesan datos dentro de un ciclo, de lo contrario sale de ciclo.

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.

Escribir “ Desea procesar datos ? ( S/N )”


Leer resp
Mientras ( resp=’S’ ) Hacer
Acciones dentro del ciclo
.
.
Escribir “ Desea procesar más datos ? (S/N) “
Leer resp
Fin mientras

Ejercicio. Ciclo cualitativo


Determinar si un conjunto de ternas (tres datos) de datos correspondientes a los tres lados de un
triángulo, es equilatero, isosceles o escaleno. La cantidad de ternas a procesar deben estar
controladas por el usuario.

Modelo mental

Desea procesar triángulos?


resp
Si
a b c
3 3 3
Respuesta
Triangulo es equilatero
Desea procesar mas triángulos?
resp
Si
a b c
3 5 7
Respuesta
Triángulo escaleno

Desea más triángulos


resp
No

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

También podría gustarte