Estructuras Repe,,vas Se solicita al operador que ingrese tres números enteros cualesquiera. En base a estos números, mostrar por pantalla cual es el mayor de todos. Diag. De Flujos Pseudocódigo
Matlab
Inicio variable1ß0 variable2ß0 Imprimir “Ingrese tres números enteros “ Desde 1 a 3 Leer variable1 si (variable1>variable 2) entonces variable2ßvariable1 Fin si Fin Desde imprimir “El mayor valor ingresado es ” imprimir variable2 Fin
v1=0; v2=0; disp(‘Ingrese tres números enteros’); for i=[1..3] v1=input(‘ingrese un entero ‘); if (v1 > v2) v2=v1; end End disp(‘El mayor valor es’); disp(v2);
Estructuras Repe,,vas • La estructura repeNNva se uNliza cuando se quiere que un conjunto de instrucciones se ejecuten un cierto número finito de veces. • Llamamos bucle o ciclo al proceso que se repite.
Estructuras Repe,,vas Existen dos Npos de estructuras repeNNvas: • Aquella en donde se Nene perfectamente establecido el número de veces que un grupo de acciones se van a ejecutar . • Aquella en la que el número de repeNciones es desconocido y se hará hasta que se cumpla o no cierta condición.
Estructuras Repe,,vas “Desde o Para” • Cuando conocemos de antemano el número de veces en que se desea ejecutar una acción o grupo de acciones. • Esta estructura ejecuta las acciones del cuerpo del bucle un número especificado de veces. • Controla en modo automáNco el valor de una variable que cuenta la canNdad de ciclos ejecutados.
Estructuras Repe,,vas “Desde o Para” -‐ SINTAXIS para variableß Vi hasta Vf [incremento] hacer acción o acciones fin-‐desde
variable: variable índice Vi: valor inicial de la variable indice Vf: valor final de la variable indice [incremento]: el número que se incrementa (o decrementa) a la variable indice en cada iteración del bucle, si se omite es 1.
Estructuras Repe,,vas “Desde o Para” -‐ EJEMPLO Imprimir todos los números del 1 al 100.
Inicio para I ß 1 hasta 100 imprimir I fin-‐desde fin
for l=1:100, disp(l); end
1) I es la variable índice con un valor inicial de 1, se incrementa uno en cada paso hasta 100. 2) La estructura desde comienza con un valor inicial de la variable indice y las acciones se ejecutan hasta que su valor sea MAYOR que el que el Valor final. 3) La variable indice se incremente en uno y si este nuevo valor del indice no es mayor que el valor final, se ejecuta de nuevo la acción imprimir. En este caso se visualizará los números 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ....97, 98, 99, 100
Estructuras Repe,,vas “Desde o Para” -‐ EJEMPLO Imprimir todos los números pares desde 2 hasta 300.
Inicio desde I ß 2 hasta 300 incremento 2 imprimir I fin-‐desde fin
for l=2:2:300, disp(l); end
1) La variable indice comienza en 2, se imprime 2 y en el siguiente paso se incrementa en 2 2) l pasa a valer 4; se imprime el 4 y como 4 es menor que 300 (valor final) , se pasa a una nueva iteración incrementando nuevamente l en 2, que ahora vale 6; y así sucesivamente... 3) Aquí se visualiza: 2, 4, 6, 8, 10, 12, 14, 16, 18, ..... 296, 298, 300
Estructuras Repe,,vas “Desde o Para” -‐ EJEMPLO Imprimir todos los números IMPARES desde 1 hasta 300.
Inicio para I ß 1 hasta 300 incremento 2 imprimir I fin-‐desde fin
for l=1:2:300, disp(l); end
1) Vemos los valores: 1, 3, 5, 7, 9, 11, 13, .... , 299 2) El ciclo termina mostrando 299 puesto que en el siguiente paso, la variable I valdría 301 y es mayor al límite establecido de 300. 3) I pasa a valer realmente 301 en el úlNmo paso, solo que la instrucción de imprimir no se ejecuta. 4) Si diéramos la instrucción de imprimir el valor de I, inmediatamente después del fin-‐ desde, veríamos 301.
Estructuras Repe,,vas “Desde o Para” -‐ EJEMPLO Imprimir los valores comprendidos entre el 460 y 500 en orden inverso.
Inicio para I ß 500 hasta 460 incremento -‐1 imprimir I fin-‐desde fin
for l=500:-‐1:460, disp(l); end
Como salida tenemos, entonces: 500, 499, 498, 497, 496, 495, 494, .... 464, 463, 462, 461, 460.
Ciclos con Numero Indeterminado de Iteraciones • Se diferencia de la PARA/DESDE en que no se conoce el número de repeNciones o iteraciones en que se va a ejecutar una instrucción o un bloque de instrucciones. • Estas estructuras son básicamente dos: – mientras....fin-‐mientras – repeNr.... hasta.
• Estas dos se diferencian en que la verificación de la condición para repeNr el ciclo se hace al inicio con mientras y al final con repeNr.
HACER-‐MIENTRAS El cuerpo del bucle se cumple mientras se cumple una determinada condición. Por esta razón se los denomina BUCLES CONDICIONALES.
mientras {condición} acción 1 acción 2 acción 3 ..... acción n fin mientras instrucción X
while condición, comando; … end
HACER-‐MIENTRAS Lo primero que el computador hace es examinar la condición, lo que puede dar como resultado dos posibilidades: • La condición se cumple: Se ejecutan acción 1, acción 2, acción 3, ..., acción n. Las estará repiNendo hasta que la condición no se cumpla, entonces se sale del ciclo y se siguen ejecutando la o las instrucciones que vienen a conNnuación y están fuera del bucle; instrucción X. • La condición no se cumple: No entrará en el ciclo. Se ejecutan las instrucciones que vienen después del bucle, instrucción X, por ejemplo. De esto se deduce que el cuerpo del bucle de una estructura mientras puede repePrse cero o más veces.
Matlab
Pseudocódigo
HACER-‐MIENTRAS (EJEMPLO)
leer contraseña mientras contraseña < > "josua" imprimir "La contraseña es incorrecta !“ leer contraseña fin-‐mientras imprimir "Ha ingresado la contraseña correcta“ contraseña=input(‘Ingrese su contraseña ’); while(contraseña <> ‘josua’), disp(‘contraseña incorrecta’); contraseña=input(‘Ingrese su contraseña ’); End disp(‘Ha ingresado la contraseña correcta’);
REPETIR-‐HASTA La estructura repeNr cumple la misma función que la estructura mientras. La diferencia está en que la estructura mientras comprueba la condición al inicio y repeNr lo hace al final; por eso la estructura repeNr se ejecuta por lo menos una vez.
REPETIR-‐HASTA SINTAXIS
repeEr intrucción 1 instrucción 2 instrucción 3 ...... hasta {condición} instrución X
Lo que la computadora hace al ejecutar la estructura repeNr es: 1) Se ejecutan: instrucción 1, instrucción 2, instrucción 3, ...... 2) Se evalúa la condición. • Si esta es FALSA se vuelve a repeNr el ciclo y se ejecutan instrucción 1, instrucción 2, instrucción 3, . • Si la condición es VERDADERA se sale del ciclo y se ejecuta instrucción X.
Comparación mientras -‐ repeNr MIENTRAS Comprobación de la condición al inicio, antes de entrar al bucle
REPETIR Comprobación de la condición al final, después de haber ingresado una vez al bucle
Las instrucciones del cuerpo del bucle se
Las instrucciones del cuerpo del
ejecutan en forma repetitiva si la
bucle se ejecutan si la condición es
condición es verdadera
falsa
Las acciones del bucle se pueden
Las acciones del bucle se ejecutan
ejecutar 0 o más veces
por lo menos una vez
PROBLEMAS DE ESTRUCTURAS CÍCLICAS Calcular el promedio de un alumno que Nene 7 calificaciones en una materia. HACER PARA Inicio Sumß0 para c desde 1 hasta 7 hacer Leer calif Sum ß sum + calif Fin-‐para prom ß sum /7 Imprimir prom Fin.
HACER MIENTRAS Inicio Sumß0 cß1 Mientras (c<=7) hacer Leer calif Sum ß sum + calif cß c+1 Fin-‐mientras prom ß sum /7 Imprimir prom Fin.
REPETIR HASTA Inicio Sumß0 cß1 RepeNr Leer calif Sum ß sum + calif cß c+1 Hasta (c>7) prom ß sum /7 Imprimir prom Fin.
PROBLEMAS DE ESTRUCTURAS CÍCLICAS Leer 10 números y obtener su cubo y su cuarta potencia HACER PARA HACER MIENTRAS Inicio Inicio para n desde 1 hasta 10 hacer cß1 Leer num Mientras (c<=10) hacer cubo ß num * num * num Leer num cuarta ß cubo * num cubo ß num * num * num Imprimir cubo, cuarta cuarta ß cubo * num Fin-‐para Imprimir cubo, cuarta Fin. cß c+1 Fin-‐mientras Fin.
REPETIR HASTA Inicio cß1 RepeNr Leer num cubo ß num * num * num cuarta ß cubo * num Imprimir cubo, cuarta cß c+1 Hasta (c>10) Fin.
PROBLEMAS DE ESTRUCTURAS CÍCLICAS Calcular la suma y el promedio de números ingresados . La canNdad de números a ingresar es desconocida al momento de ejecutar el algoritmo y todos los números a ingresar se encuentran en el entorno [0,100]. La carga finaliza cuando se ingresa un número fuera de rango. HACER MIENTRAS Inicio HACER PARA No puede resolverse con esta Sumß0 estructura NO se conoce el Cuentaß0 Leer Num número de iteraciones. Mientras Num>=0 y Num<=100 hacer SumßSum+Num Leer Num Cuentaß Cuenta+1 Fin-‐mientras Si Cuenta>0 entonces Promß sum/cuenta Imprimir Sum, Prom Fin-‐Si Fin.
REPETIR HASTA No puede resolverse con esta estructura ya que si el primer número ingresado se encuentra fuera de rango igual ejecutaría el bucle, ya que en el RepeNr-‐ hasta al menos una vez se ejecuta el bucle.
¿CUANDO EMPLEAR CADA ESTRUCTURA REPETITIVA?