1. Programación Procedural
Tipos de Datos Abstractos fundamentales
Curso de Nivelación de Algoritmos
Clase 2
Lic. Ernesto Mislej
emislej@dc.uba.ar
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
2. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
3. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
4. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
5. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
>>> # Números enteros
>>> 2+2
4
>>> (50-5*6)/4
5
>>> 7/3
2
>>> 7/-3
-3
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
6. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
>>> # Números reales
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
7. Programación Procedural
Tipos 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
8. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
>>> # El signo = se usa para la asignación
de un valor a una variable
>>> width = 20
>>> height = 5*9
>>> width * height
900
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
9. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
>>> # Strings
>>> print "Hola mundo"
Hola mundo
>>> mensaje = "Tengo sueño"
>>> print mensaje
Tengo sueño
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
10. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
>>> # Condiciones
>>> a = 1 # Ojo!, Asignación!
>>> b = 2
>>> a < b
True
>>> a <= b # Menor o igual
True
>>> a == b
False
>>> a < b and a > b
False
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
11. Programación Procedural
Tipos de Datos Abstractos fundamentales
Programación Procedural
>>> # Ciclos:
>>> i = 0
>>> while i < 5:
... print i
... i = i + 1 #Ojo con los ciclos infinitos!
...
0
1
2
3
4
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
12. Programación Procedural
Tipos de Datos Abstractos fundamentales
Ejercicios
Imprimir los objetos de una lista
Imprimir el primer elemento de una lista
Imprimir el último elemento de una lista
Imprimir los índices pares de una lista
Imprimir los objetos de una lista de manera reversa
Imprimir la sumatoria de una lista de números
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
13. Programación Procedural
Tipos de Datos Abstractos fundamentales
Ejercicios
Imprimir la tabla del 7
Imprimir la mayor potencia de 2 de 3 dígitos
Imprimir el número menor una lista
Imprimir la representación binaria de un número
Decir si una palabra es capicúa
Dado 2 palabras distintas, imprimir la palabra anterior en el
diccionario
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
14. Programación Procedural
Tipos 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
15. Programación Procedural
Tipos 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
16. Programación Procedural
Tipos 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
17. Programación Procedural
Tipos de Datos Abstractos fundamentales
Ejercicios
Escribir una función que devuelva la distancia (x,y) al (0,0)
Dado 2 listas, lat y long, imprimir cuál coordenada está más
cerca del (0,0)
Dada esas listas imprimir el par de coordenadas más cercanas
Intercalar 2 listas ordenadas para formar otra lista ordenada
Sumar 2 polinomios
Multiplicar 2 polinomios
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
18. Programación Procedural
Tipos de Datos Abstractos fundamentales
Tipos de Datos Abstractos fundamentales
Listas Acceso a los elementos aleatoriamente, por un índice
Secuencias Acceso secuencial a los elementos
Pilas Acceso únicamente al Tope
Colas Acceso únicamente a la Cola
Conjuntos Sin orden y ni repetición! Acceso mediante
cuantificadores: ∃, ∀ . . .
Diccionarios Acceso por clave
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
20. Programación Procedural
Tipos 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
21. Programación Procedural
Tipos de Datos Abstractos fundamentales
TDA fundamentales - Conjuntos
>>> basket = [’apple’, ’orange’, ’apple’, ’pear’,
’orange’, ’banana’]
>>> fruit = set(basket)
>>> fruit
set([’orange’, ’pear’, ’apple’, ’banana’])
>>> ’orange’ in fruit
True
>>> ’crabgrass’ in fruit
False
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
22. Programación Procedural
Tipos de Datos Abstractos fundamentales
TDA fundamentales - Conjuntos
>>> a = set(’abracadabra’)
>>> b = set(’alacazam’)
>>> a
set([’a’, ’r’, ’b’, ’c’, ’d’])
>>> a - b
set([’r’, ’d’, ’b’])
>>> a | b
set([’a’, ’c’, ’r’, ’d’, ’b’, ’m’, ’z’, ’l’])
>>> a & b
set([’a’, ’c’])
>>> a ^ b #o exclusivo
set([’r’, ’d’, ’b’, ’m’, ’z’, ’l’])
Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
23. Programación Procedural
Tipos 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 tel
True Lic. Ernesto Mislej Curso de Nivelación de Algoritmos