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

Post on 02-Feb-2016

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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)

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);

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

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

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

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

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

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

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

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

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)

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

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

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')

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

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')

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 .

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')

top related