Introducció a la Programació

Què és programar?

  • Descriure formalment la solució genèrica d’un problema de manera que un ordinador pugui calcular una solució concreta a partir d’unes dades concretes.

  • Per programar calen habilitats de disciplines com

    matemàtiques:

    per tal d’expressar els càlculs en llenguatges formals,

    enginyeria:

    per tal de dissenyar components, assemblar-los en sistemes complexos i avaluar alternatives i

    ciència:

    per tal d’observar el comportament de sistemes complexos, formular hipòtesis i comprovar les prediccions.

Llenguatges de programació

Segons el nivell d’abstracció distingim:

Compiladors i intèrprets

  • Compilador: programa que tradueix un programa font (o codi font) a un programa objecte equivalent. Normalment,

    • el programa font està escrit en un llenguatge d’alt nivell i

    • el programa objecte en llenguatge màquina

  • Intèrpret: analitza i executa el programa font, sense traduir-lo abans a llenguatge màquina.

Python

Objecte i tipus

  • Les dades en Python es representen mitjançant objectes

  • Un objecte té associats un identificador, un tipus i un valor

  • El tipus d’un objecte determina el seu conjut de valors possibles i les operacions entre ells

Tipus numèrics

  • Valors de tipus enter (int)

    • valors literals: successió de dígits (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) precedits de signe (opcional)

      1285
      -5284327
      0
      
  • Valors de tipus real representats en coma flotant (float)

    • valors literals: successió de dígits amb punt decimal intercalat o escrits en notació científica (adaptada), precedits de signe (opcional)

      12.85
      -528.4327
      0.0
      3e-4        # 3 per 10 elevat a -4
      

Operadors i operands

  • Operadors: símbols que representen operacions o càlculs (suma, producte, …)

  • Operands: valors sobre els quals actuen els operadors

  • Operadors aritmètics

    • Unaris: negatiu (-), positiu (+). Tenen un operand i s’escriuen abans d’ell (prefix)

      >>> - 3
      -3
      >>> + 5
      5
      
    • Binaris: suma (+), resta (-), multiplicació (*), /, //, %, potenciació (**). Tenen dos operands i s’escriuen entremig d’ells (infix)

      >>> 3 + 4
      7
      >>> 3 - 4
      -1
      >>> 3 * 4
      12
      >>> 2 ** 3
      8
      
      • Quan un operand és de tipus int i l’altre float, Python converteix l’operand de tipus int a float abans de fer l’operació

        >>> 7.2 - 5
        2.2
        >>> 2*4.1
        8.2
        
  • Divisió real (/)

    >>> 9 / 4
    2.25
    
  • Quocient (//) i residu (%) de la divisió entera

    >>> 9 // 4
    2
    >>> 9 % 4
    1
    
    >>> (9 // 4)*4 + (9 % 4)     # pel teorema de la divisió entera
    9
    

Expressions

  • Un valor literal és una expressió

    >>> 3
    3
    
  • Un operador unari seguit d’una expressió és una expressió

    >>> - 5
    -5
    
  • Una expressió sequida d’un operador binari seguit d’una expressió és una expressió

    >>> 5**2
    25
    
  • Una expressió tancada entre parèntesis és una expressió

    >>> (3 + 4)
    7
    

Avaluació d’expressions

  • Un valor literal s'avalua al valor que representa

  • Una expressió tancada entre parèntesis s’avalua al valor de l’expressió

  • Un operador s’avalua al resultat de calcular l’operació sobre els seus operands.

  • L'ordre d’avaluació d’una expressió depèn de

    • els parèntesis

    • la prioritat o precedència dels operadors: elevar, multiplicació i divisió, suma i resta

      >>> 3 + 2 ** (3 - 1) * 5
      23
      >>> 3 + ((2 ** (3 - 1)) * 5)
      23
      
    • l'associativitat dels operadors amb la mateixa prioritat: d’esquerra a dreta excepte per elevar a una potència

      >>> 5 - 3 - 2
      0
      >>> (5 - 3) - 2
      0
      >>> 5 - (3 - 2)
      4
      
      >>> 2 ** 3 ** 4
      2417851639229258349412352
      >>> 2 ** (3 ** 4)
      2417851639229258349412352
      >>> (2 ** 3) ** 4
      4096
      
  • El resultat d’avaluar una expressió és un objecte amb el valor de l’expressió.

Variables

  • Una variable és un nom que es refereix a un objecte

  • Els noms de variables

    • Són arbitràriament llargs

    • Només poden contenir lletres, dígits i guions baixos (_)

    • Han de començar per una lletra o un guió baix

    • No poden coincidir amb cap paraula clau. Vegeu-ne la llista

  • Exemples de noms correctes:

    _abc
    lm1
    n_o
    _
    _1a
    h_3
    a94_3jl
    
  • Exemples de noms incorrectes:

    1xyz
    ab?
    b-a
    if
    @fgh
    

Assignació

  • La sintaxi de la sentència d'assignació és

    variable = expressió
    
  • Després d’executar l’assignació, la variable es refereix (o fa referència) a l’objecte a què s’ha avaluat l'expressió

  • L’operador d’assignació (=) no és commutatiu

  • Una variable és una expressió

  • Una variable s'avalua al valor de l'objecte a què es refereix

    >>> a = 4 * (5 - 2)
    >>> a
    12
    
  • Una variable pot deixar de referir-se a un objecte i passar a referir-se a un altre

    >>> a = 8
    >>> a
    8
    
  • Una variable es defineix (o queda definida) a la primera assignació que rep

Estat

  • L'estat és el conjunt de variables i objectes a què es refereixen, en un moment determinat de l’execució d’un programa

  • Diagrama d’estat: representació gràfica de l’estat

  • Els objectes als quals no es refereix cap variable es destrueixen.

Sentències

  • El codi font d’un programa s’organitza en sentències

  • Una assignació és una sentència

    >>> a = 3
    
  • Una expressió és una sentència

    >>> (5 - a)*8
    16
    
  • Un programa és una seqüència de sentències

  • Una sentència s’ha d’escriure en una línia (llevat de molt poques excepcions)

Flux d’execució seqüencial

Assignació múltiple

  • Sintaxi:

    variable 1, variable 2, variable 3... = expressió 1, expressió 2, expressió 3...
    
  • Primer s'avaluen totes les expressions i després s'assigna el resultat de cada una a la variable que li correspon

  • Exemple:

    >>> a, b = 5 - 2, 3e2
    >>> a
    3
    >>> b
    300.0
    
    >>> a, b = b, a        # intercanvi de dues variables
    >>> a
    300.0
    >>> b
    3
    

Comentaris

  • Els programes els executen els ordinadors, però els llegeixen els programadors.

  • Els comentaris van adreçats als programadors i el seu a objectiu és facilitar la lectura dels programes

  • Sintaxi #

    >>> # exemple d'expressió
    >>> 3   # valor literal de tipus int
    3
    
  • L'intèrpret descarta el text des del coixinet fins al final de la línia

Errors de programació

  • Els errors de programació (bugs) poden ser sintàctics, d’execució o semàntics

  • Un error sintàctic es produeix en analitzar la sentència i impedeix executar-la

    >>> ? + 5
    SyntaxError: invalid syntax
    
    >>> 5 * 2)
    SyntaxError: unmatched ')'
    
  • Un error d’execució es produeix durant l’execució de la sentència

    • La divisió per zero no està definida

      >>> 1/0
      Traceback (most recent call last):
        File "<pyshell#4>", line 1, in <module>
          1/0
      ZeroDivisionError: division by zero
      
    • Les variables que apareixen en una expressió han d’estar definides

      >>> f
      Traceback (most recent call last):
        File "<pyshell#21>", line 1, in <module>
          f
      NameError: name 'f' is not defined
      >>> f = -1
      >>> f
      -1
      
  • Un error semàntic es produeix quan el resultat d’un programa no és l’esperat

    • Càlcul incorrecte del tant per cent d’estudiants aprovats sobre el total

      >>> aprovats = 5
      >>> total = 10
      >>> total/aprovats*100
      200.0
      
  • Llistat d’errors comuns a Python

  • Correcció d’errors (debugging)

  • Pautes per evitar cometre errors i corregir-los.

Exercicis