sesión 14: python (5) – aplicaciones. 2009/1 circuitos digitales iii 2010/1 circuitos digitales...

20
Informática I Sesión 14: Python (5) – Aplicaciones

Upload: jose-maria-san-segundo-mendoza

Post on 02-Feb-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

Informática ISesión 14: Python (5) – Aplicaciones

Page 2: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

AGENDAAGENDA

1 Repaso

2 Enumeración exhaustiva

3 Soluciones Aproximadas

1 Repaso

Page 3: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Estructuras de ControlEstructuras de Control Las estructuras de control, son aquellas que

permiten controlar el flujo de ejecución de un programa

• Tres tipos de Estructuras:

1• Secuencial

2• Instrucción condicional.

3• Iteración (bucle de instrucciones)

Page 4: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Salida de datosSalida de datos Salida de datos:

Escribir: Para mostrar información en la pantalla en Diagramas de flujo utilizábamos:

Ahora en Python reemplazaremos dicha estructura por la función print:

El mensaje posee la siguiente sintaxis diferentes formatos de salida

Mensaje

print (“mensaje”, variables);

Page 5: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Descripción: Permite ingresar los datos mediante el teclado. Sintaxis:

• vble: es la variable que se le asignará un valor por teclado.• tipo: se debe indicar el tipo de dato que deseamos recibir:

– int: entero– float: real– bool: booleano– Sin tipo: cadena

• Mensaje: El mensaje es opcional, y es el texto que se mostraría antes de ingresar la variable.

vble = tipo(input(“mensaje”))

Entrada de datosEntrada de datos

Page 6: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

DecisiónDecisión

if (condicion): Instrucciones1else: Instrucciones2

if (condicion1): Instrucciones1elif (condicion2): Instrucciones2elif (condicion3): Instrucciones3

.

.

.elif (condicionN): InstruccionesNelse: InstruccionesE

Page 7: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Realiza un conjunto de operaciones mientras una condición se esté cumpliendo, o mientras una expresión sea verdadera

1• Se evalúa la condición-bucle

2

• Si condición-bucle es verdadera :• Se ejecuta el cuerpo del bucle• Vuelve el control al paso 1.

3

• Si condición-bucle es falsa :• Se termina el ciclo.

*

• Condiciones:• Cuantitativas y Caulitativas

Sentencia whileSentencia while

Page 8: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

while (condición):Instrucciones

Python

SintaxisSintaxis

Page 9: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

SENTENCIA FOR

Realiza un conjunto de operaciones un determinado número de veces

1• Se inicializa la variable de control y se

evalúa la condición-bucle

2

• Si condición es verdadera :• Se ejecuta el cuerpo del bucle• Se incrementa la variable y se evalúa la condición

3• Si condición-bucle es falsa :

• Se termina el ciclo.

*• Condiciones:

• Cuantitativas

Sentencia forSentencia for

Page 10: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

SENTENCIA FOR

#de 1 en 1 desde inicio hasta fin-1for vble in range (inicio,fin):

instrucciones

Python

SintaxisSintaxis

#de 1 en 1 desde 0 hasta fin-1for vble in range (fin):

instrucciones

#valores fijosfor vble in (valor1,valor2,…valorN):

instrucciones

#de paso en paso desde inicio hasta fin-1for vble in range (inicio,fin,paso):

instrucciones

Page 11: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

While: El uso más frecuente es cuando la repetición no está controlada por contador; la condición precede a cada repetición del bucle.

For: Bucle de conteo, cuando el número de repeticiones se conoce por anticipado y puede ser controlado por un contador; la evaluación de la condición precede a la ejecución del cuerpo del bucle.

RecomendacionesRecomendaciones

Page 12: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

AGENDAAGENDA

1 Repaso

2 Enumeración exhaustiva

3 Soluciones Aproximadas

2 Enumeración exhaustiva

Page 13: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Enumeración exhaustivaEnumeración exhaustiva El siguiente programa calcula la raíz cúbica de un

entero, si la tiene.

13

enumeración exhaustiva

n = int(input('Enter an integer number: ')) cube = 0 while cube**3 < abs(n):

cube = cube + 1 if cube**3 != abs(n):

print(n, 'is not a perfect cube') else:

if n < 0: cube = -cube

print('Cube root of', n, 'is', cube)

Page 14: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Enumeración exhaustivaEnumeración exhaustiva

Los ciclos for nos permiten expresar de una forma más simple, por ejemplo, ciclos que iteran sobre una secuencia de enteros.

14

n = int(input('Enter an integer number: ')) for cube in range(0, abs(n)+1):

if cube **3 >= abs(n): break

if cube**3 != abs(n): print(n, 'is not a perfect cube')

else: if n < 0:

cube = -cube print('Cube root of', n, 'is',

cube)

cube = 0 while cube**3 < abs(n):

cube = cube +1

Page 15: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

AGENDAAGENDA

1 Repaso

2 Enumeración exhaustiva

3 Soluciones Aproximadas3 Soluciones Aproximadas

Page 16: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Soluciones AproximadasSoluciones Aproximadas

Calcular una aproximación de la raíz cuadrada de un número positivo:

16

#Find an approximation of the square root x = 25 epsilon = 0.01 step = epsilon**2 guesses = 0 ans = 0.0 while abs(ans**2 - x) >= epsilon and ans <= x:

ans += step guesses += 1

if abs(ans**2 - x) >= epsilon: print('Couldn\'t find the square root of', x)

else: print(ans, 'is approximately the square root of', x)

print('There were', guesses, 'guesses')

Page 17: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Método de bisecciónMétodo de bisección

Para este problema, mejor que la enumeración exhaustiva es la búsqueda binaria.

17

x0 medio

xbajo alto

medio

x0 altobajo medio

Page 18: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Método de bisecciónMétodo de bisección

18

#Find a FASTER approximation of the square root x = 25 epsilon = 0.01 step = epsilon**2 guesses = 0 low = 0.0 high = max(1.0, x) ans = (high + low)/2.0 while abs(ans**2 - x) >= epsilon:

guesses += 1 if ans**2 < x:

low = ans else:

high = ans ans = (high + low)/2.0

print(ans, 'is approximately the square root of', x) print('There were', guesses, 'guesses')

Page 19: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Método Newton-RaphsonMétodo Newton-Raphson

19

𝒈−(𝒈𝟐−𝒌) /𝟐𝒈

Si es una aproximación a una raíz de un polinomio , entonces:

𝒈− 𝒇 (𝒈 )/ 𝒇 ′ (𝒈 )

donde es la derivada de ,es una mejor aproximación.

Dado que las raíces del polinomio nos permiten obtener la raíz cuadrada de , tenemos que la fórmula para mejorar una aproximación a la raíz cuadrada de sería:

donde es la derivada de .

Page 20: Sesión 14: Python (5) – Aplicaciones. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Método Newton-Raphson Método Newton-Raphson

20

#Using Newton-Raphson to find the square root epsilon = 0.01 k = 24.0 root = k/2.0 guesses = 0 while abs(root**2 - k) >= epsilon:

root = root - (root**2 - k)/(2*root) guesses += 1 print(root, 'is close to the square root of', k) print('There were', guesses, 'guesses')