Estructuras de control. Secuencial, condicional y repetitivas.

Anuncio
Estructuras de control.
Secuencial, condicional y
repetitivas.
1
Estructuras de control.

Hemos visto en los diagramas de flujo y
pseudo-código que:
1) Se piden datos de entrada (al usuario) →
Asiganción de valores a las variables
2) Se hacen cálculos con los datos introducidos por
el usuario, guardando el resultado deseado en
una variables → asignaciones.
3) Devolver al usuario los resultados almacenados
en variables → En pantalla → sentencia print.

La programación Top-Down (Paradigma
estructural) → serie de líneas que se ejecutan una
2
tras otra
Estructuras de control.


El flujo de ejecución del programa es
estrictamente secuencial.
No obstante a esta linealidad, es posible
alterar este flujo de ejecución de órdenes para
conseguir:
1) tomar decisiones a partir de los datos y/o
resultados intermedios y, en función de éstas,
ejecuten ciertas sentencias y otras no;
2) tomen decisiones a partir de los datos y/o
resultados intermedios y, en función de éstas,
ejecuten ciertas sentencias más de una vez.
3
Estructuras de control.



El primer tipo de alteración se efectúa con
sentencias condicionales o de selección.
El segundo tipo con sentencias iterativas o
de repetición.
Las sentencias que permiten alterar el flujo de
ejecución se engloban en las denominadas
estructuras de control de flujo → estructuras
de control.
4
Estructuras de control:
Sentencias condicionales

Ejemplo, resolver cualquier ecuación de primer
grado
ax + b = 0,

Empezamos contestando:

1. ¿Cuáles son los datos del problema?



Se piden al usuario, los coeficientes a y b son los
datos del problema y son conocidos.
2. ¿Qué deseamos calcular? → será mostrado
al usuario mediante un print.
En este caso es el valor de x.
5
Estructuras de control:
Sentencias condicionales




Conociendo los datos de entrada y el resultado
que hemos de calcular (datos de salida),
¿Cómo calcular la salida a partir de la entrada?
En el ejemplo: basta con despejar x de la
ecuación: x se obtiene calculando −b/a.
Pasos:
1. Pediremos el valor de a y el valor de b (que
supondremos de tipo flotante).

2. Calcularemos el valor de x como −b/a.

3. Mostraremos por pantalla el valor de x.
6
Estructuras de control:
Sentencias condicionales


Nuestro procedimiento presenta un punto débil:
cuando a vale 0, se produce un error de
división b/0=? → NAN, INF, sistema colgado
etc
En la medida de lo posible se debe tratar de
evitar los errores en tiempo de ejecución, ya
que:

detienen la ejecución del programa y muestran
mensajes de error poco comprensibles para el
usuario.
7
La sentencia condicional if




En el ejemplo, se deberá detectar si a vale cero
para, en ese caso, no continuar con la
ejecución del cálculo, para prevenir un error de
ejecución
La sentencia condicional o de selección quiere
decir:
<<Al llegar a este punto, ejecuta esta(s)
acción(es) sólo si esta(s) condición(es) es
(son) cierta(s)>>
Este es el condicional IF (Si)
8
La sentencia condicional if

if a != 0:

x = -b/a

print ’Solución: ’, x

Si introducimos a=0, b=1, no pasará nada, no
ocurre error, pero el procedimento no
producirá salida
9
La sentencia condicional if

if a != 0:

x = -b/a

print ’Solución: ’, x

if a == 0:

print ’La ecuación no tiene solución.’

10
Sentencias condicionales
anidadas

IF (Condición) THEN

IF (Condición) THEN

IF (Condición) THEN
11
La sentencia condicional if

Ejemplo: Un capital de C euros a un interés del
x por ciento anual durante n años se convierte
en en
C · (1 + x/100)n euros.
Diseñar el pseudo código que solicite la
cantidad C y el interés x y n y calcule el capital
final sólo si x es una cantidad positiva.


12
ELSE

En caso contrario (else):

if condición:

acciones

if condición contraria:

otras acciones
13
ELSE

Este tipo de combinación es muy frecuente,
hasta el punto de que se ha incorporado al
lenguaje de programación una forma abreviada
que significa lo mismo:

if condición:

acciones

else:

otras acciones

Else → Si no, en caso contrario, además
14
Una estrategia de diseño:
refinamientos sucesivos


Construir mentalmente un programa tan
complicado es muy dificil, pero posiblemente
sea porque sigues una aproximación
equivocada: no debes intentar construir
mentalmente todo el programa de una vez.
Es recomendable:
a) Primero haz una versión sobre papel que resuelva
el problema de forma directa ( tosca) Utilizar datos
concretos y hacer un esquema con el orden de las
operaciones a realiza y las desiciones tomada
15
Una estrategia de diseño:
refinamientos sucesivos
b) Analiza tu diseño y considera si realmente
resuelve el problema planteado: ¿es posible que se
cometan errores en tiempo de ejecución?, ¿hay
configuraciones de los datos que son especiales y,
para ellas, el cálculo debe ser diferente? → CASOS
PARTICULARES

c) Cada vez que te plantees una de estas
preguntas y tengas una respuesta, modifica el
procedimiento en consecuencia. No hagas más de
un cambio cada vez.
16
Una estrategia de diseño:
refinamientos sucesivos


d) Si el procedimiento funciona correctamente
para todas las entradas posibles y eres capaz
de anticiparte a los posibles errores de
ejecución, ¡Felcidades!, Si no es el caso,
regresa al paso b)
e)Asegurando que todo funciona
correctamente, al teclear en el programa el
mayor número de pruebas posibles,
comprobando cuidadosamente que el resultado
calculado es correcto.
17
Una estrategia de diseño:
refinamientos sucesivos

e) Presta especial atención a configuraciones
extremas o o singulares de los datos (los que
pueden provocar divisiones por cero o valores
muy grandes, o muy pequeños, o negativos,
etc.). Si el programa calcula algo diferente de lo
esperado o si se aborta la ejecución del
programa por los errores detectados, vuelve a
paso b).

18
Una estrategia de diseño:
refinamientos sucesivos

Un error frecuente es tratar de diseñar el
programa directamente sobre el ordenador,
escribiéndolo a bote pronto. Es más, hay
estudiantes que se atreven a empezar con la
escritura de un programa sin haber entendido
bien el enunciado del problema que se
pretende resolver. Es fácil descubrirlos en falta:
no saben resolver a mano un caso particular
del problema. Una buena práctica, pues, es
solucionar manualmente unos pocos ejemplos
concretos para estar seguros de que
conocemos bien lo que se nos pide y cómo
19
calcularlo.
Ejemplo


Diseña un programa que, dados cinco números
enteros, determine cual de los cuatro ultimos
números es más cercano al primero. (Por
ejemplo, si el usuario introduce los números
2, 6, 4, 1 y 10, el programa responderá que el
número más cercano al 2 es el 1

Diseñelo para un número indetermidado de
números

20
Estructuras de control:
Sentencias condicionales


Evaluación con cortocircuitos:
La evaluación de expresiones lógicas es algo
especial. Observa la condición de este if :

if a == 0 or 1/a > 1:

¿Puede provocar una división por cero?

NO
21
Evaluación con cortocircuitos:
●

if a == 0 or 1/a > 1:
Si a vale cero, el primer término del or es 1.
Como la evaluación de una or lógica de 1 con
cualquier otro valor, es necesariamente 1, El
programa no evaluará el segundo término y se
ahorra así un esfuerzo innecesario.
22
Evaluación con cortocircuitos:
●

Algo similar ocurre en este otro caso:

if a != 0 and 1/a > 1:



Si a es nulo, el valor de a != 0 es 0, así que ya
no se procede a evaluar la segunda parte de
la expresión.
Al calcular el resultado de una expresión lógica,
se evalúa (siguiendo las reglas de asociatividad
y precedencia oportunas) lo justo hasta
conocer el resultado:
23
Evaluación con cortocircuitos:
●


cuando el primer término de un or es cierto, se
acaba y devuelve directamente cierto y cuando
el primer término de un and es falso, se acaba
y devuelve directamente falso.
Este modo de evaluación se conoce como
evaluación con cortocircuitos.

24
Método de la iteración simple II:

Segundo ejemplo: g(x)=5x-exp(x)

¿Cúantas raices tiene?


¿cuáles aboramos directamente con el método
de la iteración simple?
¿Cómo solucionamos las demás?
25
Pseudocódigo de la iteración
simple
26
iteración simple II: primera raiz
27
Método de la iteración simple:
Valor de la primera raiz:
28
iteración simple:
Convergencia
Divergencia
29
Descargar