23
Programación Procedural Tipos de Datos Abstractos fundamentales Curso de Nivelación de Algoritmos Clase 2 Lic. Ernesto Mislej [email protected] Maestría y Carrera de Especialización en Explotación de Datos y Descubrimiento de Conocimiento 26 de marzo de 2008 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Curso de Nivelación de Algoritmos - Clase 2

Embed Size (px)

Citation preview

Page 1: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Curso de Nivelación de AlgoritmosClase 2

Lic. Ernesto [email protected]

Maestría y Carrera de Especialización en Explotación de Datos y Descubrimientode Conocimiento

26 de marzo de 2008

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 2: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 3: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 4: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 5: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> # Números enteros>>> 2+24>>> (50-5*6)/45>>> 7/32>>> 7/-3-3

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 6: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> # Números reales

>>> 3 * 3.75 / 1.57.5>>> 7.0 / 23.5

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 7: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

Memoria ¿Dónde residen los datos?Variable ¿Es posible modificar los valores?

Codificación Unos y ceros. Tipo de datos. Enteros, reales,caracteres . . .

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 8: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> # El signo = se usa para la asignaciónde un valor a una variable

>>> width = 20>>> height = 5*9>>> width * height900

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 9: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> # Strings

>>> print "Hola mundo"Hola mundo

>>> mensaje = "Tengo sueño">>> print mensajeTengo sueño

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 10: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> # Condiciones

>>> a = 1 # Ojo!, Asignación!>>> b = 2>>> a < bTrue>>> a <= b # Menor o igualTrue>>> a == bFalse>>> a < b and a > bFalse

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 11: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> # Ciclos:

>>> i = 0>>> while i < 5:... print i... i = i + 1 #Ojo con los ciclos infinitos!...01234

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 12: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Ejercicios

I Imprimir los objetos de una listaI Imprimir el primer elemento de una listaI Imprimir el último elemento de una listaI Imprimir los índices pares de una listaI Imprimir los objetos de una lista de manera reversaI Imprimir la sumatoria de una lista de números

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 13: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Ejercicios

I Imprimir la tabla del 7I Imprimir la mayor potencia de 2 de 3 dígitosI Imprimir el número menor una listaI Imprimir la representación binaria de un númeroI Decir si una palabra es capicúaI Dado 2 palabras distintas, imprimir la palabra anterior en el

diccionario

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 14: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> a = "aburrido">>> b = "aburrición">>> i = 0>>> while a[i] == b[i]:>>> i = i + 1>>> if a[i] < b[i]:>>> print a>>> else:>>> print b

# y si pueden ser iguales?

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 15: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> # funciones

>>> def func1 (a):>>> return a + 1

>>> func1 (4)5

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 16: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Programación Procedural

>>> # funciones

>>> def func2 (a,b):>>> return a + b

>>> func2 (10, 5)15

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 17: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Ejercicios

I Escribir una función que devuelva la distancia (x,y) al (0,0)I Dado 2 listas, lat y long, imprimir cuál coordenada está más

cerca del (0,0)I Dada esas listas imprimir el par de coordenadas más cercanasI Intercalar 2 listas ordenadas para formar otra lista ordenadaI Sumar 2 polinomiosI Multiplicar 2 polinomios

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 18: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

Tipos de Datos Abstractos fundamentales

Listas Acceso a los elementos aleatoriamente, por un índiceSecuencias Acceso secuencial a los elementos

Pilas Acceso únicamente al TopeColas Acceso únicamente a la Cola

Conjuntos Sin orden y ni repetición! Acceso mediantecuantificadores: ∃, ∀ . . .

Diccionarios Acceso por clave

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 19: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

TDA fundamentales - Pilas

>>> stack = [3, 4, 5]>>> stack.append(6)>>> stack.append(7)>>> stack[3, 4, 5, 6, 7]>>> stack.pop()7>>> stack[3, 4, 5, 6]>>> stack.pop()6>>> stack.pop()5>>> stack[3, 4]

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 20: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

TDA fundamentales - Colas

>>> queue = ["Eric", "John", "Michael"]>>> queue.append("Terry") # Terry arrives>>> queue.append("Graham") # Graham arrives>>> queue.pop(0)’Eric’>>> queue.pop(0)’John’>>> queue[’Michael’, ’Terry’, ’Graham’]

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 21: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

TDA fundamentales - Conjuntos

>>> basket = [’apple’, ’orange’, ’apple’, ’pear’,’orange’, ’banana’]>>> fruit = set(basket)>>> fruitset([’orange’, ’pear’, ’apple’, ’banana’])>>> ’orange’ in fruitTrue>>> ’crabgrass’ in fruitFalse

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 22: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

TDA fundamentales - Conjuntos

>>> a = set(’abracadabra’)>>> b = set(’alacazam’)>>> aset([’a’, ’r’, ’b’, ’c’, ’d’])>>> a - bset([’r’, ’d’, ’b’])>>> a | bset([’a’, ’c’, ’r’, ’d’, ’b’, ’m’, ’z’, ’l’])>>> a & bset([’a’, ’c’])>>> a ^ b #o exclusivoset([’r’, ’d’, ’b’, ’m’, ’z’, ’l’])

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 23: Curso de Nivelación de Algoritmos - Clase 2

Programación ProceduralTipos de Datos Abstractos fundamentales

TDA fundamentales - Diccionarios

>>> tel = {’jack’: 4098, ’sape’: 4139}>>> tel[’guido’] = 4127>>> tel{’sape’: 4139, ’guido’: 4127, ’jack’: 4098}>>> tel[’jack’]4098>>> del tel[’sape’]>>> tel[’irv’] = 4127>>> tel{’guido’: 4127, ’irv’: 4127, ’jack’: 4098}>>> tel.keys()[’guido’, ’irv’, ’jack’]>>> tel.has_key(’guido’)True>>> ’guido’ in telTrue Lic. Ernesto Mislej Curso de Nivelación de Algoritmos