Unidad 3 Estructura repetitiva Hasta el momento se han estudiado dos tipos de estructuras que sólo se ejecutan una sola vez (estructura secuencial, estructura de decisión lógica), en una gran cantidad de algoritmos, se necesita que un conjunto de instrucciones sea ejecutado un número de veces determinado o que se ejecuten hasta que cumplan una condición determinada, la estructura algorítmica que responde a este tipo de necesidades, es la estructura repetitiva (mientras). Estructura mientras (condición lógica) conjunto de instrucciones si la condición lógica es verdadera fin mientras Funcionamiento Cuando la condición lógica es verdadera se ejecutan las instrucciones que se encuentren entre mientras y fin mientras, el ciclo termina cuando la condición lógica a partir de la cual se esta controlando el ciclo se vuelve falsa. Y se continúa ejecutando las instrucciones que se encuentren después del fin mientras. Observación Cuando se emplea la estructura mientras, se crea un ciclo que se ejecuta un número determinado de veces, se debe garantizar que la variable o las variables con las que se este evaluando la condición lógica, en algún momento se vuelvan falsas. Esto asegura que el ciclo no se vuelve infinito y de esta forma se evita violar una de las condiciones necesarias, para que un determinado conjunto de instrucciones sea considerado algoritmo. Elementos empleados cuando se emplea la estructura mientras Contador En ocasiones es importante llevar un conteo del número de veces que un determinado suceso se presenta, el conteo se realiza con una variable que se va incrementando a medida que el ciclo se repite, el contador es una variable que aumenta o disminuye en un valor constante, cada vez que el ciclo se ejecuta. contador = contador + incremento contador = contador - incremento Módulo – Jorge Hernán Álvarez El incremento es un valor constante Observación Es importante inicializar el contador o los contadores cada vez que se requiera utilizar variables contador, esto con el fin de borrar el valor en memoria con el que aparece el contador al iniciar el ciclo. Ejemplo i=1 Acumulador La función principal del acumulador, es la de almacenar valores variables en ciclos repetitivos. acumulador = acumulador + expresión acumulador = acumulador – expresión Ejemplo 1 Elaborar un algoritmo que sume los primeros tres números naturales Datos de entrada : ninguno, porque los tres primeros números naturales los conoce el programador y son: 1 2 3 Datos de salida: la suma de los tres primeros números naturales. Variable suma: número, la suma de los números 1 + 2 +3 se almacenaran en la variables suma. Estrategia En éste algoritmo sólo hay que sumar los números 1+2+3 y el resultado mostrarlo en pantalla Inicio Definición de variables suma: número Algoritmo suma = 1+2+3 muestre: “el resultado de la suma es: “, suma fin_Inicio Módulo – Jorge Hernán Álvarez Ejemplo 2 Elaborar un algoritmo que sume los primeros cinco números naturales. Inicio Definición de variables suma: número Algoritmo suma = 1+2+3+4+5 muestre: “el resultado de la suma es: “, suma fin_Inicio si se necesitara sumar los 100 primeros números naturales, se necesitaría realizar el siguiente cálculo, 1 + 2 +3 + …. +100, es evidente que realizarlo de la forma que se ha venido trabajando es muy complicado, ya que si se necesita sumar los 10000 primeros números naturales, el cálculo seria el siguiente 1 + 2 +3 + 4 + 5 + 6 +… + 10000, otra dificultad, parte del hecho que la persona que realiza el algoritmo, tiene que estar realizando las diferentes modificaciones cuando sean solicitadas. Una forma más adecuada de realizar el algoritmo, es replantearlo de la siguiente forma: Ejemplo 3 Elaborar algoritmo que sume los primeros n números naturales, donde n es un número que se ingresa por teclado. Los números naturales son: 1 2 3 4 5 6 7 8 9 10………. n Datos de entrada: n, el número de valores que se desean sumar Datos de salida: la suma de los n primeros números naturales Variables n: número , se almacena la cantidad de números que se desean sumar. suma: número, se almacena la suma de los n primeros números naturales i: número, contador Estrategia Es importante tener en cuenta, que en este caso no se sabe la cantidad de números que se desean sumar, por esta razón, hay que Módulo – Jorge Hernán Álvarez emplear un tipo de variable que cuente los números hasta que se llegué a n, esta variable será un contador que se definirá de la siguiente forma. Los números naturales inician en 1, se puede inicializar la variable contador en 1. i=1 Los números naturales se incrementan de 1 en 1 ejemplo 1 2 3 4 5 6…, luego el contador se puede definir de la siguiente manera: i = i + 1 donde 1 es el incremento que realiza el contador en cada una de las entradas al ciclo. Como se necesita ir acumulando la suma de 1 + 2 + 3 + 4 + 5 +….n, se debe emplear un acumulador, éste debe ser inicializado en cero, para poder borrar el valor con el que la variable suma sea definido en memoria (basura). Se puede observar que lo que se esta sumando en cada iteración, es el valor que tiene el contador, ahora para definir el acumulador sólo hay que escribir lo siguiente. suma = suma + i donde i es la variable tipo contador. lea: n en esta instrucción el usuario define la cantidad de números que desea sumar. i = 1 inicialización de la variable contador suma = 0 inicialización del acumulador es importante definir una condición que permita sumar los n primeros números, a partir de los conteos que realiza el contador mientras (i<= n) dentro del ciclo mientras, se introducirán, los contadores y los acumuladores, ya que son las variables que van cambiando con cada iteración. El orden en el que se escriban las instrucciones siempre dependerá, del valor con el que se halla inicializado el contador, en este caso, primero se emplea la instrucción suma = suma + i y segundo se emplea la instrucción i = i + 1, dando origen al siguiente ciclo. mientras (i<= n) suma = suma + i i=i+1 fin mientras Al terminar el ciclo se debe imprimir la suma de los n primeros números, una instrucción que da respuesta a la necesidad es: muestre: “la suma de los “, n, “ primeros números es: “, suma Módulo – Jorge Hernán Álvarez Algoritmo completo Inicio Definición de variables i, suma: número Algoritmo lea: n i=1 suma = 0 mientras (i<= n) suma = suma + i i=i+1 fin mientras muestre : “la suma de los “, n, “ primeros números es: “, suma fin_Inicio Prueba de escritorio Se ingresa por teclado el número 5, quedando la variable n con el número 5, las variables i y suma con los valores 1 y 0 respectivamente, tal y como se muestra en memoria. n 5 i 1 suma 0 Ahora se estudiara lo que ocurre en memoria cuando se ejecuta el ciclo mientras, al evaluar la condición es i menor o igual que n, se puede verificar que es verdadera con lo que se ejecutan las instrucciones que se encuentran dentro del ciclo mientras, quedando la memoria de la siguiente forma n 5 i 1 2 suma 0 1 Al ejecutar la instrucción fin mientras, automáticamente se vuelve a evaluar la condición es i menor o igual que n, como el valor de i es 2 y el de n es 5, la condición es verdadera y se vuelven a ejecutar las instrucciones que se encuentran dentro del mientras. El cambio de valores que se ha realizado en las variables, se presenta a continuación. n 5 i 1 2 3 Módulo – Jorge Hernán Álvarez suma 0 1 3 Al ejecutar la instrucción fin mientras, automáticamente se vuelve a evaluar la condición es i menor o igual que n, como el valor de i ahora es 3 y el de n es 5, la condición es verdadera y se vuelven a ejecutar las instrucciones que se encuentran dentro del mientras. El cambio de valores que se ha realizado en las variables, se presenta a continuación. n 5 i 1 2 3 4 suma 0 1 3 6 Al ejecutar la instrucción fin mientras, automáticamente se vuelve a evaluar la condición es i menor o igual que n, como el valor de i ahora es 4 y el de n es 5, la condición es verdadera y se vuelven a ejecutar las instrucciones que se encuentran dentro del mientras. El cambio de valores que se ha realizado en las variables, se presenta a continuación. n 5 i 1 2 3 4 5 suma 0 1 3 6 10 Al ejecutar la instrucción fin mientras, automáticamente se vuelve a evaluar la condición es i menor o igual que n, como el valor de i ahora es 5 y el de n es 5, la condición es verdadera y se vuelven a ejecutar las instrucciones que se encuentran dentro del mientras. El cambio de valores que se ha realizado en las variables, se presenta a continuación. n 5 i 1 2 3 4 5 6 suma 0 1 3 6 10 15 Al ejecutar la instrucción fin mientras, automáticamente se vuelve a evaluar la condición es i menor o igual que n, como el valor de i ahora es 6 y el de n es 5, la condición es falsa, el algoritmo se sale del ciclo y se ejecuta por último la instrucción muestre: “la suma de los “, n, “ primeros números es: “, suma la que imprime por pantalla, la suma de los 5 primeros números es: 15. Módulo – Jorge Hernán Álvarez Ejemplo 4 Elaborar un algoritmo que realice los siguientes cálculos de n números ingresados por teclado, si el número ingresado por teclado es par calcule la sumatoria, y si el número ingresado por teclado es impar calcule la productoria. La sumatoria es la suma de todos los números y la productoria es el producto de todos los números. Ejemplo si se introducen por teclado los números 10, 12, 11, 17, 1, 2, 4, el programa debe sumar los siguientes números 10 + 12 + 2 + 4, y calcular el producto de 11*17*1. Datos de entrada: el número de valores que se desean operar y cada uno de los valores que se van ha ingresar por teclado. Datos de salida: la sumatoria y la productoria Variables n: numero, cantidad de valores que se desean operar valor: numero, valores que se van ha ingresar por teclado suma: numero, sumatoria de los números pares prod: número, productoria de los números impares con: número, contador que controla la finalización del ciclo Estrategia Para determinar si un número es para o impar, se debe emplear el operador modulo, que devuelve el residuo de la división de 2 números. Condición un número es par si es divisible por dos, y es impar si no es divisible por dos. Si se desea saber si un número es par, se realiza la siguiente pregunta si (valor % 2==0) entonces, si la condición es verdadera el número es par, y si la condición es falsa el número es impar. Para el cálculo de la sumatoria, se debe realizar la suma de los valores que cumplen la condición si (valor % 2==0) entonces, se debe ingresar la siguiente instrucción suma = suma + valor, donde valor es el número que cumple la condición de ser par. Para el cálculo de la productoria, se debe realizar el producto de los números que cumplen la condición falsa de si (valor % 2==0) entonces, se debe ingresar la siguiente instrucción prod = prod * valor, hay que tener en cuenta que la variable prod a diferencia de Módulo – Jorge Hernán Álvarez suma debe ser inicializada en uno, ya que si prod se inicializa con cero la productoria siempre da cero. lea: n en esta instrucción se ingresa el número de valores que se desean ingresar por teclado. con = 1 variable que controla la cantidad de números que se van a ingresar al ciclo prod = 1 variable que se inicializa en uno, para poder realizar la productoria suma = 0 inicialización de la variable que acumula la sumatoria de los números pares. Ahora se va ha estudiar las instrucciones que serán ingresadas al ciclo. Para garantizar que se escriban n valores por teclado, se debe escribir la siguiente condición para la instrucción mientras. mientras (con<= n) luego de crear la instrucción mientras, se debe escribir la instrucción para ingresar cada uno de los valores por teclado, la instrucción es lea: valor, ahora se debe averiguar, si el valor ingresado por teclado es par o impar, se escribe la siguiente condición, si (valor % 2==0) entonces, si la condición es verdadera el número es par y sino el número es impar, el conjunto de instrucciones queda de la siguiente manera. si (valor % 2==0) entonces suma = suma + valor sino prod = prod * valor fin si éste conjunto de instrucciones, garantiza que el valor que se sume sea par, y el que se multiplique sea impar El ciclo completo queda así mientras (con<= n) lea: valor si (valor % 2==0) entonces suma = suma + valor sino prod = prod * valor fin si con = con +1 el contador garantiza que el ciclo no se vuelva infinito fin mientras Algoritmo completo Inicio Definición de variables Módulo – Jorge Hernán Álvarez con, suma, prod, n: número Algoritmo lea: n con = 1 prod =1 suma = 0 mientras (con<= n) lea: valor si (valor % 2==0) entonces suma = suma + valor sino prod = prod * valor fin si con = con +1 el contador garantiza que el ciclo no se vuelva infinito fin mientras muestre: “el resulta de la suma es: “, suma, “el resultado de la productoria es: “, prod fin_Inicio Ejemplo 5 Encontrar el error en el siguiente algoritmo Inicio Definición de variables i, j, k, n: número Algoritmo lea: n i=1 j=2 k=3 mientras (i<= n) j=j+k k =2*j fin mientras muestre: “el valor de j es: “, j, “el valor de k es: “, k fin_Inicio Se puede observar que todas las variables que se emplean en el algoritmo, han sido definidas con anterioridad. Prueba de escritorio Al introducir por teclado el número 3, la variable n toma el valor de 3, quedando la memoria de la siguiente manera. Módulo – Jorge Hernán Álvarez n 3 i 1 j 2 k 3 Ahora se realizara el estudio de lo que ocurre con las variables, cada vez que se ejecuta el ciclo mientras, se debe tener en cuenta que el ciclo funciona, siempre que el valor de la variable i sea menor o igual que el valor de la variable n. n 3 i 1 j 2 5 15 45 135 405 . . . . k 3 10 30 90 270 810 . . . . Infinito infinito Se puede observar, que en cada una de las iteraciones la variable i no cambia y siempre la condición (i<= n), se hace verdadera, dando origen a un ciclo infinito, como el algoritmo nunca termina, no se puede saber cual es el resultado final de la variable j y la variable k, como es importante que el algoritmo termine en algún momento, se debe adicionar una nueva instrucción, que permita ir incrementando el valor de la variable i hasta que ésta variable se haga mayor que la variable n, de esta forma, se puede garantizar que el ciclo termine en algún momento. Los algoritmos que se han resuelto hasta el momento de estructura mientras, se ha conocido el número de datos que se desean operar, en ocasiones no se conoce el número de datos que se desean manejar. Para garantizar que el ciclo en algún momento termine, se debe emplear alguna cualidad que tengan los datos, de esta forma crear una condición que permita finalizar el ciclo, cuando se introduzca algún valor que no cumpla la cualidad. Ejemplo 5 Elaborar un algoritmo que calcule el promedio de una serie de números mayores que cero. Datos de entrada: la serie de números Módulo – Jorge Hernán Álvarez Datos de salida: el promedio de la serie de números Variables valor: número, en la variable valor, se almacenaran cada uno de los números a los cuales se desea calcular el promedio. con: número, cuenta la cantidad de números que se desean sumar suma: número, almacena la suma de la serie de números pro: número, almacena el valor del promedio de la serie de números Estrategia En este algoritmo no se conoce la cantidad de datos que se deben ingresar, por tal motivo hay que definir una condición que garantice, que al ingresar un número que no sea mayor que cero, el ciclo termine, la condición es, mientras (valor > 0). El promedio de una serie de números se define, como la suma de la serie de números dividido la cantidad de números. pro = suma / con Inicio Definición de variables valor, con, suma, pro Algoritmo lea: valor con = 0 suma = 0 mientras (valor > 0) con = con + 1 suma = suma + valor lea: valor fin mientras pro = suma /con muestre: “el promedio de la serie de números es: “, pro Prueba de escritorio Al ejecutar el programa el usuario ingresará por teclado los siguientes valores: 1 4 6 7 8 9 -1, se realizara el seguimiento de lo que ocurre cada vez que se ingresa cada uno de los valores. Módulo – Jorge Hernán Álvarez Antes de comenzar el ciclo mientras, la memoria se encuentra de la siguiente manera. valor 1 suma 0 con 0 pro Basura Al ingresar al ciclo mientras valor 1 4 6 7 8 9 -1 suma 0 1 5 11 18 26 35 con 0 1 2 3 4 5 6 Pro Basura El valor de la variable valor es -1, cuando se evalúa la condición (valor > 0), el ciclo termina, porque -1 no es mayor que cero, al salir del ciclo se ejecuta la instrucción, pro = suma /con, como el valor de la variables suma es 35 y el valor de la variable con es 6, la variable pro queda valiendo 35 / 6, que da como resultado 5,83333, que es el promedio de la serie de números positivos. Para terminar se ejecuta la instrucción, muestre: “el promedio de la serie de números es: “, pro, la cual muestra por pantalla, el promedio de la serie de números es: 5,83333. Banderas o switche Es una variable que contiene dos valores mutuamente excluyentes, ejemplo V o F, 1 o 2, 0 o 1 etc. La bandera permite, a partir de una condición dada por el programador, seleccionar una de dos alternativas a seguir en un algoritmo, la bandera también es empleada, para verificar si se ha ingresado un determinado valor, en una serie de valores ingresados por teclado. Ejemplo 6 Elaborar algoritmo que genere primeros n términos de la siguiente serie 10, 12, 13, 15, 16, 18, 19, 21… Datos de entrada: el número de términos Módulo – Jorge Hernán Álvarez Datos de salida: la serie de números variables n: número, cantidad de términos que se desean crear bandera: número, variable que controla la generación de los términos ter: número j: número, variable tipo contador, que controla hasta que se hallan generado los n términos. Estrategia Se puede observar, que la serie se genera iniciando en 10 y se suma de forma alternada 2 y 1, es evidente que es importante saber cuando se suma 2 y cuando se suma 1, una posible solución es empleando una bandera, de forma que cuando la bandera valga 0 se sume 2 al término y se cambie el valor de la bandera a uno, cuando la bandera valga 1 se sume 1 al término y se cambie el valor de la bandera a cero. la variable bandera se inicializa en cero, para cuando se evalué la condición (bandera == 0) , se sume 2 al término, y así generar el número 12. la variable j se inicializa en 1 ter se inicializa en 10, porque es el primer número de la serie la estructura lógica queda de la siguiente manera: si (bandera == 0) entonces ter = ter + 2 bandera = 1 sino ter = ter + 1 bandera = 0 fin si La estructura mientras queda de la siguiente forma mientras (j<= n) muestre: ter al ingresar al ciclo, el primer valor que se imprime es ter, y como el primer valor de ter es 10, el resultado que se presenta en pantalla es 10, introduciendo la condición lógica, se logra que se sume 2 y 1 a la variable ter. Módulo – Jorge Hernán Álvarez si (bandera == 0) entonces ter = ter + 2 bandera = 1 sino ter = ter + 1 bandera = 0 fin si para terminar el ciclo, hay que introducir el contador para que en algún momento termine el ciclo. j=j+1 fin mientras Algoritmo completo Inicio Definición de variables n, bandera, ter, j: número lea: n bandera = 0 j=1 ter = 10 mientras (j<= n) muestre: ter si (bandera == 0) entonces ter = ter + 2 bandera = 1 sino ter = ter + 1 bandera = 0 fin si j=j+1 fin mientras fin_Inicio Prueba de escritorio Se ingresa por teclado el número 5, Antes de comenzar el ciclo mientras, la memoria se encuentra de la siguiente forma. n 5 bandera 0 ter 10 j 1 Al ingresar al ciclo mientras n 5 bandera 0 ter 10 Módulo – Jorge Hernán Álvarez j 1 1 0 1 0 1 12 13 15 16 18 2 3 4 5 6 Todos los valores tachados con los que se encuentra la variable ter, son mostrados por pantalla de la siguiente forma: 10 12 13 15 16. Otra forma de realizar el mismo algoritmo, sin emplear variable tipo bandera, es la siguiente. Inicio Definición de variables n, ter, j: número lea: n j=1 ter = 10 mientras (j<= n) muestre: ter si (j % 2 == 1) entonces ter = ter + 2 sino ter = ter + 1 fin si j=j+1 fin mientras fin_Inicio La condición (j % 2 == 1), asegura que el valor de la j en la primera iteración es impar, y suma 2 a la variable ter, en la segunda iteración, como la variable j es par, suma 1 a la variable ter, con esta condición se verifica, que en una iteración se suma 2 y en la otra 1, tal como lo hace el algoritmo con bandera. Estructura repetitiva para La estructura para permite que un conjunto de instrucciones se repita un número determinado de veces. Cuando se emplea la estructura para, se debe saber la cantidad de elementos con los que se desea trabajar, a la estructura para, se le define la inicialización del contador interno, y éste va creciendo o decreciendo un número constante de forma automática, el ciclo termina cuando el contador interno pasa la condición que ha sido determinada por el programador. Módulo – Jorge Hernán Álvarez para variable = desde valor inicial hasta valor final, incremento haga instrucciones fin para Cuando el incremento es de uno, no es necesario escribir el incremento. Ejemplo para i = desde 1 hasta 6 haga muestre: i fin para Como no se definió incremento, la estructura para, incrementa la variable i de 1 en 1, cuando se ingresa al ciclo para, la variable i entra valiendo 1, tal como lo define la palabra desde, al ingresar al ciclo la estructura verifica que 1 sea menor o igual que 6, como 1 es menor o igual que 6, entonces se ejecuta la instrucción muestre: i, con lo que el programa muestra en pantalla el número 1, automáticamente se incrementa la variable i en 1 cambiando el valor de 1 por 2, como 2 es menor o igual que 6, entonces nuevamente se ejecuta la instrucción muestre: i, la cual muestra por pantalla 2, el ciclo termina cuando el valor de la variable i sea mayor que 6. Ejemplo para i = desde 1 hasta 10, 2 haga muestre: i fin para El mismo ejemplo empleando la estructura mientras i=1 mientras (i<= 10) muestre: i i=i+2 fin mientras Ejemplo 7 Reescribir el siguiente conjunto de instrucciones con estructura mientras. s=0 para i = desde 1 hasta 10 haga s=s+i fin para Módulo – Jorge Hernán Álvarez Para pasar la estructura para a mientras. Se determina en que valor se inicializa la variable i, en este caso la variable i se inicializa en 1. Se determina la condición con la que se evalúa el ciclo, en este caso como la variable i va hasta 10, la condición que permite controlar esta situación es (i<= 10). Se determina en cuanto se esta incrementando la variable i, como no aparece en la estructura para ningún incremento, por defecto la estructura para incrementa en 1. s=0 i=1 mientras (i<=10) s=s+i i=i+1 fin mientras. Ejemplo 8 Elaborar algoritmo que permita calcular el factorial de un número, el factorial de un número n se encuentra de la siguiente forma: n! = 1*2*3*4*….*n n! significa el factorial de n, ejemplo si n = 5, el factorial de 5 es: 5! = 1*2*3*4*5, que da como resultado 120 Datos de entrada: el número al que se le desea calcular el factorial Datos de salida: el factorial del número Variables n: número , número al que se le calculará el factorial fact: número, el factorial del número i: número, variable tipo contador Estrategia Para calcular el factorial de un número, se puede emplear un ciclo para, que inicie en 1 y termine en n, con incrementos de 1. Módulo – Jorge Hernán Álvarez La variable fact, debe ser inicializada en 1, porque las operaciones que se van ha realizar son productos. ¿Qué pasa si se inicializa la variable fact en cero? El ciclo para, se puede escribir de la siguiente manera: para i = desde 1 hasta n haga fact = fact * i fin para Algoritmo completo Inicio Definición de variables n, fact, i:número lea: n fact = 1 para i = desde 1 hasta n haga fact = fact * i fin para muestre: “el factorial de “, n, “ es: “, fact fin_Inicio Prueba de escritorio Se ingresa por teclado el número 5, quedando almacenado en la variable n el número 5. n 5 fact 1 1 2 6 24 120 i 1 2 3 4 5 6 Cuando se termina de ejecutar el ciclo para, la variable i vale 6, como la condición 6<= 5 es falsa, el algoritmo se sale del ciclo y ejecuta la instrucción muestre: “el factorial de “, n, “ es: “, fact, instrucción que imprime por pantalla, el factorial de 5 es: 120. Otra forma de realizar el mismo algoritmo empleando ciclo mientras Inicio Definición de variables n, fact, i: número lea: n fact = 1 Módulo – Jorge Hernán Álvarez i=1 mientras (i<= n) fact = fact * i i=i+1 fin mientras muestre: “el factorial de “, n, “ es: “, fact fin_Inicio Observación Cualquier estructura para, puede ser pasado a estructura mientras, siendo la estructura para, un caso particular de la estructura mientras. La estructura para, se emplea, porque simplifica la escritura de algunas instrucciones que siempre habría que escribir, si se empleara estructura mientras. Módulo – Jorge Hernán Álvarez