In [1]:
"""
IPython Notebook v4.0 para python 2.7
Librerías adicionales: Ninguna.
Contenido bajo licencia CC-BY 4.0. Código bajo licencia MIT. (c) Sebastian Flores.
"""

# Configuracion para recargar módulos y librerías 
%reload_ext autoreload
%autoreload 2

from IPython.core.display import HTML

HTML(open("style/iwi131.css", "r").read())


Out[1]:






IWI131

Programación de Computadores

Sebastián Flores

Resumen de la clase pasada

  • Reglas de evaluación
  • Curso piloto
  • Python es fácil y práctico

¿Ya instalaron python en sus computadores?

¿Qué contenido aprenderemos?

  • 1- Modelamiento de un problema
  • 2- Algoritmos
  • 3- Ejemplo de problemas

¿Porqué aprenderemos ese contenido?

  • Modelamiento de un problema -> herramienta transversal en ingeniería.
  • Algoritmo -> herramienta transversal en informática.
  • Ejemplo de problemas -> motivación para el ramo.

Sitio web del ramo

1- Modelamiento

¿Cómo se modela un problema? (hint: 3 pasos)

  • Entrada de datos
  • Procesamiento de datos
  • Salida de datos

2- Algoritmo

¿Que es un algoritmo?

Secuencia de pasos para resolver un problema.

¿Ejemplos?

  • Recetas de cocina
  • Cambiar un neumático
  • Publicar una foto en facebook
  • etc.

2- Algoritmo

¿Que es un programa (computacional)?

Secuencia de instrucciones descritas en un lenguaje que puede ser entendido por el computador.

Es decir

Un algoritmo expresado en un lenguaje computacional.

3- Ejemplos

Ejemplo de problema

  • ¿Dada una funcion lineal $y = ax + b $, ¿cómo encontramos los ceros de la función?
  • ¿Dada una funcion cualquiera $y=f(x)$, ¿cómo encontramos los ceros de la función?

3- Ejemplos

Ejemplo de problema

  • Orden:
    • Dado un conjunto de números, ¿cómo podemos obtener los números ordenados de mayor a menor?
  • Mínimo y Máximos:
    • Dado un conjunto de números, ¿Cómo podemos obtener el menor o el mayor entre ellos?
  • Vendedor Viajero:
    • Dado un conjunto de ciudades, ¿cómo podemos encontrar el camino más corto que une todas las ciudades sin repetir?

3- Ejemplos

Ejemplo de problema

  • ¿Dado un mensaje de email, cómo podemos clasificarlo en spam o no spam?

3- Ejemplos

Ejemplo de problema

  • ¿Dadas las mediciones de sismógrafos, cómo podemos predecir en cuáles ciudades hay que emitir una alerta de tsunami?

3- Ejemplos

Ejemplo de problema

Dadas ciertas mediciones de laboratorio...

  • ¿Cómo podemos calcular automáticamente el error instrumental?
  • ¿Cómo podemos ajustar los valores a un modelo?
  • ¿Cómo podemos graficar los resultados?

Respuesta

  • Computacionalmente.
  • En este curso enseñaremos principios generales de programación, utilizando el lenguaje python.
  • Todo lo anterior se puede realizar en python (y sus librerías), aunque en este curso solamente los principios básicos.

3- Ejemplos

Definición

Un número natural $n$ se llama primo si no existen otros números naturales que lo dividan exactamente.

Un número natural que no es primo se llama compuesto.

Ejercicio

Diseñar un algoritmo que decida si un número es primo o compuesto.

Ejemplos

  • Ejemplo de números primos: 2, 3, 5, 7, 9, 11, 13, ...

  • Ejemplo de números compuestos: 4, 20, 27, ...

Descripción del problema

¿Cuales son las etapas de nuestro problema?

  • Entrada de datos:
    • Un número natural $n$
  • Procesamiento de datos:
    • Algoritmo para decidir si es primo o compuesto.
  • Salida de datos:
    • Imprimir en pantalla "es primo" o "es compuesto".

Solución en lenguaje natural

  • Recorrer todos los enteros entre 2 y n-1.
  • Si al menos uno de estos números es divisor de n, entonces n es compuesto. Si no, es primo.

Solución en diagrama de flujo

Solución en pseudocódigo

leer n es_primo = verdadero d=2 mientras d menor n: si n es divisible por d: es primo = falso d=d+1 si es primo es verdadero: escribir "n es primo" o si no: escribir "n es compuesto"

Solución en código

Hint: probar con 20, 1001, 10000000 y 15485863


In [18]:
n = int(raw_input('Ingrese n: '))
es_primo = True
d = 2
while d < n:
    if n % d == 0:
        es_primo = False
    d = d + 1
if es_primo:
    print n, 'es primo'
else:
    print n, 'es compuesto'


Ingrese n: 1001
1001 es compuesto

Solución en código - optimización

Hint: probar con 10000000 y 15485863


In [20]:
n = int(raw_input('Ingrese n: '))
es_primo = True
d = 2
while d < n and es_primo==True:
    if n % d == 0:
        es_primo = False
    d = d + 1
if es_primo:
    print n, 'es primo' 
else:
    print n, 'es compuesto'


Ingrese n: 15485863
15485863 es primo

Solución en código - optimización (2)

Hint: probar con 15485863


In [22]:
n = int(raw_input('Ingrese n: '))
es_primo = True
d = 2
while d <= n**0.5 and es_primo==True:
    if n % d == 0:
        es_primo = False
    d = d + 1
if es_primo:
    print n, 'es primo' 
else:
    print n, 'es compuesto'


Ingrese n: 25
25 es compuesto

Resumen

  • Modelamiento de un problema: 3 etapas.
  • Definición de algoritmo y programa computacional.
  • Ejemplo para decidir si un número es primo o compuesto.

Próxima clase

  • Diagrama de Flujo