You are on page 1of 10

Elisenda Oró Soler Octubre 2020

TEMA 1: INTRODUCCIÓ A LA PROGRAMACIÓ.


Definicions fonamentals
Algorisme: descripció de les accions a realitzar per aconseguir una solució correcta d’un problema, en un temps finit,
a partir d’una informació donada.

Acció: cada una de les tasques descrites en un procés que modifica els elements d’informació.

Instrucció: acció primitiva descrita en un llenguatge de programació.

Programa: seqüència de declaracions i instruccions escrites en un llenguatge de programació.

Llenguatge de programació: llenguatge en el que es representa un programa. Pot ser simbòlic (d’alt nivell o de baix
nivell) o llenguatge màquina.

Cicle de resolució de problemes amb l’ordinador

Estructura funcional de l’ordinador Unitat de Processament Central (CPU): per avaluar


Elements bàsics les expressions aritmètiques i lògiques. També
sincronitza i controla la resta de components, seguint
el procés descrit per l’algorisme.

Memòria: per guardar i recuperar la informació


usada en l’algorisme.

Canal d’entrada: comunica la màquina amb l’exterior


mitjançant la lectura. Generalment és el teclat de
l’ordinador.

Canal de sortida: comunica la màquina amb l’exterior


mitjançant l’escriptura. Generalment és la pantalla
de l’ordinador.

Una variable és una manera de referenciar un lloc de memòria que usa un programa. El lloc de memòria que
referencia pot contenir valors com nombres, text o tipus més complexos.

Els valors tenen tipus: enters, caràcters, etc. Quan parlem del tipus d’una variable ens referim al tipus del valor
que en aquest moment conté o referencia la variable.

El nom d’una variable és un identificador.

1
Elisenda Oró Soler Octubre 2020

Sentències primitives
Són aquelles que es poden realitzar directament, és a dir, que són bàsiques.

- Assignació: identificador = expressió - Lectura: identificador = input("Entra un número:")

- Avaluació o consulta: identificador - Escriptura: print("El valor és: ", identificador)

TEMA 2: VARIABLES, TIPUS DE DADES I EXPRESSIONS.


Variables
Els programes són procediments que manipulen informació per obtenir els resultats desitjats.

Per manipular la informació és necessari disposar d’algun lloc on emmagatzemar-la.

Definició 1
Variable: és una manera de referenciar un lloc de la memòria de l’ordinador on s’hi emmagatzema una
informació.

Usem una variable per indicar al programa que guardi alguna dada en un lloc de memòria (assignació) o que
recuperi alguna dada d’un lloc de memòria (avaluació o consulta).

Identificador: és el nom que li donem a una variable. Està compost per lletres, números o ’_’ (caràcter subratllat), però
ha de començar obligatòriament per una lletra.

Tipus: un tipus de dades defineix un conjunt de valors concrets que pot representar una dada i les operacions que es
poden fer sobre ells.

Els valors tenen tipus: enters, caràcters, etc. Quan parlem del tipus d’una variable ens referim al tipus del valor que en
aquest moment conté o referencia la variable.

Valor: el valor d’una variable és la informació concreta que referencia en el moment en què es consulta.

Accions primitives: assignació (recordatori)


.............................identificador = expressió.................................

Donar valor a una variable s’anomena assignar. S’usa el símbol = i no s’ha de confondre amb una equació matemàtica.
A l’esquerra del = hi ha el nom d’una variable i a la dreta un valor o una expressió. L’ordre és important!

1. S’avalua l’expressió i se n’obté un valor.

2. El valor obtingut ocupa un espai a memòria on s’emmagatzema; en avaluar l’expressió, el Python retorna la
.....referència d’aquest espai de memòria.

3. Assignació: es crea una associació entre el nom de la variable (identificador) i l’adreça de memòria d’aquest
....espai.

Podem assignar un valor a la mateixa variable tantes vegades com vulguem. L’efecte és que la variable, cada moment,
només referencia el darrer valor assignat.

Accions primitives: avaluació o consulta (recordatori)


...................................identificador.......................................

Per saber quin és el valor d’una variable en un moment donat, només hem d’escriure una expressió que contingui el
seu nom (o identificador).

2
Elisenda Oró Soler Octubre 2020
- Es recupera de la memòria el valor referenciat per la variable.

- La variable ha de tenir un valor prèviament.

- La variable pot formar part d’una expressió.

- Efectes:

1. El valor referenciat per la variable substitueix a efectes del càlcul a l’identificador.

2. El valor de la variable NO s’altera en l’avaluació.

Definició d’estat

Definició 2
El conjunt de la memòria de l’ordinador i els canals d’entrada i sortida defineixen l’entorn del programa.

Definició 3
El conjunt de valors de les variables i l’estat dels canals d’entrada i sortida en un moment donat defineixen l’estat
del programa.

Les accions van modificant l’estat per portar-nos de la precondició (estat inicial) a la postcondició (estat que volem a
l’acabar el programa o funció).

Tipus de dades
Els tipus de dades més habituals en els llenguatges de programació i que veurem en Python són:

Tipus enter: s’utilitza per representar valors numèrics enters


(positius o negatius).

- Valors: . . . , −4, −3, −2, −1, 0, 1, 2, 3, . . .

- Operadors interns: - (canvi signe), + , - , * , % , // , **

- Operadors externs: / , == , != , < , <= , > , >=

% representa el residu de la divisió Tipus real: s’utilitza per representar valors numèrics reals (nombres
entre dos enters. amb part decimal).
/ representa la divisió entre dos - Valors: nombre reals
nombres enters i normalment no és un
nombre enter. - Operadors interns: - (canvi signe), + , - , * , / , **

// representa el quocient (enter) de la - Operadors externs: == , != , < , <= , > , >=


divisió

Tipus caràcter: representa un valor alfanumèric.

- Valors: el conjunt finit de valors indivisibles que permeten construir textos. Informalment podem dir que
corresponen a les tecles del teclat (o combinació de tecles pitjades alhora).

- Operadors i funcions: == , != , ord() , chr() , < , <= , > , >=

- Els caràcters van sempre entre cometes simples. Exemples de sintaxi dels valors: ’a’, ’ ’, ’5’, ’_’

La funció ord(c) retorna l’enter que representa el número d’ordre del caràcter c. Això permet establir una
comparació d’ordre entre els caràcters que els operadors <=, >, >= implementen. L’enter que correspon a cada
caràcter es coneix com a codificació. N’hi ha vàries, sent la més coneguda la codificació ASCII.

3
Elisenda Oró Soler Octubre 2020
Conversió de tipus
Habitualment, variables amb valors d’un tipus no es poden operar amb variables que tinguin valors d’un tipus diferent.
Per tal de poder fer operacions entre valors de tipus diferents calen funcions de conversió:

- int(): converteix un nombre o una cadena de caràcters1 a enter.

- float(): converteix un nombre o una cadena de caràcters a real.

- str(): converteix a cadena de caràcters.

La conversió d’enter a real es fa automàticament quan és necessària. Per exemple: 6/2.0 = 3.0

La conversió és especialment necessària en la lectura de dades. Com que les variables no estan associades a cap tipus,
entrar pel teclat ’5’ i guardar-lo en una variable no ens aclareix si volíem l’enter 5, el real 5.0 o el caràcter ’5’.

Quan llegim pel teclat, hem de fer una conversió explícita de tipus. Si volem:
- Un enter: a = int(input("Entra la dada: ")) - Cadena o cadena de caràcters: a=str(input("Entra la dada:"))

- Un real: a = float(input("Entra la dada: ")) - O simplement: a = input("Entra la dada: ")

Tipus booleà o lògic


Valors: False, True (Valors de veritat "fals" i "cert" respectivament).

Operadors interns: not, and, or

Operadors externs: ==, !=

Operacions lògiques
Negació: not P (Valor de veritat contrari al de P).

Conjunció: P and Q (Cert si tots dos són certs alhora.)

Disjunció: P or Q (Cert si com a mínim un dels dos, P o Q, és cert.)

Lleis de De Morgan

La negació de la disjunció és equivalent a la conjunció de les negacions


not (a or b) = (not a) and (not b)

La negació de la disjunció és equivalent a la conjunció de les negacions


not (a and b) = (not a) or (not b)

Expressions
Una expressió és una combinació d’operadors i operands que es pot construir seguint les següents regles:

1. Un valor o una variable són expressions vàlides.

2. Si E és una expressió, (E) també ho és.

3. Si E és una expressió i • és un operador unari, •E també ho és.

4. Si E₁ i E₂ són expressions i • és un operador binari, E₁ • E₂ també ho és.

5. Si E₁, E₂, · · · , En són expressions i f és una funció, f(E₁, E₂, · · · , En) també ho és.

4
Elisenda Oró Soler Octubre 2020
Expressions: avaluació
Tota expressió es pot avaluar. El procés d’avaluació es fa seguint el següent procediment:

1. Primer sempre s’avalua tot el que estigui entre parèntesis (els parèntesis ens permeten canviar l’ordre de
precedència) i les crides a funcions.
2. S’avaluen els operadors segons el seu ordre de precedència.
3. Quan dos operadors tenen la mateixa prioritat, s’avaluen depenent de l’associativitat que tinguin els operadors
(columna dreta de la taula).

TEMA 3: ESTRUCTURES DE CONTROL I FUNCIONS.


Estructures de control
Hi ha tres formes bàsiques de composició de les accions que permeten definir l’ordre en què s’executen les
instruccions en un programa. Aquestes tres composicions són suficients per escriure qualsevol programa:

1. Composició seqüencial

2. Composició alternativa

3. Composició repetitiva

Composició seqüencial

La composició seqüencial consisteix en executar una seqüència d’accions, ordenadament, una darrere l’altra.

acció₁
acció₂
...
acción

Composició alternativa

La composició alternativa permet decidir quines accions s’executen en funció de quin sigui el resultat d’avaluar una
condició (expressió booleana).

5
Elisenda Oró Soler Octubre 2020
Composició alternativa amb elif

Existeix una estructura alternativa pels casos en què hi ha més de dues possibilitats: elif

Codi que escriu quin tipus de nombre enter s’ha llegit


del canal d’entrada: positiu, negatiu o zero.

Atenció amb la indentació!

En Python és important fixar-se en la indentació de les línies perquè ens indiquen si les instruccions estan o no dins
d’una estructura de control.

Codi 1 Codi 2

Execució codi 1: Execució codi 2:

Composició repetitiva

La composició repetitiva o iterativa permet repetir l’execució d’un conjunt d’accions un nombre determinat de
vegades o mentre es compleixi una determinada condició.

Codi que escriu els 10 primers nombres naturals

Codi que calcula el factorial d’un nombre enter positiu


donat

Observacions:

1. En el disseny de codis on hi ha estructures repetitives (també anomenades estructures iteratives o bucles) s’ha
de tenir en compte que la condició deixi de complir-se en algun moment per tal de poder sortir de les repeticions.

2. En el tema següent s’expliquen procediments per dissenyar estructures repetitives.

3. Existeixen d’altres estructures repetitives que veurem també més endavant.

6
Elisenda Oró Soler Octubre 2020
Funcions

Definició 1
En programació, una funció és un tros de codi que realitza un càlcul determinat, i que té un nom pel qual podem
cridar-la sempre que necessitem fer el càlcul.

Entre les utilitats d’organitzar els programes en funcions, destaca la possibilitat de la reutilització del codi en diferents
llocs del programa i en d’altres aplicacions.

Definició de funcions

Documentació d’una funció

És una bona política documentar les funcions que definim. Per això cal indicar entre tres cometes dobles (" " "):

1. Resum: breu explicació del que fa la funció.

2. Precondició: condicions que han de satisfer-se just abans de començar l’execució del codi de la funció
Normalment fa referència a la informació (paràmetres) que li passem a la funció.

3. Postcondició: condicions que han de satisfer-se just després d’acabar l’execució del codi de la funció.
Normalment fa referència a la informació que retorna la funció.

El codi d’una funció

- El conjunt d’accions que estan dins de la funció s’anomena Cos de la funció. Aquestes accions fan els càlculs que
necessita la funció per generar el seu resultat, a partir de les dades (paràmetres) que li hàgim donat.

- Dins d’una funció podem escriure les sentències primitives que vulguem unides amb les estructures de control
(seqüencial, condicional i/o repetitiva) i també fer crides a d’altres funcions.

- El resultat és retornat per la funció, al punt on s’hagi fet la crida, mitjançant la instrucció return.

- En Python, les funcions poden retornar un o més resultats, però també poden no retornar res. Més endavant veurem
exemples d’aquests diversos casos.

Crida a funcions

Definir una funció no és el que mateix que cridar-la o utilitzar-la. En Python, per cridar una funció usarem aquesta
sintaxi:

La variable de recollida és on guardarem el resultat del càlcul tornat per la funció.

Finalment, executem el programa:

7
Elisenda Oró Soler Octubre 2020
Paràmetres d’una funció

Definició 2
Els paràmetres d’una funció són les peces d’informació que hem de donar a la funció per tal que pugui fer el càlcul
que li demanem.

Per exemple, per calcular l’àrea d’una circumferència és necessari saber el seu radi, per tant, si dissenyem una funció
area que faci aquest càlcul, el radi serà un paràmetre de la funció (en aquest cas, a més, l’únic). Els paràmetres d’una
funció vénen definits en la capçalera de la mateixa:
def nom_funció (par_1, ... ,par_n):

Objectes mutables i immutables

En Python, les variables són noms de referències a objectes que estan a la memòria.

Els objectes que tenen valors que poden canviar s’anomenen mutables; els objectes que tenen valors que no es poden
canviar s’anomenen immutables.

La mutabilitat d’un objecte depèn del seu tipus; nombres, booleans, cadenes i tuples són immutables mentre que
llistes i diccionaris són mutables.

1. Objectes immutables: Un cop creats, no es poden modificar. Si una variable fa referència a un objecte
immutable i li assignem un nou valor, estem fent que la variable referenciï un altre objecte (no modifiquem el
que referenciava abans). Tipus d’objectes immutables que hem vist: int (enters), float (reals), str (cadenes de
caràcters) i bool (booleans).
2. Objectes mutables: Un cop creats, poden ser modificats. Si una variable fa referència a un objecte mutable i el
modifiquem, estem modificant l’objecte que teníem a memòria de forma permanent. La variable segueix fent
referència al mateix objecte, però l’objecte ha canviat. Tipus d’objectes mutables que veurem: list (llistes).

Pas de paràmetres en Python

Assignar un objecte a una variable vol dir que la variable referencia al lloc de memòria on està l’objecte.

Un pas de paràmetre és una assignació:

1. La variable que correspon a un paràmetre formal (nom de la variable amb què treballa la funció), passa a
referenciar el valor apuntat pel paràmetre real (variable que conté la informació necessària per fer el càlcul).

La variable que correspon a un paràmetre formal només existeix dins del cos de la funció.

2. Per tant, els valors creats o modificats dins d’una funció, si volem veure’ls al sortir de la funció cal que hi tinguem
un accés des de fora.

Per ara treballarem amb objectes immutables, per tant, les modificacions que es facin als paràmetres dins la funció no
es mantindran en sortir de la funció.

8
Elisenda Oró Soler Octubre 2020
1. La variable a és un paràmetre real (variable que conté la informació necessària per fer el càlcul).

2. En el moment de la crida, el paràmetre n rep una referència al valor apuntat per la variable a. Tant a com n
referencien el mateix lloc on hi ha el valor 10.

3. n és un paràmetre formal (el nom de la variable amb què treballa la funció).

4. Quan n es modifica dins de la funció això fa que referenciï una altra zona de la memòria on hi ha el valor 20. Recordeu
l’operació d’assignació.

5. A l’acabar l’execució de la funció es retorna el valor de n que s’assigna a dup. a no ha canviat de valor.

TEMA 4: SEQÜÈNCIES I ESQUEMES ITERATIUS.


Seqüències

Definició 1
Una seqüència és una llista ordenada d’elements, on n’hi ha un de primer (sempre que no sigui la seqüència
buida) i un de darrer (normalment - vegeu més endavant).

Les seqüències apareixen en molts tipus de problemes. De fet, sempre que resolem un problema usant una estructura
repetitiva, estem tractant una seqüència.

Exemples de problemes on es tracten seqüències:

1. Calcular el factorial d’un nombre.


2. Calcular la mitjana d’una seqüència de valors donats.
3. Comprovar si un nombre és primer.

Esquemes sobre seqüències


Qualsevol algorisme que es pot plantejar sobre seqüències pertany a una de les dues classes següents:

- Recorregut: algorismes que recorren i tracten tots els elements d’una seqüència per realitzar un càlcul.

- Cerca: algorismes que recorren els elements d’una seqüència buscant un element que compleixi una propietat
determinada.

Per dissenyar algorismes d’aquest tipus, és pràctic utilitzar esquemes coneguts de solució dels mateixos.

Definició 2
Un esquema és una plantilla de solució d’un problema presentat en format algorísmic, de manera que es pot
aplicar a un conjunt de problemes similars simplement adequant-lo al problema particular que es vulgui
solucionar.

El disseny de programes mitjançant esquemes té dues fases:

1. Identificació del problema entre mans i per tant de l’esquema a fer servir per solucionar-lo.
2. Adaptació de l’esquema al problema particular que es vulgui resoldre.
Entre els avantatges de fer servir esquemes es compten:

1. El disseny ja no recau en la inspiració sinó en la identificació correcta del problema.


2. Si l’adaptació es fa correctament, el programa funcionarà doncs l’esquema és correcte.

9
Elisenda Oró Soler Octubre 2020
Esquemes de recorregut

L’esquema de recorregut s’aplica en els problemes on s’han de tractar tots els elements d’una seqüència.

L’esquema genèric de recorregut és el següent:

Exemples:

1. Mostrar per pantalla tots els múltiples de 5


menors de 1000.
2. Sumar tots els elements d’una seqüència
d’enters.
3. Mostrar per pantalla les vocals d’una cadena de
caràcters.
La darrera línia, tractament_final, és opcional. 4. ...

Esquemes de cerca

L’esquema de cerca s’aplica en els problemes on s’ha de determinar si existeix un element en una seqüència que
compleixi una propietat donada.

L’esquema genèric de cerca és el següent:

Exemples:

1. Comprovar si un nombre és
primer.
2. Determinar si una seqüència
d’enters donada està ordenada
de forma creixent.
Una altra versió de l’esquema que fa servir una variable booleana per
3. Determinar si en una cadena
recordar si l’element s’ha trobat, és la següent: de caràcters hi ha alguna
paraula que comenci per la
lletra ’p’.
4. ...

10

You might also like