ClaseCiclos_v3

Download Report

Transcript ClaseCiclos_v3

ESTRUCTURAS REPETITIVAS
El que entendió
entendió
MENU DEL DIA
• Recorderis clase anterior
• Ciclos
RECORDERIS CLASE ANTERIOR
• Condicionales
condición
Instrucciones
falso
Instrucciones
verdadero
SI (condición)
Instrucciones_verdadero
DE_LO_CONTRARIO
Instrucciones_falso
FIN_SI
EJEMPLO REPASO 1
• En un juego de preguntas que se responde SI o NO, gana quien responda
correctamente las tres preguntas. Se responde mal cualquiera de ellas, ya
no se pregunta la siguiente y termina el juego. Las preguntas son:
1. ¿Simon Bolivar liberto a Colombia?
2. ¿Camilo Torres fue un Guerrillero?
3. ¿El binomio de oro es un grupo de musica vallenata?
Diseñe el registro de entrada
Solución:
– Codificación a mano: ejemplo_repaso1.txt
– Codificación en pseint: ejemplo_repaso1
Nota: En estas diapositivas se muestra la codificación del ejemplo a mano
levemente modificado (Solamente en los mensajes de escriba) para que
cupiera
EJEMPLO REPASO 1
algoritmo (ejemplo1)
variables:
entero: respuesta
INICIO
ESCRIBA('---------------------------------------------------------------------')
ESCRIBA('QUIEN QUIERE SER MILLOSNARIO')
ESCRIBA('---------------------------------------------------------------------')
ESCRIBA('Hola, les habla Pablo Laserna Philips')
ESCRIBA('A las siguientes preguntas digite 1 si la respues es si o 0 si es no')
ESCRIBA('1. Simon Bolivar liberto a Colombia?')
LEA(respuesta)
SI(respuesta == 1) ENTONCES
ESCRIBA('2. Camilo Torres fue un guerrillero?')
LEA(respuesta)
SI(respuesta == 1) ENTONCES
ESCRIBA('3. El binomio de oro es un grupo de musica vallenata?')
LEA(respuesta)
SI(respuesta == 1) ENTONCES
ESCRIBA('Felicitaciones, gano una lechona')
SI_NO
ESCRIBA('Hay que lastima, solo gana un pase para ver alumbrados en chiva')
FIN_SI
SI_NO
ESCRIBA('Hay que lastima,tome un pase para que vaya a pollos Mario')
FIN_SI
SI_NO
ESCRIBA('Lamentablemente ha sido eliminado, tome una porción de natilla')
FIN_SI
FIN_INICIO
fin(ejemplo1)
EJEMPLO REPASO 1
EJEMPLO REPASO 2
•
Una frutería ofrece las manzanas con descuento según la siguiente
tabla:
# de manzanas compradas
% de descuento
0 -2
0%
3-5
10%
6 -10
15%
11 en adelante
20%
Determinar cuanto pagará una persona que compre manzanas en esa
frutería
Solución:
- Codificación en pseint:
ejemplo_repaso2
Si ((numApples>=0) & (numApples<=2)) Entonces
descuento<-0;
Sino
Si numApples<=5 Entonces
descuento<-0.1;
Sino
Si numApples<=10 Entonces
descuento<-0.15;
Sino
descuento<-0.2;
FinSi
FinSi
FinSi
total<-total - descuento*total;
EJEMPLO REPASO 2
EJEMPLO REPASO 2
CICLOS
•
•
•
•
•
•
•
¿Que es un ciclo?
Instrucción MIENTRAS
Contadores
Acumuladores
Contadores y acumuladores
Instrucción PARA.
Ejercicios de repaso.
¿QUE ES UN CICLO?
• Palabra clave: Repetición
• Conjunto de sentencias que se repiten
siempre que una condición dada sea cierta.
• Ejemplo: Realizar un algoritmo que sume los
10 primeros números (0, 1, 2, 3, 4, 5, 6, 7, 8,
9).
¿QUE ES UN CICLO?
• Solución sin ciclos
Algoritmo(suma_numeros)
variables:
entera: suma = 0
INICIO
suma = 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
ESCRIBA(“La suma de los primeros 10 numeros es”,suma)
FIN
Fin(suma_numeros)
• Que sucede para el caso en el cual se cambie
el enunciado del problema y ya se quieran
sumar los mil primeros números.
¿QUE ES UN CICLO?
• Siguiendo mi solución anterior
• Y si el problema cambia a los
primeros 10000 números. No
puede ser, nooooo!!!
Algoritmo(suma_numeros)
variables:
entera: suma = 0
INICIO
suma = 0 + 1 + . . . + 997 + 998 + 999
ESCRIBA(“La suma de los primeros 10 numeros es”,suma)
FIN
Fin(suma_numeros)
¿QUE ES UN CICLO?
• La solución a todo esto esta en la
implementación de ciclos.
Algoritmo(suma_numeros_ciclos)
variables:
entera: suma = 0, numeroFinal = 10, i = 0
INICIO
MIENTRAS (i < numeroFinal) HAGA
suma = suma + i
i = i + 1
FIN_MIENTRAS
FIN
Fin(suma_numeros_ciclos)
INSTRUCCIÓN MIENTRAS (1)
• Esta condición repite el cogido (secuencia)
contenido adentro siempre que la condición
(expresión) sea verdadera.
INSTRUCCIÓN MIENTRAS (2)
Condicion: Expresión que puede tomar
el valor de falso o verdadero, ejemplo:
• a > 10
• b <= -5
• c == 3
• (a < -4)&(m == 2)
Bloque del ciclo
Instrucciones: Conjunto de sentencias
que se encuentran dentro del bloque
del ciclo, ejemplo:
• x1 = (-b + (b^2-4*a*c)^(1/2))/2
• x2 = (-b - (b^2-4*a*c)^(1/2))/2
• m = ((a + b)^2)/(a-b*(c+f^2))
• a=3
• z = z + 1.
• Estructuras de control (condicionales,
ciclos)
INSTRUCCIÓN MIENTRAS (3)
DIAGRAMA DE FLUJO
PSEUDOCODIGO
INSTRUCCIÓN MIENTRAS (6)
PARA HACER (Ejemplo1.dfd):
• Hacer la prueba de escritorio del diagrama
de flujo.
• Realizar la codificación en Pseudocódigo (En
la forma vista en clase).
• Realizar la codificación en Pseudocódigo
usando PSeInt.
• Mostrar el ejemplo en DFD.
INSTRUCCIÓN MIENTRAS (6)
Archivos:
• Dfd: ejemplo1.dfd.
• Pseint: ejemplo1
Algoritmo(ejemplo1)
variables:
entera: b = 2, a = 4
INICIO
MIENTRAS (a < 10) HAGA
a = a + 1
b = (-2)*b
FIN_MIENTRAS
FIN
Fin(ejemplo1)
INSTRUCCIÓN MIENTRAS (7)
Archivos:
• Dfd: ejemplo2.dfd
• Pseint: ejemplo2
Algoritmo(ejemplo2)
variables:
entera: b = 2, a = 4
INICIO
MIENTRAS (a < 10) HAGA
a = a + 2
b = (-2)*b
FIN_MIENTRAS
FIN
Fin(ejemplo2)
INSTRUCCIÓN MIENTRAS (8)
Archivos:
• Dfd: ejemplo3.dfd.
• Pseint: ejemplo3
Algoritmo(ejemplo3)
variables:
entera: b = 2, a = 4
INICIO
MIENTRAS (a >= -10) HAGA
a = a - 3
b = (-2)*b
FIN_MIENTRAS
FIN
Fin(ejemplo3)
INSTRUCCIÓN MIENTRAS (9)
Archivos:
• Dfd: ejemplo4.dfd.
• Pseint: ejemplo4
Algoritmo(ejemplo4)
variables:
entera: b = 2, a = 4
INICIO
MIENTRAS (a < 10) HAGA
b = (-2)*b
FIN_MIENTRAS
FIN
Fin(ejemplo4)
CONTADORES
Ejemplo:
• Hacer un algoritmo que vaya incrementando una
variable que empieza en cero 0 y termina en 9, debe
mostrar cada incremento (ejemplo5).
CONTADOR
Un contador es una variable que se
incrementa o disminuye en un valor
constante. Un contador tiene la siguiente
forma:
contador = contador + <valor constante>
Algunos ejemplos:
j=j+2
i=i–1
carros = carros + 1
CONTADORES
Ejemplo:
• Hacer un algoritmo que vaya incrementando una variable que empieza en
cero 0 y termina en 9, debe mostrar cada incremento (ejemplo5).
algoritmo(ejemplo5)
variables:
entera: i = 0
INICIO
MIENTRAS (i < 10) HAGA
i = i + 1
ESCRIBA(‘i va en ’,i)
FIN_MIENTRAS
FIN
Fin(ejemplo5)
ACUMULADORES
Ejemplo:
• Modifique el ejemplo anterior de tal manera que realice
la suma de los 10 primeros números (ejemplo 6).
ACUMULADOR
Un acumulador o totalizador es una variable
cuya misión es el almacenamiento de cantidades
variables de procesos sucesivos. La diferencia
con el contador radica en que el incremento o
disminución del acumulador es variable, la
forma general de un acumulador es la siguiente:
acumulador = acumulador + <valor constante>
Algunos ejemplos:
acum = acum + i
suma= suma + algo
resta = resta + algo
cerveza = cerveza + tragos
ACUMULADORES
Ejemplo:
• Modifique el ejemplo anterior de tal manera que realice la suma de los 10
primeros números (ejemplo 6).
algoritmo(ejemplo6)
variables:
entera: i = 0,suma = 0
INICIO
MIENTRAS (i < 10) HAGA
suma = suma + i
ESCRIBA(‘i va en : ’,i,’ y la suma en: ‘,suma)
i = i + 1
FIN_MIENTRAS
FIN
Fin(ejemplo5)
CONTADORES Y ACUMULADORES
Nota:
• Antes de ser usados, tanto los contadores como los
acumuladores deben ser inicializados a un valor
conocido (generalmente 0).
dinero_Homero
dinero_Moe
barriles_cerveza
t_cerveza_vendida
kw_hora_consumidos
Total_kw
ESQUEMAS DE SOLUCION CON CICLOS
• Existen dos esquemas de solución con ciclos, el esquema
cuantitativo y el esquema cualitativo.
• El factor clave radica en si se tiene o no un conocimiento previo
de las iteraciones (repeticiones) que debe realizar el ciclo.
• En si, lo que se tiene que tener bien en claro es como proceder
si se conoce o no el numero de iteraciones.
Problema
Esquema
cuantitativo
Esquema
cualitativo
ESQUEMA CUANTITATIVO
• Es utilizado cuando se conoce el numero de veces
que debe repetirse un ciclo determinado.
Ejemplo:
Realizar un algoritmo
que sume N números
introducidos por
teclado.
ESQUEMA CUANTITATIVO
Ejemplo:
Realizar un algoritmo que sume N números introducidos por teclado.
algoritmo(ejemplo7)
variables:
entera: N, i = 0
real: suma = 0, num
INICIO
ESCRIBA(‘Digite la cantidad de números a leer: ’)
LEA(N)
MIENTRAS (i < N) HAGA
ESCRIBA(‘Digite el numero: ’)
LEA(num)
suma = suma + num
i = i + 1
FIN_MIENTRAS
ESCRIBA(‘La suma de los numeros metidos da: ’,suma)
FIN
Fin(ejemplo7)
ESQUEMA CUANTITATIVO
Ejemplo:
Realizar un algoritmo que sume N números introducidos por teclado.
ESQUEMA CUALITATIVO
• Esquema utilizado cuando no se conoce el numero de
veces que debe repetirse la secuencia de
determinado ciclo.
• La resolución de este tipo de
problemas puede ser llevada a
cabo de dos maneras:
– Preguntando antes de cada
iteración.
– Haciendo uso de un registro
centinela.
ESQUEMA CUALITATIVO
Ejemplo:
Mateo esta recaudando
impuestos para los
romanos, al iniciar el día
laboral abre caja en $0, a
medida que van llegando
usuarios va acumulando la
cantidad hasta que
finalizar el día. Realizar un
programa que le ayude a
Mateo a llevar esta tarea.
ESQUEMA CUALITATIVO – SOLUCION
PREGUNTANDO ANTES DE CADA ITERACION
• El control del bucle usando este método se realiza
preguntando al usuario si existen mas datos.
algoritmo(impuestos1)
variables:
entera: total = 0, recaudo, ban
INICIO
ESCRIBA(‘Digite 1 si hay un judio a quien cobrarle u otra cosa si no: ’)
LEA(ban)
MIENTRAS (ban == 1) HAGA
ESCRIBA(‘Meta el recaudo: ’)
LEA(recaudo)
total = total + recaudo
ESCRIBA(‘Digite 1 si hay un judio a quien cobrarle u otra cosa si no: ’)
LEA(ban)
FIN_MIENTRAS
ESCRIBA(‘El total de impuestos recolectados fue de: ’,total)
FIN
Fin(impuestos1)
ESQUEMA CUALITATIVO – SOLUCION
PREGUNTANDO ANTES DE CADA ITERACION
• El control del bucle usando este método se realiza preguntando al
usuario si existen mas datos. (Archivo pseint: ejemplo8).
ESQUEMA CUALITATIVO – HACIENDO USO
DE UN REGISTRO CENTINELA
• En este caso la terminación del bucle se hace por medio de un
centinela. Un registro centinela es un valor especial usado
para indicar el final de una lista de datos.
algoritmo(impuestos2)
variables:
entera: total = 0, recaudo
INICIO
ESCRIBA(‘Digite el valor del recaudo o -1 para terminar: ’)
LEA(recaudo)
MIENTRAS (recaudo > -1) HAGA
total = total + recaudo
ESCRIBA(‘Digite el valor del recaudo o -1 para terminar: ’)
LEA(recaudo)
FIN_MIENTRAS
ESCRIBA(‘El total de impuestos recolectados fue de: ’,total)
FIN
Fin(impuestos2)
ESQUEMA CUALITATIVO – HACIENDO USO
DE UN REGISTRO CENTINELA
• En este caso la terminación del bucle se hace por medio de un
centinela. Un registro centinela es un valor especial usado para
indicar el final de una lista de datos. (Archivo pseint: ejemplo9).
ESQUEMA CUALITATIVO – HACIENDO USO
DE UN REGISTRO CENTINELA
• En este caso la terminación del bucle se hace por medio de un
centinela. Un registro centinela es un valor especial usado
para indicar el final de una lista de datos.
Ejemplo:
Hacer un algoritmo que
encuentre la suma y el
promedio de un grupo de
datos enteros positivos
que entran de a uno por
registro.
ESQUEMA CUALITATIVO – HACIENDO USO
DE UN REGISTRO CENTINELA
Ejemplo: Hacer un algoritmo que encuentre la suma y el promedio de un
grupo de datos enteros positivos que entran de a uno por registro.
algoritmo(datos)
variables:
entera: suma = 0, dato, numdatos = 0
real: prom
INICIO
ESCRIBA(‘Digite el dato o -1 para terminar: ’)
LEA(dato)
MIENTRAS (dato > -1) HAGA
suma = suma + dato
numdatos = numdatos + 1
ESCRIBA(‘Digite el dato o -1 para terminar: ’)
LEA(dato)
FIN_MIENTRAS
prom = suma/numdatos
ESCRIBA(‘Suma: ’,suma)
ESCRIBA(‘Promedio: ’,prom)
FIN
Fin(impuestos2)
ESQUEMA CUALITATIVO – HACIENDO USO
DE UN REGISTRO CENTINELA
Archivo pseint: ejemplo10
EJEMPLOS
Ejemplo (ejemplo resuelto N°18
libro Efrain Oviedo - modificado):
Para cada de los estudiantes de una
universidad, donde cada uno cursa
4 materias se tienen los siguientes
datos:
• Código del estudiante.
• Nota materia 1.
• Nota materia 2.
• Nota materia 3.
• Nota materia 4.
Hacer un algoritmo que encuentre y
despliegue para cada estudiante el
promedio crédito.
Archivo pseint:
ejemplo11
EJEMPLOS
EJEMPLOS
Ejemplo 2 (ejemplo resuelto N°20 libro Efrain
Oviedo):
En un supermercado un ama de casa pone en
su carrito los artículos que va tomando de los
estantes. La señora quiere asegurarse de que
el cajero le cobre bien lo que ella ha
comprado; por lo cual cada vez que ella
compra un articulo distinto le coloca un
código numérico mayor que 0, anota la
cantidad de artículos iguales y su precio y,
determina cuanto dinero gastara en este
articulo; a esto le suma lo que iría gastando en
los demás artículos, hasta que decide que ya
tomo lo que necesitaba. Hacer un algoritmo
que le muestre a la señora el código del
articulo, la cantidad de artículos de cada
especie, el importe total por articulo y el
importe total de la compra.
Archivo pseint:
ejemplo12
EJEMPLOS
INSTRUCCIÓN HAGA
• La instrucción HAGA es como la instrucción
MIENTRAS solo que a diferencia de esta
maneja la inicialización y decremento de
manera automática.
INSTRUCCIÓN HAGA (2)
Condicion: A diferencia del caso
MIENTRAS, en el HAGA la condición es
manejada de manera automática de tal
manera que cuando el valor de VC
supera (o es menor en el caso
contrario) al valor de LF se sale del
ciclo:
• VC: Variable de control del ciclo.
• LI: Valor inicial de VC.
• LF: Valor final de VC.
• INC: Valor de incremento o
disminución de la variable de control
Bloque del ciclo
Instrucciones: Conjunto de sentencias
que se encuentran dentro del bloque
del ciclo, ejemplo:
• a=3
• z=z+1
INSTRUCCIÓN HAGA (2)
INSTRUCCIÓN HAGA (3)
PARA HACER:
• Hace lo mismo que en el caso de la
instrucción mientras.
EJERCICIOS DE REPASO
Ejercicios:
1. Hacer un algoritmo que se ejecute hasta que el
usuario introduzca una velocidad mayor que
VMAX (asuma VMAX igual a 80). El algoritmo al
final debe indicar que se excedió la velocidad y
la cantidad en la cual la velocidad máxima fue
excedida.
2. Hacer un algoritmo que cuente el numero de
automóviles. El conteo se debe realizar por
medio de una bandera.
EJERCICIOS DE REPASO
3. Dadas N notas de un estudiante del curso de
Informática 1, calcular:
–
–
–
–
–
Cuantas notas tiene perdidas.
Cuantas notas tiene ganadas.
Cual es el promedio de notas.
Cual fue la menor nota.
Cual fue la mayor nota.
4. Elabore un algoritmo que lea un numero entero n y
que imprima todos los múltiplos de 3 hasta n.
5. Elaborar un algoritmo que encuentre el mayor de un
grupo de datos positivos.
MAS EJERCICIOS DE REPASO
6. Dados N valores, diseñe un algoritmo que
haga el siguiente proceso:
– Si el valor es menor que cero, calcular su cubo.
– Si el valor esta entre 0 y 100, calcular su cuadrado.
– Si el valor esta entre 101 y 1000 calcular su raiz
cuadrada.