Índice Estructura iterativas 3. Estructuras iterativas 1. 2. 3. 4. 5. Fundamentos de Informática Dpto. Lenguajes y Sistemas Informáticos Curso 2012 / 2013 Análisis de algoritmos iterativos Ej11: While Ej12: For Ej13: Do - Loop Resumen 2 Iterativas Análisis Iterativas Análisis For 1.1 Problemas iterativos 1.2 Análisis: For • No pares hasta que tengas 145 pulsaciones por minuto • Vas a dar diez vueltas al campo • Calcula la media: suma todas las notas de la asignatura y divide entre el número de alumnos (contar) • Busca un número que cumpla unas condiciones • ¿Puedo determinar de antemano cuántas veces se ha de ejecutar el cuerpo (“…”)? – Sí: entonces utilizar una estructura For • Utiliza un contador i. Se divide en tres cláusulas: 1. Inicialización: dar un valor inicial ini al contador i 2. Condición: se verifica si el contador i ha llegado al fin 3. Actualización: se incrementa el contador i el paso p – ¿Uno? ¿Todos? – ¿En qué dominio? • Cuenta los votos de la urna – Mientras queden votos – Hasta que no quede ningún voto For i = ini To fin Step p i ← ini • Operaciones con cadenas de caracteres • Hasta que encuentres la cartera no sales de casa i←i+p i ≤ fin no . . . Next i sí … 3 4 Iterativas Análisis For Iterativas For: decreciente • En vez de contar i también puede descontar: 1. Inicialización: dar un valor inicial top al contador i, que será el valor superior 2. Condición: se verifica si el contador i ha llegado al fin (mientras i ≥ fin) 3. Actualización: se decrementa el contador i el paso p, que es negativo i←i-p For: Escribir números del 1 al 10 (incremento) i←1 i←i+1 i ≤ 10 no sí Sub Escribe_Click() Escribe i Dim i As Integer For i = 1 To 10 Step 1 For i = top To fin Step -p i ← top no i ≥ fin Análisis For pct1.Print CStr (i) . . . Next i Next i sí … End Sub 5 Iterativas Análisis For Iterativas For: Escribir números del 10 al 1 (decremento) i≥1 Análisis While 1.3 Análisis: While • Si no puedo determinar de antemano cuántas veces se ha de ejecutar el cuerpo, For • ¿Puedo terminar directamente? • ¿Quiero que se ejecute cero o más veces? – Sí: estructura While i ← 10 i←i-1 6 no sí Escribe i While For i = 10 To 1 Step -1 cond pct1.Print CStr (i) sí … Next i 7 no sí … no While cond . . . Wend 8 Iterativas Análisis While Iterativas Escribir números del 1 al 10 (incremento) utilizando While i←1 i ≤ 10 1.4 Análisis: Do-Loop • Si no puedo determinar de antemano cuántas veces se ha For de ejecutar el cuerpo • Y no puedo terminar directamente no • ¿Quiero que se ejecute al menos una vez? sí – Sí: estructura Do – Loop While / Until … Lo normal es utilizar una estructura For ya que el propósito es más claro, pero aquí queremos comparar las dos estructuras no Análisis Do-Loop i = 1 While i <= 10 sí While pct1.Print CStr (i) Escribe i Do - Loop While/Until i = i + 1 i←i+1 Do Wend no sí … Do … . . . i←1 i←i+1 i ≤ 10 Loop While cond For i = 1 To 10 Step 1 no sí . . . sí no Loop Until cond cond no sí pct1.Print CStr (i) Escribe i Next i 9 Iterativas Análisis Do-Loop Iterativas Escribir números del 1 al 10 utilizando Do – Loop While i←1 Escribe i 10 Escribir números del 1 al 10 utilizando Do – Loop Until Lo normal es utilizar una estructura For ya que el propósito es más claro, pero aquí queremos comparar las dos estructuras i←1 i = 1 Escribe i Do i←i+1 i ≤ 10 Lo normal es utilizar una estructura For ya que el propósito es más claro, pero aquí queremos comparar las dos estructuras i = 1 Do i←i+1 pct1.Print CStr (i) i = i + 1 sí Análisis Do-Loop pct1.Print CStr (i) i = i + 1 no Loop While i <= 10 no i > 10 Loop Until i > 10 sí 11 12 Iterativas Ej11: While Iterativas Ej11: While Ej11: Diagrama de Flujo 2. Ejemplo 11 • Título: cmd11_Click – Iterativa While (mientras) n, p: entero • Nombre n ← LeeEntero – cmd11_Click Condición de parada • Descripción – Calcular la primera potencia de 2 mayor o igual que un número natural dado Inicialización al elemento neutro p←1 Iterativa While • Observaciones – Cero o más veces: While – Productorio (Pi mayúscula, Π) While p<n sí p←p·2 no sí … no Escribe p Cuerpo simple Fin 13 Iterativas Ej11: Codificación VB 14 Ej11: While Iterativas Salida para n = 8 i f - 1: 1 2: 3 3: 6 4: 10 5: 15 6: 21 7: 28 8: 36 4. Ejemplo 12 cmd11_Click n, p: entero Sub cmd11_Click() n ← LeeEntero Dim s As String Dim n As Integer, p As Integer p←1 s = InputBox ("Número:") n = CInt (s) p<n Iterativa While p = 1 sí While p < n p←p·2 p = p * 2 Wend MsgBox "Potencia: " & p Cuerpo indentado End Sub Ej12: For • Título: – Iterativa For (para) f = • Nombre – cmd12_Click no n ∑ i i =1 • Descripción Escribe p – Escribir las sumas parciales de los n primeros términos de una progresión a1= 1 y ai=ai-1+i para todo i > 1 Fin • Observaciones – Número n de veces: For – Sumatorio (Sigma mayúscula, Σ) Do-Loop While no no sí … … sí … For sí no 15 16 Iterativas Ej12: For Iterativas Ej12: Diagrama de Flujo Ej12: For Ej12: Codificación VB cmd12_Click Ej12 Inicialización i, n: entero f: entero f = n ← LeeEntero Condición Actualización n Inicialización Condición ∑ i Sub cmd12_Click() Actualización Dim s As String Dim i As Integer, n As Integer Dim f As Integer s = InputBox ("Número:") n = CInt (s) f = 0 For i = 1 To n Step 1 f = f + i pct1.Print CStr (i) & ": " & _ CStr (f) Next i End Sub i =1 f←0 Iterativa For i←1 i ← i+1 i≤n sí f←f+i no Fin Cuerpo del For Escribe i, f i, n: entero f: entero n ← LeeEntero f←0 i←1 i ← i+1 i≤n no sí f←f+i Fin Escribe i, f 17 Iterativas 18 Ej13: Do-Loop Iterativas Ej13: Diagrama de Flujo 3. Ejemplo 13 • Título: cmd13_Click – Iterativa do-while (haz-mientras) t, n: entero • Nombre t←0 – cmd_Click13 • Descripción • Observaciones Iterativa Do-Loop t←t+n Do-Loop sí While n≠0 Condición de parada Until no … Condición de parada While no sí Cuerpo del Do-Loop n ← LeeEntero – Sumar una serie de números introducidos del teclado hasta introducir un cero. – Una o más veces: Do-Loop – Contar Ej13: Do-Loop sí Escribe t no n=0 sí … Fin no 19 20 Iterativas Ej13: Do-Loop Iterativas Ej13: Codificación VB Resumen 5. Resumen • Ejemplos básicos – Inicializar al elemento neutro y realizar la operación iterativa Sub cmd13_Click() Dim s As String Dim n As Integer, t As Integer t = 0 Do s = InputBox ("Número:") n = CInt (s) t = t + n Loop While n <> 0 MsgBox CStr (t) End Sub • Patrones de operaciones – – – – – cmd13_Click t, n: entero t←0 n ← LeeEntero For t←t+n sí Sumar. Elemento neutro: 0 Contar. Elemento neutro: 0 Producto. Elemento neutro: 1 Concatenación. Elemento neutro: cadena vacía Búsqueda. Elemento neutro: False. While Do-Loop n≠0 no sí … Fin … no no Escribe t sí … sí no 21 22