Download 3. Estructuras iterativas

Document related concepts
no text concepts found
Transcript
3. Estructuras iterativas
Fundamentos de Informática
Dpto. Lenguajes y Sistemas Informáticos
Curso 2012 / 2013
Índice
Estructura iterativas
1.
2.
3.
4.
5.
Análisis de algoritmos iterativos
Ej11: While
Ej12: For
Ej13: Do - Loop
Resumen
2
Iterativas
Análisis
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
3
Iterativas
Análisis For
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 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
For i = ini To fin Step p
i ← ini
i←i+p
i ≤ fin
no
. . .
Next i
sí
…
4
Iterativas
Análisis For
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
For i = top To fin Step -p
i ← top
i←i-p
i ≥ fin
no
. . .
Next i
sí
…
5
Iterativas
Análisis For
For: Escribir números del 1 al 10 (incremento)
i←1
i←i+1
i ≤ 10
sí
Escribe i
no
Sub Escribe_Click()
Dim i As Integer
For i = 1 To 10 Step 1
pct1.Print CStr (i)
Next i
End Sub
6
Iterativas
Análisis For
For: Escribir números del 10 al 1 (decremento)
i ← 10
i←i-1
i≥1
no
sí
Escribe i
For i = 10 To 1 Step -1
pct1.Print CStr (i)
Next i
7
Iterativas
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
sí
…
While
cond
sí
…
no
no
While cond
. . .
Wend
8
Iterativas
Análisis While
Escribir números del 1 al 10 (incremento) utilizando While
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
no
i = 1
While i <= 10
sí
pct1.Print CStr (i)
Escribe i
i = i + 1
i←i+1
Wend
i←1
i←i+1
i ≤ 10
sí
no
For i = 1 To 10 Step 1
pct1.Print CStr (i)
Escribe i
Next i
9
Iterativas
Análisis Do-Loop
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
…
While
Do - Loop
While/Until
Do
no
sí
…
Do
…
. . .
Loop While cond
. . .
sí
no
cond
Loop Until cond
no
sí
10
Iterativas
Análisis Do-Loop
Escribir números del 1 al 10 utilizando Do – Loop While
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
i = 1
Do
i←i+1
pct1.Print CStr (i)
i = i + 1
sí
i ≤ 10
Loop While i <= 10
no
11
Iterativas
Análisis Do-Loop
Escribir números del 1 al 10 utilizando Do – Loop Until
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
i = 1
Do
i←i+1
pct1.Print CStr (i)
i = i + 1
no
i > 10
Loop Until i > 10
sí
12
Iterativas
Ej11: While
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, Π)
While
no
sí
…
13
Iterativas
Ej11: While
Ej11: Diagrama de Flujo
cmd11_Click
n, p: entero
n ← LeeEntero
Condición de
parada
Inicialización al elemento neutro
p←1
p<n
sí
p←p·2
Cuerpo simple
Iterativa While
no
Escribe p
Fin
14
Iterativas
Ej11: Codificación VB
Ej11: While
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
no
Escribe p
Fin
15
Iterativas
Ej12: For
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
• Título:
– Iterativa For (para)

f =

• Nombre
– cmd12_Click

i

∑
i =1 
n
• 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, Σ)
Do-Loop
While
no
no
sí
…
…
sí
…
For
sí
no
16
Iterativas
Ej12: For
Ej12: Diagrama de Flujo
Ej12
Inicialización
Condición
i, n: entero
f: entero
n ← LeeEntero
Actualización

f =


i
∑
i =1 
n
f←0
Iterativa For
i←1
i ← i+1
i≤n
sí
f←f+i
Escribe i, f
no
Fin
Cuerpo del For
17
Iterativas
Ej12: For
Ej12: Codificación VB
cmd12_Click
Inicialización
Condición
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, n: entero
f: entero
n ← LeeEntero
f←0
i←1
i ← i+1
i≤n
no
sí
f←f+i
Fin
Escribe i, f
18
Iterativas
Ej13: Do-Loop
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
Do-Loop
While
…
no
sí
sí
…
no
19
Iterativas
Ej13: Do-Loop
Ej13: Diagrama de Flujo
cmd13_Click
t, n: entero
t←0
Cuerpo del Do-Loop
n ← LeeEntero
Iterativa Do-Loop
t←t+n
sí
n≠0
Condición de
parada Until
no
Condición de
parada While
Escribe t
no
n=0
sí
Fin
20
Iterativas
Ej13: Do-Loop
Ej13: Codificación VB
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
cmd13_Click
t, n: entero
t←0
n ← LeeEntero
t←t+n
sí
n≠0
no
Escribe t
Fin
21
Iterativas
Resumen
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.
For
While
…
no
no
sí
…
Do-Loop
sí
…
sí
no
22