Estructuras de control. Secuencial, condicional y repetitivas

Estructuras de control. Secuencial, condicional y repetitivas. 1 Estructuras de control.  Hemos visto en los diagramas de flujo y pseudo-código q

1 downloads 319 Views 6MB Size

Recommend Stories


Estructuras de control 1
Laboratorio de herramientas computacionales Estructuras de control1 Las estructuras de control son instrucciones que incluyen comandos en bloque para

Estructuras de Control
Estructuras de Control Lissette Alvarez Abril-Julio, 2004 1 Estructura general de un programa Un programa puede considerarse como una secuencia de

Story Transcript

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: 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

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.