Algoritmos para Python en Español
Algoritmos para Python en Español
Departamento de Fsica
Grado en Fsica
Curso 201415
Introducci
on a la Fsica Computacional
Modelo fsico
Se plantea el problema desde el punto de vista fsico
(o qumico, biologico, sociologico, etc., dependiendo
de la disciplina de que se trate).
Se aplica la teora correspondiente, teniendo
en cuenta sus limitaciones y realizando las
simplificaciones pertinentes.
Modelo matem
atico
Se describen las formulas algebraicas necesarias,
si hay que resolver sistemas de ecuaciones, si se
necesitan integrales, etc.
Se debe plantear el problema usando la matematica
adecuada.
Por ejemplo, la fsica cuantica necesita el uso de
numeros complejos, pero la dinamica clasica usa
numeros reales.
Modelo inform
atico
Los ordenadores no pueden (de momento) codificar
directamente el modelo matematico.
Se necesita desarrollar un algoritmo, que consiste
en una descripcion de las instrucciones necesarias
para luego codificar la resolucion del problema en un
ordenador.
Un algoritmo es basicamente una receta.
Programa inform
atico
Consiste en la traduccion del algoritmo a un lenguaje
concreto de programacion, que realiza realmente la
computacion.
La computacion puede ser algo matematico
(solucionar un sistema de ecuaciones), pero tambien
puede ser una computacion simbolica (buscar y
reemplazar el texto de un documento, o realizar una
traduccion de una lengua a otra).
Problema ejemplo
Se deja caer una piedra desde el brocal de un pozo y
queremos conocer la distancia al brocal de la piedra
segun cae para diferentes instantes de tiempo.
(Aunque de momento algunas partes en la resolucion
de este ejemplo no las hemos visto, no es difcil
entender el metodo. Ya volveremos sobre ellas luego.)
Modelo fsico
La piedra sufre una cada libre (aproximadamente).
La cada libre es el movimiento de un cuerpo bajo
la acci
on de la gravedad.
Existen simplificaciones fsicas:
en las cercanas de la superficie terrestre
se puede suponer la intensidad del campo
gravitatorio, g, constante;
se desprecia el rozamiento del aire;
se supone el cuerpo puntual.
Modelo matem
atico
Definici
on de algunas variables:
profundidad respecto a la superficie terrestre, y;
tiempo, t;
intensidad del campo gravitatorio (aceleracion de
la gravedad), g.
Tomando y = 0, cuando t = 0, se tiene y = 12 gt2 .
Algoritmo inform
atico
Instante inicial ti = 0, instante final tf, con n pasos temporales.
definici
on de datos:
g, ti, tf, ti, t : n
umero real
n, i : n
umero entero
parte ejecutable:
leer g, tf, n
asignar t = 0, dt = tf/n
para i = 1 hasta n hacer
asignar t = t + dt
asignar y = 0.5gt2
imprimir t, y
fin para
y
y
y
y
y
y
y
y
y
y
=
=
=
=
=
=
=
=
=
=
0.19600
0.78400
1.76400
3.13600
4.90000
7.05600
9.60400
12.54400
15.87600
19.60000
Algoritmos
Qu
e es un algoritmo
Es un conjunto de instrucciones a aplicar a unos datos
de entrada, y que termina en un n
umero finito de
pasos, proporcionandonos resultados.
Los algoritmos resuelven clases de problemas, o sea,
problemas generales.
Ejemplo: disene un algoritmo para calcular el area de
un crculo de radio cualquiera.
y
x
Soluci
on al ejercicio A1
definici
on de datos:
r, : numero real
x, y : numero real
parte ejecutable:
leer r,
asignar x = r cos
asignar y = r sin
imprimir x, y
Ejercicio propuesto A2
Prepare un algoritmo para calcular el area de una
corona circular a partir del radio interno, r, y del
radio externo, R.
Lenguajes de programacion
Qu
e es un lenguaje de programaci
on
Es un lenguaje formal disenado para expresar procesos
que pueden ser llevados a cabo por maquinas como
las computadoras.
Esta formado por un conjunto de smbolos y reglas
sintacticas y semanticas que definen su estructura y
el significado de sus elementos y expresiones.
Qu
e es un lenguaje inform
atico
Es un termino que engloba a los lenguajes de
programacion y a otros mas, como por ejemplo
HTML (lenguaje para el marcado de paginas web
que no es propiamente un lenguaje de programacion,
sino un conjunto de instrucciones que permiten
estructurar el contenido de los documentos).
Qu
e es c
odigo fuente
El codigo fuente de un programa informatico (o
software) es un conjunto de lneas de texto que son
las instrucciones que debe seguir la computadora para
ejecutar dicho programa.
Por tanto, en el codigo fuente de un programa
esta escrito por completo su funcionamiento.
Qu
e es c
odigo m
aquina
El codigo maquina consiste en instrucciones
ejecutables, conocidas por el procesador sobre el que
esta disenado el ordenador.
Cada procesador conoce solo su lenguaje propio, por
lo que el codigo maquina debe ser preparado para su
funcionamiento en cada ordenador concreto.
La traduccion del codigo fuente a codigo maquina
se realiza mediante ciertos programas denominados
compiladores e interpretes.
Compiladores e int
erpretes
Los compiladores traducen de una vez el codigo
fuente a lenguaje de maquina. Esto da rapidez de
ejecucion pero el desarrollo del programa es lento.
Los interpretes traducen el codigo fuente instruccion
por instruccion a lenguaje de maquina. Esto permite
desarrollos mas rapidos pero ejecuciones lentas. No
obstante, se puede ir modificando continuamente el
codigo fuente, de tal manera que el codigo puede
escribirse a s mismo.
Qu
e es programar
Es el proceso por el cual se escribe, se prueba, se
depura, se compila (o interpreta) y se mantiene el
codigo fuente de un programa informatico.
Los errores en programacion (bugs en ingles) son
casi inevitables. Por ello, es muy importante el
mantenimiento de las aplicaciones informaticas.
Lenguajes amigables, como python, facilitan ese
mantenimiento.
Qu
e lenguaje usar
Existen miles de lenguajes de programacion, cada
uno apropiado a una tarea concreta (generalmente),
aunque existen lenguajes de proposito general como
python, que usaremos nosotros.
El uso del lenguaje adecuado a cada problema
es relevante: en una disciplina los algoritmos
necesarios son muy diferentes a los de otra disciplina
y es probable que las rutinas pertinentes esten
pre-programadas en un lenguaje y no en el otro.
Programaci
on declarativa (I/II)
En ella las sentencias que se utilizan describen
el problema que se quiere solucionar, pero no las
instrucciones necesarias para solucionarlo.
Esto ultimo se realiza mediante mecanismos internos
de inferencia de informacion a partir de la descripcion
realizada.
No existen asignaciones.
Programaci
on declarativa (II/II)
Existen tres subtipos de lenguajes declarativos:
Logico, ejemplo de lenguaje: Prolog.
Algebraico, ejemplo de lenguaje: SQL.
Funcional, ejemplo de lenguaje: Haskell.
Programaci
on imperativa
En ella se describe paso a paso un conjunto de
instrucciones que deben ejecutarse para variar el
estado del programa y hallar la solucion.
Ejemplos de lenguaje: Fortran, C, Python.
Nos centraremos en este tipo de programacion,
usando python como lenguaje.
Programaci
on orientada a objetos (I/II)
La programacion orientada a objetos (POO) utiliza
objetos como elementos fundamentales en la
construccion de la solucion.
Un objeto es una abstraccion de algun hecho o ente
del mundo real, con atributos que representan sus
caractersticas o propiedades, y metodos que emulan
su comportamiento o actividad.
Programaci
on orientada a objetos (II/II)
Todas las propiedades y metodos comunes a los
objetos se encapsulan o agrupan en clases.
Una clase es una plantilla, un prototipo para crear
objetos; en general, se dice que cada objeto es una
instancia o ejemplar de una clase.
Ejemplos de lenguaje: C++, Java, Python.
(No usaremos las caractersticas OO de python.)
Comandos en programaci
on imperativa
Las instrucciones tienen una apariencia distinta en
lenguajes de programacion diferentes, pero existen
algunas funcionalidades basicas que se presentan en
casi todo lenguaje:
Declaraci
on de tipos de dato.
Entrada y salida.
Operaciones con datos.
Subrutinas y funciones.
Condicionales.
Bucles.
C
alculo secuencial y c
alculo paralelo
Existen computadores donde se pueden realizar
calculos en paralelo (por ejemplo, los clusters de
procesadores para calculo masivo).
No obstante, nosotros abordaremos solo el calculo en
serie o secuencial, mas sencillo y adecuado al nivel de
nuestro curso.
Soluci
on al ejercicio A3
# a, b y c son conocidos previamente
# C
alculo del semiper
metro del tri
angulo
p = (a+b+c)/2.0
# C
alculo del
area del tri
angulo
a = (p*(p-a)*(p-b)*(p-c))**0.5
Comandos en programaci
on imperativa
Declaraci
on de tipos de dato.
Entrada y salida.
Operaciones con datos.
Subrutinas y funciones.
Condicionales.
Bucles.
Declaraci
on de tipos de dato (I/II)
Los computadores manejan muchos tipos de datos:
numeros enteros y reales, tiras de caracteres,
agrupaciones de datos homogeneas y heterogeneas,
etc.
En muchos lenguajes, se necesita declarar que tipo
tiene un dato.
Por ejemplo, en C, un entero se define anteponiendo
int a la variable o constante a la que afecte.
Declaraci
on de tipos de dato (II/II)
En python no es necesario declarar las variables:
cuando se realiza la asignacion de un dato a una
variable, a, mediante:
a = dato
El tipo de dato de la variable coincide con el tipo de
lo que hay a la derecha del signo igual.
Comandos en programaci
on imperativa
Declaracion de tipos de dato.
Entrada y salida.
Operaciones con datos.
Subrutinas y funciones.
Condicionales.
Bucles.
Comandos en programaci
on imperativa
Declaracion de tipos de dato.
Entrada y salida.
Operaciones con datos.
Subrutinas y funciones.
Condicionales.
Bucles.
Ejemplos de operaciones
Por ejemplo: 3a se puede codificar
7b
3*a/7/b
y NO:
3*a/7*b
2 sin x + cos y 4
3 cos x sin y
p
ab(c + d)
log(a + log b)
f
g+h
x
2 sin
2+y
se codifica:
((2*sin(x)+cos(y))/(3*cos(x)-sin(y)))**4
f/(g+h)/(2 *sin(x/(2+y)))
Comandos en programaci
on imperativa
Declaracion de tipos de dato.
Entrada y salida.
Operaciones con datos.
Subrutinas y funciones.
Condicionales.
Bucles.
Subrutinas y funciones
Una subrutina o subprograma (tambien llamada
procedimiento o funcion), codifica un subalgoritmo
que permite resolver una tarea especfica.
Esto permite modularizar el codigo, haciendolo
mas facil de entender. Ademas, se usan subrutinas
previamente desarrolladas por otros programadores,
que estan bien disenadas y probadas.
Pueden devolver o no un valor de retorno.
Ejemplo de funci
on (en python)
(Notese el indentado y el caracter :)
def circunferencia (r):
# El radio, r, es un argumento
pi = 3.1415926535897932
a = pi*r*r
l = 2*pi*r
return a, l
Soluci
on al ejercicio A4
def pol a rect (r, th):
# El radio, r, y el
angulo, th,
# son argumentos (n
umeros reales)
x = r*cos(th)
y = r*sin(th)
return x, y
Ejercicio propuesto A5
(Este ejercicio se propone como tarea a entregar por
el estudiante.)
Prepare una funcion en python que utilice la formula
de Stirling para aproximar el factorial de un numero
entero n (que se pasa como argumento).
La funcion debe retornar el logaritmo neperiano del
factorial de n.
Comandos en programaci
on imperativa
Declaracion de tipos de dato.
Entrada y salida.
Operaciones con datos.
Subrutinas y funciones.
Condicionales.
Bucles.
Cambiando la ejecuci
on secuencial
La estructura secuencial solo permite codificar
algoritmos simples pues no se puede cambiar la
ejecucion del codigo en base a valores concretos de
las variables.
Por eso mismo los lenguajes poseen instrucciones
condicionales, que permiten bifurcar la ejecucion
dependiendo del valor de alguna variable.
Instrucciones condicionales
Este tipo de instrucciones trabajan con datos de tipo
logico (tambien llamado booleano).
Existen diversas instrucciones condicionales, como if
(presente en casi todos los lenguajes), y case (o
switch...case) que esta en muchos lenguajes (pero
no en python, pero puede simularse facilmente con
condicionales multiples).
Condicional simple
(Notese el indentado y el caracter :)
if condicion:
# c
odigo que se ejecuta
# si condicion es verdadera
...
...
...
# c
odigo que se ejecuta despu
es
Condicional doble
if condicion:
# c
odigo que se ejecuta
# si condicion es verdadera
...
else:
# c
odigo que se ejecuta
# si condicion es falsa
...
# c
odigo que se ejecuta despu
es
Soluci
on al ejercicio A6
def signo (x):
# devuelve el signo de x
if x == 0.0:
return 0.0
if x < 0.0:
return -1.0
else:
return 1.0
Condicional m
ultiple
if condicion1:
# c
odigo que se ejecuta
# si condicion1 es verdadera
...
elif condicion2:
# se ejecuta si condicion1 es falsa
# y condicion2 es verdadera
...
else:
# c
odigo que se ejecuta
# si ambas condiciones son falsas
...
# c
odigo que se ejecuta despu
es
0,
x a,
xa , a < x b,
ba
f (x, a, b, c) =
cx
, b < x c,
cb
1,
c < x.
Soluci
on al ejercicio A7
def f (x, a, b, c):
# Debe ser a < b < c
if x <= a:
return 0
elif x <= b:
return (x-a)/(b-a)
elif x <= c:
return (c-x)/(c-b)
else:
return 1
Comandos en programaci
on imperativa
Declaracion de tipos de dato.
Entrada y salida.
Operaciones con datos.
Subrutinas y funciones.
Condicionales.
Bucles.
Repitiendo la ejecuci
on de c
odigo (bucles)
En ocasiones debe repetirse parte del codigo un
numero de veces (conocido a priori o no). Para ello
se utilizan los bucles.
Tipos de bucles
Existen dos tipos (principalmente) de bucles:
los que se repiten un numero indeterminado de
veces: while y repeat. . . until (o en su forma
equivalente do. . . while).
de los que se conoce previamente el numero de
iteraciones, o bucle con contador: for.
Saliendo la ejecuci
on de un bucle
A veces, la salida del bucle no se realiza al principio o
final del bucle (depende evidentemente del algoritmo
codificado).
En esas ocasiones se necesita usar otras instrucciones,
como break (salida del bucle directamente) y
continue (continua con la siguiente iteracion,
saltandose el codigo que falta hasta el final del bucle).
n2
,
n2 4
n > 2.
Soluci
on al ejercicio A9
# Serie de Balmer del hidr
ogeno
n, nt = 3, 10
while n <= nt:
n2 = n**2 # n2 es una variable auxiliar
print(364.6*n2/(n2-4))
n = n+1
Soluci
on al ejercicio A11
# imprime los n
umeros enteros
# cuyo cubo es menor que un l
mite dado
n3max = input("Introduzca el l
mite ")
n = 1
while True:
print(n)
n = n+1
if n**3 > n3max: break
Uso de continue
El comando continue nos permite saltarnos desde un
punto dado de un bucle hasta el final y empezar otra
iteraci
on nueva del bucle.
while cond1 :
c
odigo del bucle primera parte
if cond2 : continue
c
odigo del bucle segunda parte
Si la condicion cond2 es verdadera se salta la segunda
parte. Si es false se continua con la segunda parte.
Soluci
on al ejercicio A13
# m
ultiplos de 7
nmax = input("nmax ")
n = 0
while n < nmax:
n = n+1
if n %7 != 0: continue
print(n)
n2
,
n2 4
n > 2.
Soluci
on al ejercicio A14
# Serie de Balmer del hidr
ogeno
nt = 10
for n in range(3, nt+1):
n2 = n**2
print(364.6*n2/(n2-4))
Soluci
on al ejercicio A16
# L es una lista conocida
L = [12, -3.0, 1, 0.0, -6.8]
suma = 0.0
for x in L:
if x > 0:
suma = suma+x
print(suma)