114
Universidad de Oviedo Departamento de F´ ısica Grado en F´ ısica Curso 2014–15 Introducci´ on a la F´ ısica Computacional Introducci´ on a algoritmos con python Resoluci´ on de problemas en un ordenador Algoritmos Lenguajes de programaci´ on Bases de la programaci´ on imperativa

algoritmos para python en español

Embed Size (px)

DESCRIPTION

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.

Citation preview

  • Universidad de Oviedo Departamento de Fsica

    Grado en Fsica Curso 201415Introduccion a la Fsica Computacional

    Introduccion a algoritmos con python

    Resolucion de problemas en un ordenadorAlgoritmosLenguajes de programacionBases de la programacion imperativa

  • Resolucion de problemas en un ordenador

  • Proceso en varios pasos

    Se necesitan resolver varios sub-problemas:

    Modelo fsicoModelo matematicoModelo informatico (algoritmo)Programa de ordenador

  • Modelo fsico

    Se plantea el problema desde el punto de vista fsico(o qumico, biologico, sociologico, etc., dependiendode la disciplina de que se trate).

    Se aplica la teora correspondiente, teniendoen cuenta sus limitaciones y realizando lassimplificaciones pertinentes.

  • Modelo matematico

    Se describen las formulas algebraicas necesarias,si hay que resolver sistemas de ecuaciones, si senecesitan integrales, etc.

    Se debe plantear el problema usando la matematicaadecuada.

    Por ejemplo, la fsica cuantica necesita el uso denumeros complejos, pero la dinamica clasica usanumeros reales.

  • Modelo informatico

    Los ordenadores no pueden (de momento) codificardirectamente el modelo matematico.

    Se necesita desarrollar un algoritmo, que consisteen una descripcion de las instrucciones necesariaspara luego codificar la resolucion del problema en unordenador.

    Un algoritmo es basicamente una receta.

  • Programa informatico

    Consiste en la traduccion del algoritmo a un lenguajeconcreto de programacion, que realiza realmente lacomputacion.

    La computacion puede ser algo matematico(solucionar un sistema de ecuaciones), pero tambienpuede ser una computacion simbolica (buscar yreemplazar el texto de un documento, o realizar unatraduccion de una lengua a otra).

  • Problema ejemplo

    Se deja caer una piedra desde el brocal de un pozo yqueremos conocer la distancia al brocal de la piedrasegun cae para diferentes instantes de tiempo.

    (Aunque de momento algunas partes en la resolucionde este ejemplo no las hemos visto, no es difcilentender 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 bajola accion de la gravedad.

    Existen simplificaciones fsicas:

    en las cercanas de la superficie terrestrese puede suponer la intensidad del campogravitatorio, g, constante;

    se desprecia el rozamiento del aire; se supone el cuerpo puntual.

  • Modelo matematico

    Definicion de algunas variables:

    profundidad respecto a la superficie terrestre, y;tiempo, t;intensidad del campo gravitatorio (aceleracion dela gravedad), g.

    Tomando y = 0, cuando t = 0, se tiene y = 12gt2.

  • Algoritmo informatico

    Instante inicial ti = 0, instante final tf, con n pasos temporales.

    definicion de datos:

    g, ti, tf, ti, t : numero real

    n, i : numero 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 y = 0.19600

    t = 0.40000 y = 0.78400

    t = 0.60000 y = 1.76400

    t = 0.80000 y = 3.13600

    t = 1.00000 y = 4.90000

    t = 1.20000 y = 7.05600

    t = 1.40000 y = 9.60400

    t = 1.60000 y = 12.54400

    t = 1.80000 y = 15.87600

    t = 2.00000 y = 19.60000

  • Algoritmos

  • Que es un algoritmo

    Es un conjunto de instrucciones a aplicar a unos datosde entrada, y que termina en un numero finito depasos, proporcionandonos resultados.

    Los algoritmos resuelven clases de problemas, o sea,problemas generales.

    Ejemplo: disene un algoritmo para calcular el area deun crculo de radio cualquiera.

  • Algoritmo para calcular el area de un crculo

    Se debe conocer el radio r del crculo. Tendramos,por ejemplo:

    definicion de datos:r, a : numero real : numero real, constante : 3.1415926535897932

    parte ejecutable:leer rasignar a = r2

    imprimir a

  • Ejercicio A1 (para resolver en clase)

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

    ry

    x

    Nota: suponga que elcalculo de las funcionesmatematicas clasicas esconocido y que su uso esel habitual.

  • Solucion al ejercicio A1

    definicion de datos:r, : numero realx, 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 unacorona circular a partir del radio interno, r, y delradio externo, R.

  • Lenguajes de programacion

  • Que es un lenguaje de programacion

    Es un lenguaje formal disenado para expresar procesosque pueden ser llevados a cabo por maquinas comolas computadoras.

    Esta formado por un conjunto de smbolos y reglassintacticas y semanticas que definen su estructura yel significado de sus elementos y expresiones.

  • Que es un lenguaje informatico

    Es un termino que engloba a los lenguajes deprogramacion y a otros mas, como por ejemploHTML (lenguaje para el marcado de paginas webque no es propiamente un lenguaje de programacion,sino un conjunto de instrucciones que permitenestructurar el contenido de los documentos).

  • Que es codigo fuente

    El codigo fuente de un programa informatico (osoftware) es un conjunto de lneas de texto que sonlas instrucciones que debe seguir la computadora paraejecutar dicho programa.

    Por tanto, en el codigo fuente de un programaesta escrito por completo su funcionamiento.

  • Que es codigo maquina

    El codigo maquina consiste en instruccionesejecutables, conocidas por el procesador sobre el queesta disenado el ordenador.

    Cada procesador conoce solo su lenguaje propio, porlo que el codigo maquina debe ser preparado para sufuncionamiento en cada ordenador concreto.

    La traduccion del codigo fuente a codigo maquinase realiza mediante ciertos programas denominadoscompiladores e interpretes.

  • Compiladores e interpretes

    Los compiladores traducen de una vez el codigofuente a lenguaje de maquina. Esto da rapidez deejecucion pero el desarrollo del programa es lento.

    Los interpretes traducen el codigo fuente instruccionpor instruccion a lenguaje de maquina. Esto permitedesarrollos mas rapidos pero ejecuciones lentas. Noobstante, se puede ir modificando continuamente elcodigo fuente, de tal manera que el codigo puedeescribirse a s mismo.

  • Que es programar

    Es el proceso por el cual se escribe, se prueba, sedepura, se compila (o interpreta) y se mantiene elcodigo fuente de un programa informatico.

    Los errores en programacion (bugs en ingles) soncasi inevitables. Por ello, es muy importante elmantenimiento de las aplicaciones informaticas.

    Lenguajes amigables, como python, facilitan esemantenimiento.

  • Que lenguaje usar

    Existen miles de lenguajes de programacion, cadauno apropiado a una tarea concreta (generalmente),aunque existen lenguajes de proposito general comopython, que usaremos nosotros.

    El uso del lenguaje adecuado a cada problemaes relevante: en una disciplina los algoritmosnecesarios son muy diferentes a los de otra disciplinay es probable que las rutinas pertinentes estenpre-programadas en un lenguaje y no en el otro.

  • Tipos de lenguajes de programacion

    Principalmente existen estos (aunque hay lenguajesmixtos):

    DeclarativosImperativosOrientados a objetos

    En todos ellos se utilizan sentencias, instrucciones ocomandos en modo texto (normalmente) para escribirlos programas.

  • Programacion declarativa (I/II)

    En ella las sentencias que se utilizan describenel problema que se quiere solucionar, pero no lasinstrucciones necesarias para solucionarlo.

    Esto ultimo se realiza mediante mecanismos internosde inferencia de informacion a partir de la descripcionrealizada.

    No existen asignaciones.

  • Programacion declarativa (II/II)

    Existen tres subtipos de lenguajes declarativos:

    Logico, ejemplo de lenguaje: Prolog.

    Algebraico, ejemplo de lenguaje: SQL.

    Funcional, ejemplo de lenguaje: Haskell.

  • Programacion imperativa

    En ella se describe paso a paso un conjunto deinstrucciones que deben ejecutarse para variar elestado del programa y hallar la solucion.

    Ejemplos de lenguaje: Fortran, C, Python.

    Nos centraremos en este tipo de programacion,usando python como lenguaje.

  • Programacion orientada a objetos (I/II)

    La programacion orientada a objetos (POO) utilizaobjetos como elementos fundamentales en laconstruccion de la solucion.

    Un objeto es una abstraccion de algun hecho o entedel mundo real, con atributos que representan suscaractersticas o propiedades, y metodos que emulansu comportamiento o actividad.

  • Programacion orientada a objetos (II/II)

    Todas las propiedades y metodos comunes a losobjetos se encapsulan o agrupan en clases.

    Una clase es una plantilla, un prototipo para crearobjetos; en general, se dice que cada objeto es unainstancia 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 programacion imperativa

    Las instrucciones tienen una apariencia distinta enlenguajes de programacion diferentes, pero existenalgunas funcionalidades basicas que se presentan encasi todo lenguaje:

    Declaracion de tipos de dato.Entrada y salida.Operaciones con datos.Subrutinas y funciones.Condicionales.Bucles.

  • Calculo secuencial y calculo paralelo

    Existen computadores donde se pueden realizarcalculos en paralelo (por ejemplo, los clusters deprocesadores para calculo masivo).

    No obstante, nosotros abordaremos solo el calculo enserie o secuencial, mas sencillo y adecuado al nivel denuestro curso.

  • Algoritmos con estructura secuencial

    En calculo en serie, cada instruccion se ejecutacompletamente antes de pasar a ejecutarse lasiguiente.

    Los algoritmos disenados de esta manera sedenominan en serie.

    Por tanto, los programas preparados para este tipode algoritmos tienen estructura secuencial.

  • Constantes y variables (I/II)

    A veces, al manejar numeros fijos como 3.14159, se necesitan constantes. Algunos lenguajesde programacion permiten declarar explcitamenteconstantes. Otras veces su uso es interno.

    Sin embargo, lo normal es que los datos que semanejan sean modificados de acuerdo al algoritmo.

    Para ello se utilizan variables. La accion de modificarlos datos contenidos en una variable se denominaasignacion.

  • Constantes y variables (II/II)

    En programacion una variable es un espacio enmemoria 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 asociadael tipo de dato).

    En python se asigna una variable usando el signoigual:a = dato

  • Ejemplo de algoritmo secuencial (en python)

    # Esta lnea es un comentario

    # Ademas, las lneas en blanco se saltan

    pi = 3.1415926535897932

    # El radio, r, es conocido previamente

    # Calculo del area del crculo

    a = pi*r*r

    # Calc. de la longitud de la circunferencia

    l = 2*pi*r

  • Ejercicio A3 (para resolver en clase)

    Prepare un trozo de codigo en python, para calcularel semipermetro, p, y el area, a, de un triangulomediante la formula de Heron a partir de laslongitudes de los lados a, b y c:

    p = (a+b+c)/2, a =

    p(p a)(p b)(p c).

    Suponga que los lados del triangulo son conocidospreviamente.

    (En python la potenciacion se calcula usando eloperaror **.)

  • Solucion al ejercicio A3

    # a, b y c son conocidos previamente

    # Calculo del semipermetro del triangulop = (a+b+c)/2.0

    # Calculo del area del trianguloa = (p*(p-a)*(p-b)*(p-c))**0.5

  • Comandos en programacion imperativa

    Declaracion de tipos de dato.Entrada y salida.Operaciones con datos.Subrutinas y funciones.Condicionales.Bucles.

  • Declaracion 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 tipotiene un dato.

    Por ejemplo, en C, un entero se define anteponiendoint a la variable o constante a la que afecte.

  • Declaracion de tipos de dato (II/II)

    En python no es necesario declarar las variables:cuando se realiza la asignacion de un dato a unavariable, a, mediante:

    a = dato

    El tipo de dato de la variable coincide con el tipo delo que hay a la derecha del signo igual.

  • Comandos en programacion 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 lecturay/o escritura.

    Por ejemplo, en python, leer de un fichero, f, sera:

    x = f.read()

    Tambien existen otras instrucciones ligadas a obtenerinformacion adicional sobre los ficheros, abrirlos ycerrarlos, etc.

  • Entrada y salida simples en python

    De momento, para su uso en lo que sigue, en pythonla lectura simple de una variable (con un mensajeexplicativo) se puede hacer por teclado:

    v = input("Introduzca velocidad ")

    La salida por pantalla de varias variables, a, b y c, sehace mediante:

    print(a, b, c)

  • Comandos en programacion 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, sepueden hacer operaciones.

    Las operaciones permitidas dependen del tipo dedato. Por ejemplo, con los numeros se puedenhacer las operaciones aritmeticas conocidas enmatematicas.

  • Operaciones con datos (II/II)

    Se denominan operadores a smbolos (como *, +)que indican que con los datos se debe realizar ciertaoperacion.

    En python los operadores son infijos, esto es, secolocan entre los datos sobre los que opera. Ejemplo:

    3 * 4

    En algunos lenguajes se puede extender el uso deoperadores 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 loslenguajes).

    Existe una precedencia de unos operadores sobreotros. 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 parentesis

    Las operaciones se pueden agrupar usando parentesis(como en las operaciones aritmeticas).

    Esto sirve para indicar que operaciones se realizanprimero (se van quitando los parentesis mas interioresal 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 deparentesis.)

  • Ejemplos de operaciones

    Por ejemplo: 3a7b

    se puede codificar

    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 parentesis

    La expresion: se codifica:

    (

    2 sin x+ cos y3 cos x sin y

    )4

    ((2*sin(x)+cos(y))/(3*cos(x)-sin(y)))**4

    ab(c+ d)log(a+ log b)

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

    f

    g + h

    2 sinx

    2 + y

    f/(g+h)/(2 *sin(x/(2+y)))

  • Comandos en programacion 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 llamadaprocedimiento o funcion), codifica un subalgoritmoque permite resolver una tarea especfica.

    Esto permite modularizar el codigo, haciendolomas facil de entender. Ademas, se usan subrutinaspreviamente 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 sedevuelve(n) al terminar su ejecucion.Una lista de parametros: conjunto de argumentos(pueden ser cero, uno o mas) que la funciondebe recibir para realizar su tarea.El codigo: conjunto de ordenes y sentencias quese deben ejecutar.

  • Algunas consideraciones sobre subrutinas

    Existe diversidad en la definicion de funciones ysubrutinas en los diversos lenguajes de programacion.

    Por ejemplo, los argumentos (parametros) pueden seraccedidos por valor, por referencia o por nombre.

    Ademas, las variables que se usan en las funciones ysubrutinas pueden tener caracter local o global.

    Glosaremos el tema con python.

  • Ejemplo de funcion (en python)

    (Notese el indentado y el caracter :)

    def circunferencia (r):# El radio, r, es un argumento

    pi = 3.1415926535897932a = pi*r*rl = 2*pi*r

    return a, l

  • Ejercicio A4 (para resolver en clase)

    Prepare una funcion en python que transforme lascoordenadas polares en coordenadas cartesianas yque devuelve esta ultimas.

  • Solucion al ejercicio A4

    def pol a rect (r, th):# El radio, r, y el angulo, th,# son argumentos (numeros reales)

    x = r*cos(th)y = r*sin(th)

    return x, y

  • Ejercicio propuesto A5

    (Este ejercicio se propone como tarea a entregar porel estudiante.)

    Prepare una funcion en python que utilice la formulade Stirling para aproximar el factorial de un numeroentero n (que se pasa como argumento).

    La funcion debe retornar el logaritmo neperiano delfactorial 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 predefinidaspreviamente, con el objeto de realizar calculos otareas de interes para muchos usuarios del lenguaje.

    Ejemplos: funciones matematicas, para manejargrandes cantidades de texto, para comunicarordenadores a distancia, etc.

  • Comandos en programacion imperativa

    Declaracion de tipos de dato.Entrada y salida.Operaciones con datos.Subrutinas y funciones.Condicionales.Bucles.

  • Cambiando la ejecucion secuencial

    La estructura secuencial solo permite codificaralgoritmos simples pues no se puede cambiar laejecucion del codigo en base a valores concretos delas variables.

    Por eso mismo los lenguajes poseen instruccionescondicionales, que permiten bifurcar la ejecuciondependiendo del valor de alguna variable.

  • Instrucciones condicionales

    Este tipo de instrucciones trabajan con datos de tipologico (tambien llamado booleano).

    Existen diversas instrucciones condicionales, como if(presente en casi todos los lenguajes), y case (oswitch...case) que esta en muchos lenguajes (perono en python, pero puede simularse facilmente concondicionales multiples).

  • Necesidad de las instrucciones condicionales

    Ejemplo:

    si llueve entoncesvamos al cine

    en caso contrariovamos a dar un paseo

    fin si

    llueve es una condicion logica (verdadero siesta lloviendo y falso si no).

  • Instrucciones condicionales en python (I/II)

    En el caso mas simple, se chequea un valor logico: sies verdadero se ejecuta una parte del codigo y si esfalso 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 otroslenguajes) usando else (no olvidarse del caracter :despues en python).

    fin si no hace falta codificarlo en python: acaba elfragmento de codigo desindentando.

    En python el indentado de las lneas es parte de lasintaxis.

  • Condicional simple

    (Notese el indentado y el caracter :)

    if condicion:# codigo que se ejecuta# si condicion es verdadera.........

    # codigo que se ejecuta despues

  • Condicional doble

    if condicion:# codigo que se ejecuta# si condicion es verdadera...

    else:# codigo que se ejecuta# si condicion es falsa...

    # codigo que se ejecuta despues

  • 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 signode un numero: 1.0 si es negativo, 0.0 si es nulo, y1.0 si es positivo.

  • Solucion 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 multiple

    if condicion1:

    # codigo que se ejecuta

    # si condicion1 es verdadera

    ...

    elif condicion2:

    # se ejecuta si condicion1 es falsa

    # y condicion2 es verdadera

    ...

    else:

    # codigo que se ejecuta

    # si ambas condiciones son falsas

    ...

    # codigo que se ejecuta despues

  • Ejercicio A7 (para resolver en clase)

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

    f(x, a, b, c) =

    0, x a,xaba

    , a < x b,cxcb

    , b < x c,

    1, c < x.

  • Solucion al ejercicio A7

    def f (x, a, b, c):

    # Debe ser a < b < c

    if x

  • Ejercicio propuesto A8 (I/III)

    (Este ejercicio se propone como tarea a entregar porel estudiante.)

    Despreciando el rozamiento del aire, la velocidad deescape de un cuerpo lanzado desde la superficie terrestrees:

    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 < vEdesde la superficie (despreciando el rozamiento del aire)alcanza una altura maxima:

    h =R

    1 (v/vE)2.

    Cuando v vE , entonces a una gran distancia de laTierra su velocidad final es:

    vf =

    v2 v2E .

  • Ejercicio propuesto A8 (III/III)

    Prepare un program en python que, tomando comodatos conocidos g y R (asignados directamente), nospida v por teclado, que calcule la velocidad de escape (yla imprima), y que

    si la velocidad es menor que la de escape imprimala 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 digaque el cuerpo escapa de la Tierra y que imprimala velocidad final.

  • Comandos en programacion imperativa

    Declaracion de tipos de dato.Entrada y salida.Operaciones con datos.Subrutinas y funciones.Condicionales.Bucles.

  • Repitiendo la ejecucion de codigo (bucles)

    En ocasiones debe repetirse parte del codigo unnumero de veces (conocido a priori o no). Para ellose utilizan los bucles.

  • Necesidad de los bucles (I/II)

    Ejemplo, para ir al cine se necesita:

    nos ponemos en la colahacer (cola)si llegamos a la ventanilla entoncescompramos la entradasalimos de hacer (cola)

    fin sifin hacerentramos al cine

  • Necesidad de los bucles (II/II)

    Como vemos, existe la necesidad de verificar unacondicion logica (en el ejemplo, si llegamos a laventanilla) para salir del bucle. (En otro caso el buclesera infinito.)

    Cada repeticion del bucle se denomina iteracion.

  • Tipos de bucles

    Existen dos tipos (principalmente) de bucles:

    los que se repiten un numero indeterminado deveces: while y repeat. . . until (o en su formaequivalente do. . . while).de los que se conoce previamente el numero deiteraciones, o bucle con contador: for.

  • Saliendo la ejecucion de un bucle

    A veces, la salida del bucle no se realiza al principio ofinal del bucle (depende evidentemente del algoritmocodificado).

    En esas ocasiones se necesita usar otras instrucciones,como break (salida del bucle directamente) ycontinue (continua con la siguiente iteracion,saltandose el codigo que falta hasta el final del bucle).

  • Bucle while (I/II)

    El bucle con un numero indeterminado de iteraciones masutilizado codifica:

    mientras condicion hacercodigo del interior del bucle

    fin hacer

    En python es:

    while condicion :codigo del interior del bucle

  • Bucle while (II/II)

    El chequeo de la condicion se realiza al principio: si lacondicion es falsa ya no se ejecuta el bucle, y se salta alcodigo 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 numeros enteros# cuyo cubo es menor que un lmite dado

    n3max = input("Introduzca el lmite ")n, n3 = 1, 1

    while n3 < n3max:print(n)n = n+1n3 = n**3

  • Ejercicio A9 (para resolver en clase)

    Prepare un fragmento de codigo en python queimprima las diez primeras longitudes de la serie deBalmer del hidrogeno (en nanometros):

    = 364.6n2

    n2 4, n > 2.

  • Solucion al ejercicio A9

    # Serie de Balmer del hidrogenon, nt = 3, 10

    while n

  • Ejercicio propuesto A10

    Prepare un programa en python que repita un buclepara simular una evolucion temporal, variando eltiempo t desde un instante inicial, ti , con un intervalodt , 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 almenos una vez:

    repetir

    codigo del interior del buclehasta que condicion (fin repetir)

    En python se puede codificar usando un bucle infinito:

    while True :

    codigo del interior del bucleif condicion : break

  • Ejercicio A11 (para resolver en clase)

    Prepare un programa que imprima los numeros cuyocubo es menor que un lmite dado usando un buclecon chequeo de condicion al final.

  • Solucion al ejercicio A11

    # imprime los numeros enteros# cuyo cubo es menor que un lmite dado

    n3max = input("Introduzca el lmite ")n = 1

    while True:print(n)n = n+1if n**3 > n3max: break

  • Bucle con salida intermedia

    En un bucle con salida intermedia existe unacondicion 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 parteif cond2 : breakcodigo del bucle segunda parte

  • Ejercicio propuesto A12

    Se quiere sumar la serie: S =

    n=0 zn, |z| > 1,

    tomando un numero de terminos n tal que |zn| < EPS,siendo este ultimo un valor pequeno, 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 unpunto dado de un bucle hasta el final y empezar otraiteracion nueva del bucle.

    while cond1 :codigo del bucle primera parteif cond2 : continuecodigo 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 porteclado un numero lmite, nmax, y que imprima losnumeros que son multiplos de 7 entre 1 y nmax.

    Use el comando continue.

    (En python la operacion a %b devuelve el resto dedividir a entre b.)

  • Solucion al ejercicio A13

    # multiplos de 7nmax = input("nmax ")n = 0

    while n < nmax:n = n+1if n %7 != 0: continueprint(n)

  • Bucle con contador (I/III)

    Este bucle esta controlado por una variable que se vacambiando segun un patron y se chequea frente a unvalor final.

    En algunos lenguajes, como C, el cambio en lavariable en el bucle for puede ser realizado de lamanera en que desee el programador.

    Realmente, en C no existe el bucle controladopor variable con un numero conocido a priori deiteraciones.

  • Bucle con contador (II/III)

    En muchos lenguajes existe un tipo de bucle cuyonumero de iteraciones es conocido a priori.

    Las iteraciones estan controladas por una variableque no se debe (en algunos lenguajes no se puede)modificar en el interior del bucle, sino solo al final delbucle de manera automatica.

    Un ejemplo de este bucle es el DO de las ultimasversiones de Fortran, y el bucle FOR...NEXT dellenguaje Basic.

  • Bucle con contador (III/III)

    Tendramos (NO es codigo python):

    para i = inicio hasta final incremento delta hacercodigo 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

    clasico mediante una funcion que nos devuelve una lista

    fija de valores que cumple un patron.

    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 queimprima las diez primeras longitudes de la serie deBalmer del hidrogeno (en nanometros):

    = 364.6n2

    n2 4, n > 2.

  • Solucion al ejercicio A14

    # Serie de Balmer del hidrogenont = 10

    for n in range(3, nt+1):n2 = n**2print(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,. . . , 1usando un bucle for y range de la manera adecuada.

  • Bucle for generico en python

    En python el bucle for esta preparado para que unavariable tome, en cada iteracion, los valores de loselementos de una lista:

    for x in L:interior del bucle

    En la primera iteracion x toma el valor de L[0] (primerelemento), 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 unalista de numeros, L.

    Tome, por ejemplo, la lista:

    L = [12, -3.0, 1, 0.0, -6.8]

  • Solucion al ejercicio A16

    # L es una lista conocidaL = [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 porel estudiante.)

    Sea una progresion geometrica, de razon r, conprimer termino a, con n terminos (incluyendo elprimero). Estos datos se piden por teclado.

    Prepare un programa que calcule e imprima la sumade los terminos de la progresion.

  • Ejercicio propuesto A18 (I/II)

    (Este ejercicio se propone como tarea a entregar porel estudiante.)

    Un metodo de resolucion de ecuaciones de la formaf(x) = 0, mediante iteraciones a partir de un valoraproximado x0 de la raz, se obtiene poniendo lafuncion en la forma x = g(x) e iterando:

    xn+1 = g(xn)

    hasta que |xn+1 xn| < EPS, siendo este ultimo unvalor pequeno, pongamos 1010.

  • Ejercicio propuesto A18 (II/II)

    El metodo no siempre converge (y hay que despejarla x de otra forma).

    Disene un programa en python que nos resuelvax3 = sin x, partiendo de un valor x0 = 1.0 usandoel metodo iterativo propuesto. El programa debeimprimir 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.