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
Programación Procedural
       Tipos de Datos Abstractos fundamentales


Programación Procedural




                            Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Programación Procedural
       Tipos de Datos Abstractos fundamentales


Programación Procedural




                            Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Programación Procedural
       Tipos de Datos Abstractos fundamentales


Programación Procedural




                            Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Programación Procedural
         Tipos 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
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
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
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
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

Curso de Nivelación de Algoritmos - Clase 2

  • 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
  • 19.
    Programación Procedural Tipos 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
  • 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