0% encontró este documento útil (0 votos)
362 vistas114 páginas

Algoritmos para Python en Español

En matemáticas, lógica, ciencias de la computación y disciplinas relacionadas, un algoritmo es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha ... Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma. Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License,1 que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
362 vistas114 páginas

Algoritmos para Python en Español

En matemáticas, lógica, ciencias de la computación y disciplinas relacionadas, un algoritmo es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha ... Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma. Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License,1 que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 114

Universidad de Oviedo

Departamento de Fsica

Grado en Fsica
Curso 201415
Introducci
on a la Fsica Computacional

Introduccion a algoritmos con python


Resolucion de problemas en un ordenador
Algoritmos
Lenguajes de programacion
Bases de la programacion imperativa

Resolucion de problemas en un ordenador

Proceso en varios pasos


Se necesitan resolver varios sub-problemas:
Modelo fsico
Modelo matematico
Modelo informatico (algoritmo)
Programa de ordenador

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

Programa de ordenador (en python)


g = input("g ? ")
tf = input("tf ? ")
n = input("n ? ")
dt = tf/float(n)
t = 0
for i in range(n):
t = t+dt
y = 0.5*g*t**2
print("t = %10.5f y = %10.5f" % (t, y))

Salida del programa (por pantalla)


g ? 9.8
tf ? 2
n ? 10
t = 0.20000
t = 0.40000
t = 0.60000
t = 0.80000
t = 1.00000
t = 1.20000
t = 1.40000
t = 1.60000
t = 1.80000
t = 2.00000

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.

Algoritmo para calcular el


area de un crculo
Se debe conocer el radio r del crculo. Tendramos,
por ejemplo:
definici
on de datos:
r, a : numero real
: numero real, constante : 3.1415926535897932
parte ejecutable:
leer r
asignar a = r 2
imprimir a

Ejercicio A1 (para resolver en clase)


Describa un algoritmo para pasar de coordenadas
polares (r, ) a coordenadas cartesianas (x, y).

y
x

Nota: suponga que el


calculo de las funciones
matematicas clasicas es
conocido y que su uso es
el habitual.

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.

Tipos de lenguajes de programaci


on
Principalmente existen estos (aunque hay lenguajes
mixtos):
Declarativos
Imperativos
Orientados a objetos
En todos ellos se utilizan sentencias, instrucciones o
comandos en modo texto (normalmente) para escribir
los programas.

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

Bases de la programacion imperativa

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.

Algoritmos con estructura secuencial


En calculo en serie, cada instruccion se ejecuta
completamente antes de pasar a ejecutarse la
siguiente.
Los algoritmos disenados de esta manera se
denominan en serie.
Por tanto, los programas preparados para este tipo
de algoritmos tienen estructura secuencial.

Constantes y variables (I/II)


A veces, al manejar numeros fijos como
3.14159, se necesitan constantes. Algunos lenguajes
de programacion permiten declarar explcitamente
constantes. Otras veces su uso es interno.
Sin embargo, lo normal es que los datos que se
manejan sean modificados de acuerdo al algoritmo.
Para ello se utilizan variables. La accion de modificar
los datos contenidos en una variable se denomina
asignacion.

Constantes y variables (II/II)


En programacion una variable es un espacio en
memoria al que se accede mediante un identificador,
que tiene asociado el tipo de dato, su manejo, etc.
En el espacio de memoria esta almacenado un valor
(posiblemente con mas informacion interna asociada
el tipo de dato).
En python se asigna una variable usando el signo
igual:
a = dato

Ejemplo de algoritmo secuencial (en python)


# Esta l
nea es un comentario
# Adem
as, las l
neas en blanco se saltan
pi = 3.1415926535897932
# El radio, r, es conocido previamente
# C
alculo del
area del c
rculo
a = pi*r*r
# C
alc. de la longitud de la circunferencia
l = 2*pi*r

Ejercicio A3 (para resolver en clase)


Prepare un trozo de codigo en python, para calcular
el semipermetro, p, y el area, a, de un triangulo
mediante la formula de Heron a partir de las
longitudes de los lados a, b y c:
p
p = (a+b+c)/2,
a = p(p a)(p b)(p c).
Suponga que los lados del triangulo son conocidos
previamente.
(En python la potenciacion se calcula usando el
operaror **.)

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.

Instrucciones de entrada y salida


Estas instrucciones suelen conllevar el uso de ficheros
(o archivos), que se pueden manejar en modo lectura
y/o escritura.
Por ejemplo, en python, leer de un fichero, f, sera:
x = f.read()
Tambien existen otras instrucciones ligadas a obtener
informacion adicional sobre los ficheros, abrirlos y
cerrarlos, etc.

Entrada y salida simples en python


De momento, para su uso en lo que sigue, en python
la lectura simple de una variable (con un mensaje
explicativo) se puede hacer por teclado:
v = input("Introduzca velocidad ")
La salida por pantalla de varias variables, a, b y c, se
hace mediante:
print(a, b, c)

Comandos en programaci
on imperativa
Declaracion de tipos de dato.
Entrada y salida.
Operaciones con datos.
Subrutinas y funciones.
Condicionales.
Bucles.

Operaciones con datos (I/II)


Con los datos, ya sean expresados directamente
(como el numero 33) o a traves de una variable, se
pueden hacer operaciones.
Las operaciones permitidas dependen del tipo de
dato. Por ejemplo, con los numeros se pueden
hacer las operaciones aritmeticas conocidas en
matematicas.

Operaciones con datos (II/II)


Se denominan operadores a smbolos (como *, +)
que indican que con los datos se debe realizar cierta
operacion.
En python los operadores son infijos, esto es, se
colocan entre los datos sobre los que opera. Ejemplo:
3 * 4
En algunos lenguajes se puede extender el uso de
operadores a tipos de datos definidos por el usuario.

Precedencia de las operaciones


Las operaciones se escriben en una sola lnea,
y se realizan generalmente de izquierda a derecha
(excepto las potenciaciones en la mayora de los
lenguajes).
Existe una precedencia de unos operadores sobre
otros. Cada lenguaje tiene sus reglas de precedencia,
pero en general se realizan primero la potenciacion
(**), luego las multiplicaciones (*) y divisiones (/),
y luego las sumas (+) y restas (-).

Uso de los par


entesis
Las operaciones se pueden agrupar usando parentesis
(como en las operaciones aritmeticas).
Esto sirve para indicar que operaciones se realizan
primero (se van quitando los parentesis mas interiores
al realizarse esas operaciones).
En una expresion el numero de parentesis de abrir (
debe ser igual al numero de parentesis de cerrar ).
(Los editores de texto suelen tener un destacado de
parentesis.)

Ejemplos de operaciones
Por ejemplo: 3a se puede codificar
7b
3*a/7/b

y NO:

3*a/7*b

Otros ejemplos (con llamadas a funciones):


13*log(x)+sin(y)
24+12+6*7*z
y0+v0*t+0.5*g*t**2

Ejemplos de operaciones con par


entesis
La expresion:



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

sqrt(a*b*(c+d))/log(a + log (b))

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.

Definiendo subrutinas y funciones


Para definir una subrutina se necesita:
Un identificador que le da nombre.
Tipo(s) de dato(s) de retorno que se
devuelve(n) al terminar su ejecucion.
Una lista de parametros: conjunto de argumentos
(pueden ser cero, uno o mas) que la funcion
debe recibir para realizar su tarea.
El codigo: conjunto de ordenes y sentencias que
se deben ejecutar.

Algunas consideraciones sobre subrutinas


Existe diversidad en la definicion de funciones y
subrutinas en los diversos lenguajes de programacion.
Por ejemplo, los argumentos (parametros) pueden ser
accedidos por valor, por referencia o por nombre.
Ademas, las variables que se usan en las funciones y
subrutinas pueden tener caracter local o global.
Glosaremos el tema con python.

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

Ejercicio A4 (para resolver en clase)


Prepare una funcion en python que transforme las
coordenadas polares en coordenadas cartesianas y
que devuelve esta u
ltimas.

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.

Bibliotecas de subrutinas y funciones


Aparte de las funciones definidas por el usuario,
existen bibliotecas (a veces denominadas libreras,
mala traduccion del ingles library ).
Contienen funciones y subrutinas predefinidas
previamente, con el objeto de realizar calculos o
tareas de interes para muchos usuarios del lenguaje.
Ejemplos: funciones matematicas, para manejar
grandes cantidades de texto, para comunicar
ordenadores a distancia, etc.

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

Necesidad de las instrucciones condicionales


Ejemplo:
si llueve entonces
vamos al cine
en caso contrario
vamos a dar un paseo
fin si
llueve es una condicion logica (verdadero si
esta lloviendo y falso si no).

Instrucciones condicionales en python (I/II)


En el caso mas simple, se chequea un valor logico: si
es verdadero se ejecuta una parte del codigo y si es
falso no (a veces se ejecuta otra parte del codigo).
si ... entonces
se codifica en python:
if ... :

Instrucciones condicionales en python (II/II)


en caso contrario se codifica en python (y otros
lenguajes) usando else (no olvidarse del caracter :
despues en python).
fin si no hace falta codificarlo en python: acaba el
fragmento de codigo desindentando.
En python el indentado de las lneas es parte de la
sintaxis.

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

Ejemplo de condicional (en python)


Convierte un numero en 0.0 si es negativo,
multiplicandolo por 2.0 en otro caso:
if x < 0.0:
x = 0.0
else:
x = 2.0*x

Ejercicio A6 (para resolver en clase)


Prepare una funcion en python que devuelva el signo
de un numero: 1.0 si es negativo, 0.0 si es nulo, y
1.0 si es positivo.

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

Ejercicio A7 (para resolver en clase)


Prepare un fragmento de codigo en python con la
funcion definida a trozos siguiente:

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

Ejercicio propuesto A8 (I/III)


(Este ejercicio se propone como tarea a entregar por
el estudiante.)
Despreciando el rozamiento del aire, la velocidad de
escape de un cuerpo lanzado desde la superficie terrestre
es:
p
vE = 2gR,
donde g es la aceleracion de la gravedad en la superficie
y R el radio terrestre.

Ejercicio propuesto A8 (II/III)


Cuando lanzamos un cuerpo con velocidad inicial v < vE
desde la superficie (despreciando el rozamiento del aire)
alcanza una altura maxima:
R
h=
.
1 (v/vE )2
Cuando v vE , entonces a una gran distancia de la
Tierra su velocidad final es:
q
2.
vf = v 2 vE

Ejercicio propuesto A8 (III/III)


Prepare un program en python que, tomando como
datos conocidos g y R (asignados directamente), nos
pida v por teclado, que calcule la velocidad de escape (y
la imprima), y que
si la velocidad es menor que la de escape imprima
la altura maxima que alcanza;
si la velocidad es igual a la de escape que lo diga;
si la velocidad es mayor que la de escape, que diga
que el cuerpo escapa de la Tierra y que imprima
la velocidad final.

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.

Necesidad de los bucles (I/II)


Ejemplo, para ir al cine se necesita:
nos ponemos en la cola
hacer (cola)
si llegamos a la ventanilla entonces
compramos la entrada
salimos de hacer (cola)
fin si
fin hacer
entramos al cine

Necesidad de los bucles (II/II)


Como vemos, existe la necesidad de verificar una
condicion logica (en el ejemplo, si llegamos a la
ventanilla) para salir del bucle. (En otro caso el bucle
sera infinito.)
Cada repeticion del bucle se denomina iteracion.

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

Bucle while (I/II)


El bucle con un n
umero indeterminado de iteraciones mas
utilizado codifica:
mientras condicion hacer
c
odigo del interior del bucle
fin hacer
En python es:
while condicion :
c
odigo del interior del bucle

Bucle while (II/II)


El chequeo de la condicion se realiza al principio: si la
condicion es falsa ya no se ejecuta el bucle, y se salta al
c
odigo que esta despues del bucle.
Lo habitual es que la condicion dependa de una variable
que va modificandose en el interior de bucle, pues sino
el bucle sera infinito (no acaba nunca).

Ejemplo de bucle while (en python)


# imprime los n
umeros enteros
# cuyo cubo es menor que un l
mite dado
n3max = input("Introduzca el l
mite ")
n, n3 = 1, 1
while n3 < n3max:
print(n)
n = n+1
n3 = n**3

Ejercicio A9 (para resolver en clase)


Prepare un fragmento de codigo en python que
imprima las diez primeras longitudes de la serie de
Balmer del hidrogeno (en nanometros):
= 364.6

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

Ejercicio propuesto A10


Prepare un programa en python que repita un bucle
para simular una evolucion temporal, variando el
tiempo t desde un instante inicial, ti , con un intervalo
dt, mientras que el tiempo sea menor o igual que tf .
Dentro del bucle se imprimira el valor de t.

Bucle repeat ... until (repetir ... hasta que)


Este bucle chequea la condicion al final, y se ejecuta al
menos una vez:
repetir
c
odigo del interior del bucle
hasta que condicion (fin repetir)
En python se puede codificar usando un bucle infinito:
while True :
c
odigo del interior del bucle
if condicion : break

Ejercicio A11 (para resolver en clase)


Prepare un programa que imprima los numeros cuyo
cubo es menor que un lmite dado usando un bucle
con chequeo de condicion al final.

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

Bucle con salida intermedia


En un bucle con salida intermedia existe una
condicion por el medio que saca la ejecucion del bucle
(y la pasa a la instruccion que sigue al final del bucle).
Ejemplo:
while cond1 :
codigo del bucle primera parte
if cond2 : break
codigo del bucle segunda parte

Ejercicio propuesto A12


P n
Se quiere sumar la serie: S =
, |z| > 1,
n=0 z
n
tomando un n
umero de terminos n tal que |z | < EPS,
siendo este u
ltimo un valor peque
no, pongamos 1010 .
Prepare un programa en python que nos pida z por
teclado y que imprima la suma obtenida mediante el
criterio anterior. Use un bucle infinito con una condicion
intermedia para salir de el.

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.

Ejercicio A13 (para resolver en clase)


Prepare un programa en python que nos pida por
teclado un numero lmite, nmax, y que imprima los
numeros que son multiplos de 7 entre 1 y nmax.
Use el comando continue.
(En python la operacion a %b devuelve el resto de
dividir a entre b.)

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)

Bucle con contador (I/III)


Este bucle esta controlado por una variable que se va
cambiando segun un patron y se chequea frente a un
valor final.
En algunos lenguajes, como C, el cambio en la
variable en el bucle for puede ser realizado de la
manera en que desee el programador.
Realmente, en C no existe el bucle controlado
por variable con un numero conocido a priori de
iteraciones.

Bucle con contador (II/III)


En muchos lenguajes existe un tipo de bucle cuyo
numero de iteraciones es conocido a priori.
Las iteraciones estan controladas por una variable
que no se debe (en algunos lenguajes no se puede)
modificar en el interior del bucle, sino solo al final del
bucle de manera automatica.
Un ejemplo de este bucle es el DO de las ultimas
versiones de Fortran, y el bucle FOR...NEXT del
lenguaje Basic.

Bucle con contador (III/III)


Tendramos (NO es codigo python):
para i = inicio hasta final incremento delta hacer
c
odigo del bucle
fin hacer
La variable i toma los valores: inicio, inicio + delta,
inicio + 2delta, . . . , mientras que su valor sea i final .
Por defecto delta = 1.
Si delta > 0 e inicio > final , o si delta < 0 e
inicio < final , no se realizan las iteraciones.

Bucle con contador en python


En python se puede simular este bucle con contador
cl
asico mediante una funcion que nos devuelve una lista
fija de valores que cumple un patr
on.
La funcion es range(inicio, final , delta), teniendo en
cuenta que en este caso no se llega a final . Se usa
for i in range(inicio, final , delta):
interior del bucle
La variable i toma los valores: inicio, inicio + delta,
inicio + 2delta, . . . , mientras que su valor sea i < final .
Por defecto inicio = 0, delta = 1.

Ejercicio A14 (para resolver en clase)


Repita el ejercicio A9 pero usando un bucle for.
Prepare un fragmento de codigo en python que
imprima las diez primeras longitudes de la serie de
Balmer del hidrogeno (en nanometros):
= 364.6

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

Ejercicio propuesto A15


Pida por teclado un numero entero postivo, n.
Luego imprima los numeros n, n 1, n 2,. . . , 1
usando un bucle for y range de la manera adecuada.

Bucle for gen


erico en python
En python el bucle for esta preparado para que una
variable tome, en cada iteracion, los valores de los
elementos de una lista:
for x in L:
interior del bucle
En la primera iteracion x toma el valor de L[0] (primer
elemento), en la segunda x toma el valor de L[1], . . . ,
hasta que se acabe la lista.

Ejercicio A16 (para resolver en clase)


Determine la suma de los elementos positivos de una
lista de numeros, L.
Tome, por ejemplo, la lista:
L = [12, -3.0, 1, 0.0, -6.8]

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)

Ejercicio propuesto A17


(Este ejercicio se propone como tarea a entregar por
el estudiante.)
Sea una progresion geometrica, de razon r, con
primer termino a, con n terminos (incluyendo el
primero). Estos datos se piden por teclado.
Prepare un programa que calcule e imprima la suma
de los terminos de la progresion.

Ejercicio propuesto A18 (I/II)


(Este ejercicio se propone como tarea a entregar por
el estudiante.)
Un metodo de resolucion de ecuaciones de la forma
f (x) = 0, mediante iteraciones a partir de un valor
aproximado x0 de la raz, se obtiene poniendo la
funcion en la forma x = g(x) e iterando:
xn+1 = g(xn )
hasta que |xn+1 xn | < EPS, siendo este ultimo un
valor pequeno, pongamos 1010 .

Ejercicio propuesto A18 (II/II)


El metodo no siempre converge (y hay que despejar
la x de otra forma).
Disene un programa en python que nos resuelva
x3 = sin x, partiendo de un valor x0 = 1.0 usando
el metodo iterativo propuesto. El programa debe
imprimir la raz por pantalla.
Para evitar bucles infinitos haga como mucho n =
100 iteraciones y si se llega a ellas sin convergencia,
que imprima un aviso de falta de convergencia.

También podría gustarte