Document

Anuncio
Í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
Descargar