Estructuras Iterativas Estructuras iterativas WHILE y FOR FOR

Anuncio
Ejercicios complementarios clase anterior
1) Escribir un programa que
ordene 2 números
1.
2.
Introducción a la programación
3.
Sergi Jordà
Curso de postgrado “Programación
Orientada al Multimedia”
Institut Universitari de l’Audiovisual
Universitat Pompeu Fabra
Declarar 2 variables
MAYOR y MENOR
Pedir 2 números por
teclado y guardarlos en
estas variables
Si hace falta, intercambiar
los valores de las variables
unidades
1-50
51-100
Precio unidad
0,1 €
0,7 €
101…
0,5 €
A estos precios se le sumará
un IVA del 17%
2) Escribir un programa que calcule el importe de unas fotocopias a partir
de la tabla anterior. El usuario introducirá el número de fotocopias
realizadas y se mostrará el precio final desglosado
Estructuras iterativas
•
En muchísimos casos, los programas deben
repetir una misma tarea un gran número de
veces
Tema 3 : Estructuras Iterativas
§
§
§
§
§
Recorrer todos los caracteres de un fichero de texto
…todos los pixeles de una imagen
…todos los registros (fichas) de un fichero
…todas las muestras de un sonido
Repetir siempre el mismo mecanismo hasta que el
usuario diga “basta”
§ …..
WHILE y FOR
Hay 2 tipos principales de estructuras iterativas
a) FOR variable=valor_inicial TO valor_final DO
………….
END FOR
b) WHILE condicion DO
………….
END WHILE
•
•
•
•
La primera (FOR) se utiliza cuando conocemos de antemano el
número de veces que queremos repetir algo
La segunda (WHILE) se ejecuta mientras la condición sea cierta.
Cuando la condición NO sea cierta, después de ser evaluada, el
programa pasará a la línea que sigue al fin del WHILE
La segunda es más flexible (incluye de hecho a la primera…)
En la siguiente transparencia se muestra como construir un FOR, a
partir de un WHILE
FOR construido con WHILE
FOR variable=valor_inicial TO valor_final DO
………….
END FOR
WHILE condicion DO
………….
END WHILE
• Construir con WHILE, un bucle que se
ejecute de 1 a 10
var i tipo entero
iß1
while i<=10 do
…..
iß i+1
end while
1
Ejercicio
•
Escribir un programa que permita al usuario introducir 6
notas (resultados de los exámenes de un alumno) y que
indique al final, la nota promedio y si el alumno ha
aprobado o no.
Pistas:
• Para aprovechar al máximo la estructura iterativa, se
podrá suponer que los valores de cada examen sólo se
necesitan para calcular el promedio (no necesitamos
guardarlos de forma individual)
• Esta afirmación proviene de que no hemos visto
matrices o vectores, y no sabemos por lo tanto guardar
varios valores dentro de un bucle
• Por lo tanto, lo que se debe hacer cada vez dentro del
bucle es:
§ Pedir una nueva nota y sumarla al total
• Se considerará aprobado si el promedio es superior o
igual a 5
Más pistas (sólo en caso de apuro)
El programa consta de las siguientes partes:
1.
2.
3.
4.
5.
Solución
var num_exams tipo entero
var promedio tipo real
var nota tipo real
Ejercicios :
Ampliación del ejercicio anterior
1.
Ampliar el programa anterior, de forma que antes de
introducir ninguna nota, el usuario indique el número
total de exámenes del alumno
2.
Modificar el programa de forma que el usuario pueda ir
introduciendo notas hasta que introduzca una nota con
valor -1 (que no se contabilizará)
3.
Ampliar el programa de forma a validar las notas
introducidas (que deberán estar comprendidas entre 0
y 10 para el caso [1] y de -1 a 10 para el caso [2])
4.
En el caso [1] validar también el número total de
exámenes (entre 0 y 20)
promedio ß 0
for num_exams =1 to 6 do
print “introduce una nota :”
nota ß input_num
promedio ß promedio + nota
end for
promedio ß promedio / 6
If promedio <5 then
print “el alumno ha suspendido con un ”,promedio
else
print “el alumno ha aprovado con un ”,promedio
endif
(1) Número total de notas
var
var
var
var
num_exams tipo entero
n tipo entero
promedio tipo real
nota tipo real
promedio ß 0
print “introduce número total de notas :”
num_exams ß INPUT_NUM
for n =1 to num_exams do
print “introduce una nota :”
nota ß input_num
promedio ß promedio + nota
end for
promedio ß promedio / num_exams
If promedio <5 then
print “el alumno ha suspendido con un ”,promedio
else
print “el alumno ha aprovado con un ”,promedio
endif
Declarar las variables necesarias
Inicializarlas
En el bucle: pedir nota y sumarla al total
Calcular el promedio a partir del total
Mostrar mensajes
(1b) Número total de notas
(utilizando while)
var
var
var
var
num_exams tipo entero
n tipo entero
promedio tipo real
nota tipo real
promedio ß 0
nß 1
-- al usar while hemos de dar un valor inicial a n
print “introduce número total de notas :”
num_exams ß INPUT_NUM
while n<= num_exams do
print “introduce una nota :”
nota ß INPUT_NUM
promedio ß promedio + nota
n ß n+1 -- ahora hemos de incrementar n explicitamente
end while
promedio ß promedio / num_exams
If promedio<5 then
print “el alumno ha suspendido con un ”,promedio
else
print “el alumno ha aprovado con un ”,promedio
endif
2
(2) Salida con “-1”
(3) Validación de entradas
var num_exams tipo entero
var promedio tipo real
var nota tipo real
En los ejemplos anteriores, tan sólo deberemos sustituir cada una de las
líneas:
nota ß INPUT_NUM
promedio ß 0
num_exams ß 0
print “introduce una nota (-1 para salir):”
nota ß INPUT_NUM
while nota <> -1 do
num_exams ß num_exams + 1 -- no importa el orden de esta linea y la siguiente
promedio ß promedio + nota
print “introduce una nota (-1 para salir):”
nota ß INPUT_NUM
end while
if num_exams > 0 then -- si no hacemos esta comprobación el programa se podría colgar (los
-- ordenadores se cuelgan cuando intentan dividir por 0)
promedio ß promedio / num_exams
if promedio <5 then
print “el alumno ha suspendido con un ”,promedio
else
print “el alumno ha aprovado con un ”,promedio
endif
else
print “no has introducido ninguna nota”
endif
por las siguientes 3 líneas:
nota ß INPUT_NUM
while nota <0 or nota >10
nota ß INPUT_NUM
end while
NB: En el caso de que usemos -1 para salir, deberemos poner while nota<-1 en lugar
de while nota<0
• Lo que hacen estas 3 líneas es pedir una nota, y si esta es incorrecta, sigue
pidiéndola hasta que sea correcta.
• Si la nota fuesecorrecta desde el principio, ya no entraría en el while
• Es fundamental poner un OR (nota <0 or nota >10) y no un AND
• Si pusiésemos un AND, jamás entraría en el bucle, ya que ningún número
puede ser menor que 0 y a la vez mayor que 10 (este es un error de
despiste que cometen frecuentemente hasta los programadores más
expertos )
Más ejercicios
•
Suponiendo que PRINT
escribe el mensaje que se
le indica entre comillas, y a
continuación realiza un
salto de línea, escribir un
programa que pida al
usuario un número de
líneas, y a continuación,
muestre por pantalla un
dibujo como los que se
muestran a continuación:
Más ejercicios
**********
*
*
*
*
*
*
*
*
**********
(si el usuario hubiese pedido 6 líneas)
**********
*
*
**********
• El sumatorio de un número entero N se
•
•
calcula a partir de la fórmula 1+2+3+…+N
Por ejemplo, el sumatorio de 4 es 10
(1+2+3+4)
Escribir un programa que pida un número
al usuario y muestre su sumatorio por
pantalla
(si el usuario hubiese pedido 3 líneas)
Más ejercicios
•
•
•
•
Suponiendo que existe una funcion RANDOM(n) que devuelve un número entero
aleatorio entre 0 y n, escribir una programa que:
Calcule un número aleatorio entre 0 y 20, y pida al usuario que lo adivine
Para ello, el usuario deberá ir introduciendo números , y el programa le deberá indicar
cada vez, si el número a adivinar es mayor o menor que el que ha introducido el
usuario.
Las siguientes líneas muestran un posible desarrollo del programa (en verde los
mensajes que muestra el ordenador, en amarillo lo que teclea el usuario):
Hola. He pensado un número entre 0 y 20. A ver si adivinas cual es…
Introduce un número :
10
Mi número es mayor
Introduce un número :
15
Mi número es mayor
Introduce un número :
18
Mi número es menor
Introduce un número :
16
Acertaste en 4 intentos!
3
Descargar