Dpto. Lenguajes y Sistemas...
Transcript of Dpto. Lenguajes y Sistemas...
3. Estructuras iterativas
Curso 2012 / 2013
Fundamentos de InformáticaDpto. Lenguajes y Sistemas Informáticos
2
ÍndiceEstructura iterativas
1. Análisis de algoritmos iterativos
2. Ej11: While3. Ej12: For
4. Ej13: Do - Loop
5. Resumen
3
Iterativas
1.1 Problemas iterativos• 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
– ¿Uno? ¿Todos?
– ¿En qué dominio?
• Cuenta los votos de la urna– Mientras queden votos
– Hasta que no quede ningún voto
• Operaciones con cadenas de caracteres• Hasta que encuentres la cartera no sales de casa
Análisis
4
Iterativas
1.2 Análisis: For• ¿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 i2. Condición : se verifica si el contador i ha llegado al fin3. Actualización : se incrementa el contador i el paso p
Análisis For
i ≤ fin no
sí…
i ← ini
i ← i + p
For i = ini To fin Step p
. . .
Next i
5
Iterativas
For: decreciente• En vez de contar i también puede descontar:
1. Inicialización : dar un valor inicial top al contador i, queserá 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
Análisis For
i ≥ fin no
sí…
i ← top
i ← i - p
For i = top To fin Step - p
. . .
Next i
6
Iterativas
For: Escribir números del 1 al 10 (incremento)
Análisis For
i ≤ 10 no
sí
i ← 1
i ← i + 1
Sub Escribe_Click()
Dim i As Integer
For i = 1 To 10 Step 1
pct1. Print CStr ( i )
Next i
End Sub
Escribe i
7
Iterativas
For: Escribir números del 10 al 1 (decremento)
Análisis For
i ≥ 1 no
sí
i ← 10
i ← i - 1
For i = 10 To 1 Step - 1
pct1. Print CStr ( i )
Next i
Escribe i
8
Iterativas
1.3 Análisis: While• Si no puedo determinar de antemano cuántas veces se ha
de ejecutar el cuerpo,• ¿Puedo terminar directamente?• ¿Quiero que se ejecute cero o más veces?
– Sí: estructura While
Análisis While
no
sí…
For
condno
sí…
While
While cond
. . .
Wend
9
Iterativas
Escribir números del 1 al 10 (incremento) utilizando While
Análisis While
i ≤ 10no
sí
i ← i + 1
i = 1
While i <= 10
pct1. Print CStr ( i )
i = i + 1
Wend
i ← 1
Escribe i
i ≤ 10 no
sí
i ← 1
i ← i + 1
Escribe i
Lo normal es utilizar una estructura For ya que el propósito es más claro, pero aquí queremos comparar las dos estructuras
For i = 1 To 10 Step 1
pct1. Print CStr (i)
Next i
10
Iterativas
1.4 Análisis: Do-Loop• Si no puedo determinar de antemano cuántas veces se ha
de ejecutar el cuerpo• Y no puedo terminar directamente• ¿Quiero que se ejecute al menos una vez ?
– Sí: estructura Do – Loop While / Until
Análisis Do-Loop
no
sí
…
For
no
sí…
While
cond
no
sí
…
Do - LoopWhile/Until
sí
no
Do
. . .
Loop While cond
Do
. . .
Loop Until cond
11
Iterativas
Escribir números del 1 al 10 utilizando Do – Loop While
Análisis Do-Loop
i ← i + 1
i = 1
Do
pct1. Print CStr (i)
i = i + 1
Loop While i <= 10
i ← 1
Escribe i
i ≤ 10
no
sí
Lo normal es utilizar una estructura For ya que el propósito es más claro, pero aquí queremos comparar las dos estructuras
12
Iterativas
Escribir números del 1 al 10 utilizando Do – Loop Until
Análisis Do-Loop
i > 10
sí
no
i ← i + 1
i = 1
Do
pct1. Print CStr (i)
i = i + 1
Loop Until i > 10
i ← 1
Escribe i
Lo normal es utilizar una estructura For ya que el propósito es más claro, pero aquí queremos comparar las dos estructuras
13
Iterativas
2. Ejemplo 11• Título:
– Iterativa While (mientras)
• Nombre– cmd11_Click
• Descripción– Calcular la primera potencia de 2 mayor o igual que
un número natural dado
• Observaciones– Cero o más veces: While– Productorio (Pi mayúscula, Π)
Ej11: While
no
sí…
While
14
Ej11: Diagrama de FlujoEj11: WhileIterativas
Iterativa While
Fin
Escribe p
n ← LeeEntero
n, p: entero
p < n no
sí
p ← 1
p ← p · 2
Condición de parada
cmd11_Click
Inicialización al elemento neutro
Cuerpo simple
15
Ej11: Codificación VBEj11: While
Sub cmd11_Click()Dim s As StringDim n As Integer, p As Integers = InputBox ("Número:")n = CInt (s)p = 1While p < n
p = p * 2WendMsgBox "Potencia: " & p
End Sub
Iterativas
Fin
cmd11_Click
Escribe p
n ← LeeEntero
n, p: entero
p < nno
sí
p ← 1
p ← p · 2
Iterativa While
Cuerpo indentado
16
Iterativas
4. Ejemplo 12• Título:
– Iterativa For (para)
• Nombre– cmd12_Click
• Descripción– 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
• Observaciones– Número n de veces: For– Sumatorio (Sigma mayúscula, Σ)
Ej12: For
∑n
1=i
i=f
Salida para n = 8i f- -1: 12: 33: 64: 105: 156: 217: 288: 36
no
sí…
For
no
sí…
While
no
sí
…
Do-Loop
17
Ej12: Diagrama de FlujoEj12: ForIterativas
Iterativa For
Cuerpo del For
Fin
Ej12
Escribe i, f
n ← LeeEntero
i, n: enterof: entero
i ≤ n
f ← 0
i ← 1no
síi ← i+1
f ← f + i
Inicialización
Condición
Actualización
∑n
1=i
i=f
18
Sub cmd12_Click()Dim s As StringDim i As Integer, n As IntegerDim f As Integers = InputBox ("Número:")n = CInt (s)f = 0For i = 1 To n Step 1
f = f + ipct1. Print CStr (i) & ": " & _
CStr (f)Next i
End Sub
Ej12: Codificación VBEj12: ForIterativas
Fin
Escribe i, f
n ← LeeEntero
i, n: enterof: entero
i ≤ n
f ← 0
i ← 1no
sí
i ← i+1
f ← f + i
InicializaciónCondición
Actualización
cmd12_Click
19
Iterativas
3. Ejemplo 13• Título:
– Iterativa do-while (haz-mientras)
• Nombre– cmd_Click13
• Descripción– Sumar una serie de números introducidos del
teclado hasta introducir un cero.
• Observaciones– Una o más veces: Do-Loop– Contar
Ej13: Do-Loop
no
sí…
While
no
sí
…
Do-Loop
20
Fin
cmd13_Click
Escribe t
n ← LeeEntero
t, n: entero
n ≠ 0
no
t ← 0
t ← t + n
sí
n = 0
sí
no
Ej13: Do-LoopIterativas
Ej13: Diagrama de Flujo
Iterativa Do-Loop
Cuerpo del Do-Loop
Condición de parada While
Condición de parada Until
21
Ej13: Codificación VBEj13: Do-LoopIterativas
Sub cmd13_Click()Dim s As StringDim n As Integer, t As Integert = 0Do
s = InputBox ("Número:")n = CInt (s)t = t + n
Loop While n <> 0MsgBox CStr (t)
End Sub
Fin
cmd13_Click
Escribe t
n ← LeeEntero
t, n: entero
n ≠ 0
no
t ← 0
t ← t + n
sí
22
Iterativas
5. Resumen• Ejemplos básicos
– Inicializar al elemento neutro y realizar la operación iterativa
• Patrones de operaciones– Sumar . Elemento neutro: 0– Contar . Elemento neutro: 0– Producto . Elemento neutro: 1– Concatenación . Elemento neutro: cadena vacía– Búsqueda . Elemento neutro: False.
Resumen
no
sí…
For
no
sí…
While
no
sí
…
Do-Loop