Logo

Programació 3

Codi: 107892
Crèdits: 6
2026/2027
Titulació Tipus Curs
Enginyeria Informàtica OB 2

Professor/a de contacte

Nom :
Gemma Sanchez Albaladejo
Correu electrònic :
gemma.sanchez@uab.cat

Equip docent

Roberto Ferrero Pintor
Daniel Soto Alvarez

Idiomes dels grups

Podeu consultar aquesta informació al final del document.

Prerequisits

L'assignatura no pot tenir cap prerequisit oficial per normativa. Però els estudiants que no han cursat i aprovat prèviament les assignatures de Programació 1 i Programació 2, suspenen en major proporció aquesta assignatura. Per això es recomana insistentment que l'estudiant hagi cursat i superat satisfactòriament les assignatures prèvies de Programació 1 i Programació 2 així com Matemàtica Discreta. Per tant, està familiaritzat amb les estructures bàsiques i avançades de la programació, Orientació a objectes i el concepte de graf amb els diferents mètodes de recorregut sobre ells.

Objectius

Aquesta assignatura forma part de la matèria Algorísmica i informació i s’ha de veure com la continuació lògica de l’assignatura Programació 2 i la continuació pràctica de l’assignatura de Matemàtica Discreta. L’objectiu bàsic és aprofundir en les nocions de programació orientada a objectes introduïdes a Programació 2 i ampliar-les amb altres conceptes de programació i altres estructures de dades més complexes així com algorismes eficients per recorre-les. S'aprofundirà en el concepte d'objectes treballant en profunditat les plantilles de classes (templates) i l'herència. S’introduirà el concepte d’algorisme recursiu amb algorismes recursius simples i més complexos com els relacionats amb recorreguts d'arbres i grafs. A més s’introduiran algorismes de cerca i ordenació eficients i s'aprofundirà en el concepte de cost temporal i espacial d’un algorisme. Al finalitzar el curs l’estudiant ha de ser capaç de dissenyar i programar solucions a problemes complexos de forma òptima. D’aquesta forma, els objectius formatius que es proposen per a l’assignatura són els següents:

  • Ser capaç d'analitzar un problema complex, dissenyar una solució òptima, implementar-la, calcular el seu cost i provar-la.
  • Entendre i saber utilitzar estructures de dades complexes com arbres, grafs etc. i utilitzar-les correctament i d’una manera eficient per resoldre problemes algorísmics complexes.
  • Entendre i aplicar correctament els principis avançats de la programació orientada a objectes: templates, classes abstractes, funcions virtuals.
  • Dotar l'alumne de la capacitat de disseny d'algorismes per a la resolució de problemes complexos, veient algorismes complexos de recorregut i cerca en estructures de dades complexes. A més d’analitzar la complexitat temporal i espacial per tal de triar la solució que més s’adapti a les necessitats de cada moment.
  • Introduir el concepte de recursivitat i la seva aplicació al recorregut d’estructures complexes recursives, a més de ser capaç d’analitzar la complexitat d’algorismes recursius.
  • Programar en un llenguatge de programació real i ser capaç de depurar els propis programes.
  • Desenvolupar els programes seguint unes normes d'estil tendents a aconseguir programes de qualitat. Dins d’aquestes normes d'estil s’engloben aquelles que faciliten la comprensió del codi, com poden ser l'ús de comentaris, sagnar el codi, la utilització de noms adequats per variables i funcions, etc. I l’ús d’excepcions.

Resultats d'aprenentatge

  • CM19 (Crear les estructures de dades més adequades en el disseny i la implementació d’algorismes.) Crear les estructures de dades més adequades en el disseny i la implementació d’algorismes.
  • KM20 (Identificar les principals estructures de dades i estructures de recursivitat en la definició d’algorismes.) Identificar les principals estructures de dades i estructures de recursivitat en la definició d’algorismes.
  • SM23 (Analitzar les estructures de dades utilitzades en el disseny d’algorismes.) Analitzar les estructures de dades utilitzades en el disseny d’algorismes.

Continguts

0. Introducció

Objectius i presentació de l’assignatura. Repàs de Programació Orientada a Objectes i Estructures de Dades Dinàmiques.

1. Orientació a objectes

Paradigma d’objectes avançat. Templates. Herència, classes abstractes, funcions virtuals i polimorfisme.

2. Complexitat en algorismes iteratius

Complexitat espaial i temporal. Com calcular la complexitat a algorismes iteratius.

3. Estructures de dades no lineals. Hash

Tècniques de “Hashing”. Matrius hash i llistes hash. Funcions hash.

4. Recursivitat i Algorismes d’ordenació

Introducció als algorismes recursius. Mètode de la bombolla, QuickSort, MergeSort. Recursivitat. Càlcul complexitat.

5. Estructures de dades no lineals. Grafs

Representacions i recorreguts. BFS, DFS, Resolució de problemes amb grafs.

6. Estructures de dades no lineals. Arbres.

Definició i representació d'un arbre. Recorreguts d'arbres. Binary Heaps. Red-Black Tree.

7. Conceptes bàsics de Python.

Conceptes bàsics de programació en Python.

Activitats formatives i Metodologia

Títol Hores ECTS Resultats d'aprenentatge
Treball autònom 46 1,84 CM19, KM20, SM23
Classes presencials 50 2 CM19, KM20, SM23
Preparació prèvia de les classes. 34 1,36 CM19, KM20, SM23
Tutories 1 0,04 CM19, KM20, SM23
Estudi Individual 13 0,52 CM19, KM20, SM23

La metodologia docent de l’assignatura parteix del principi que diu que “programar és l’única forma d’aprendre a programar” i, per tant, estarà centrada principalment en el treball pràctic de l’estudiant. També es basa en aprofitar al màxim el temps presencial que l’estudiant està amb el professor. D’aquesta manera conceptes teòrics descriptius, fàcilment assolits per l’estudiant mitjançant la visualització de vídeos o lectura d’articles, es faran de manera autònoma (i guiada) per part de l’estudiant. Mentre que la posada en pràctica d’aquests conceptes o l’ampliació dels mateixos es faran a classe amb ajuda del professor. L'objectiu principal de l'assignatura és que l'estudiant sàpiga resoldre un problema donat, de manera eficient, utilitzant estructures de dades complexes, si cal. Per aquesta raó l'aprenentatge es centrarà en acompanyar a l'estudiant en la seva tasca de resolució de problemes a partir d'uns conceptes teòrics estudiats prèviament de manera autònoma. Es farà servir principalment el llenguatge de programació C++, i es donaran alguns conceptes de programació en python.

La metodologia general de l'assignatura es pot dividir en tres fases:

  • Preparació de la classe: l'objectiu d'aquesta fase és que l'alumnat pugui aprendre els conceptes que es treballaran a la sessió següent mitjançant diverses activitats ofertes pel professorat com pot ser el visionat de vídeos, la lectura de textos, etc.
  • Classe presencial: l'objectiu d'aquesta fase és la de consolidar els conceptes vistos i posar-los en valor dins del context de l'assignatura. El professorat vetllarà perquè l'alumnat aprofundeixi en aquests conceptes mitjançant exercicis (més o menys) guiats durant la sessió, i afegint nous matisos als conceptes apresos de manera autònoma quan sigui necessari. D’aquesta manera la classe presencial s’aprofita molt més donat que els conceptes descriptius ja són coneguts per l’estudiant i es pot entrar de ple en la seva utilització i ampliació que són els punts en els quals l’estudiant pot necessitar més l’ajuda del professor. A les classes presencials és necessari portar un portàtil a no ser que es facin en aules que ja disposin d'ordinadors.
  • Treball autònom: per tal que l'alumnat agafi desimboltura en la utilització d'estructures complexes i els algorismes associats a les mateixes aquest haurà de fer una part del treball pel seu compte, ja siguin exercicis solts o dins d'un projecte.

El treball del projecte s’haurà de fer en grups de 2 persones.

La gestió de la docència de l'assignatura es farà a través de la plataforma de campus virtual (https://cv.uab.cat/) i potser Caronte (http://caronte.uab.cat/).

Nota: es reservaran 15 minuts d'una classe, dins del calendari establert pel centre/titulació, perquè l'alumnat completi les enquestes d'avaluació de l'actuació del professorat i d'avaluació de l'assignatura.

Avaluació

Activitats d'avaluació continuada

Títol Pes Hores ECTS Resultats d'aprenentatge
Segon Parcial 35% de la nota final (50% de la nota de teoria) 2 0,08 CM19, KM20, SM23
Examen de recuperació veure la descripció del mètode d'avaluació 2 0,08 CM19, KM20, SM23
Primer Parcial 28% de la nota final (40% de la nota de teoria) 1,8 0,072 CM19, KM20, SM23
Projecte Programació 20% 0 0 CM19, KM20, SM23
Lliurament problemes 10% 0 0 CM19, KM20, SM23
Tercer Parcial 7% de la nota final (10% de la nota de teoria) 0,2 0,008 CM19, KM20, SM23

L’avaluació de l’assignatura tindrà en compte tres tipus d’activitats d’avaluació: Avaluació Individual, Projecte Total de programació i Avaluació de Problemes. A més te una apartat addicional de Nota Addicional Problemes Classe que pot aportar fins a 1 punt a la nota final sempre que estigui ja aprovada.

La nota final de l’assignatura s’obté combinant l’avaluació d’aquestes 3 activitats (més l'addicional) de la manera següent:

Nota Final = (0.7 * Avaluació Individual) + (0.2 * Projecte Total) + (0.1 * Avaluació Problemes) + Nota Addicional Problemes Classe (màxim 1 punt)


A continuació es detallen els diferents components de la qualificació de l'assignatura:

  • Avaluació Individual: Aquest apartat correspon a les proves individuals realitzades al llarg del curs. L’avaluació constarà de tres proves parcials i d’una prova final de recuperació. El primer parcial es realitzarà durant el període lectiu, preferentment en una franja que permeti la coincidència horària de tots els grups de l’assignatura. La resta de proves parcials i la prova de recuperació es programaran segons el calendari i els horaris establerts per la coordinació de la titulació.

La prova final de recuperació permetrà recuperar els parcials no superats i, de manera voluntària, millorar la qualificació dels parcials ja superats. L’alumnat que no hagi superat un o més parcials haurà d’examinar-se únicament dels continguts corresponents a les parts no superades. D’altra banda, l’alumnat que desitgi millorar la qualificació d’algun parcial ja superat podrà presentar-se també a la prova de recuperació de manera voluntària. En tots els casos, la qualificació final de cada parcial serà la més alta de les notes obtingudes entre la convocatòria ordinària i la prova de recuperació.

La qualificació de l’avaluació individual es calcularà segons la fórmula següent:

Avaluació Individual = (0,4×Parcial 1) + (0,5×Parcial 2) + (0,1×Parcial 3)

Per superar l’assignatura serà necessari:

  • Obtenir una qualificació mínima de 4,0 en cadascun dels tres parcials.
  • Obtenir una Avaluació Individual mínima de 5,0
  • Projecte Total: Aquest apartat inclou el treball desenvolupat en el projecte de programació, que es realitzarà en grups de fins a dues persones. La qualificació del projecte es basarà en l'avaluació dels diferents lliuraments i en una prova individual de seguiment destinada a verificar la participació i el grau de coneixement de cada estudiant sobre el projecte desenvolupat.

La qualificació final del projecte es calcularà segons la fórmula següent:

Projecte Total = (0.2 x Avaluació seguiment projecte) + (0.3 x Entrega Parcial 1) + (0.5 x Entrega Final)

on:

  • Entrega Parcial 1 (30%): lliurament intermedi del projecte a mitjan curs.
  • Entrega Final (50%): versió final del projecte.
  • Avaluació Seguiment Projecte (20%): prova individual sobre el projecte realitzat. L'avaluació de seguiment consistirà en una prova individual que es realitzarà conjuntament amb els parcials 2 i 3 de l'assignatura. En cas de no superar-la, es podrà recuperar el mateix dia de la prova final de recuperació.

Per superar el projecte caldrà:

  • Obtenir una qualificació mínima de 4,0 a l'Avaluació Seguiment Projecte.
  • Obtenir una qualificació mínima de 5,0 al Entrega Final.
  • Obtenir una qualificació mínima de 5,0 a la nota de Projecte Total.

La qualificació del lliurament final podrà recuperar-se únicament si:

  • La nota de Projecte Total és igual o superior a 3,0, i
  • La qualificació de l'Avaluació Individual és igual o superior a 5,0.

Aquesta recuperació del lliurament final es realitzarà en les dates establertes per a la recuperació de l'assignatura.


  • Avaluació Problemes: Aquest apartat inclou els exercicis identificats com a AVALUABLES que es proposaran al llarg del curs i que s'hauran de resoldre de manera individual i autònoma.

No s'exigeix una qualificació mínima en aquesta activitat per superar l'assignatura. Tanmateix, aquesta part representa 1 punt de la nota final, de manera que no realitzar els lliuraments pot impedir assolir la qualificació mínima per aprovar l'assignatura.

Els exercicis lliurats fora de termini, o aquells que hagin obtingut una qualificació de suspens, es podran tornar a lliurar fins a la data de l'examen final de l'assignatura. En aquests casos, la qualificació màxima obtinguda estarà subjecta a una penalització del 20%.

La contribució de cada problema a la nota d'aquest apartat es calcularà de manera proporcional al pes del tema dins de l'assignatura i al nombre de problemes avaluables associats a cada tema.


  • Nota Addicional Problemes Classe (màxim 1 punt): Durant les sessions de classe, l’estudiantat realitzarà exercicis que podran ser lliurats mitjançant la plataforma digital. Aquests exercicis permetran obtenir fins a 1 punt addicional sobre la qualificació final de l’assignatura.

Per a cada exercici s’hauran de fer dos lliuraments:

  • Primer lliurament: s’ha de fer al final de la sessió de classe. No és necessari que l’exercici sigui completament funcional, però ha de contenir codi desenvolupat durant la sessió. Aquest lliurament és obligatori per poder optar al lliurament final.
  • Lliurament final: es podrà realitzar fins a les 23:59 h del dia següent a la sessió. Només el podran efectuar els estudiants que hagin realitzat el primer lliurament dins del termini establert.

Aquests lliuraments no són recuperables. La contribució de cada exercici a la puntuació addicional es determinarà d’acord amb el pes del tema dins de l’assignatura i el nombre d’exercicis lliurables associats a aquest tema.


No avaluable: Es considerarà no avaluable (NA) a l'alumnat que no fa com a mínim el 50% dels lliuraments d'exercicis i no fa cap de les proves d’avaluació següents: parcial 1, parcial 2, parcial 3, prova final de recuperació, lliurament final de la pràctica.

Suspesos: Si el càlcul de la nota final és igual o superior a 5 però no s’arriba al mínim exigit en alguna de les activitats d’avaluació, la nota final serà suspès i es posarà un 4.5 a la nota de l'expedient de l'alumnat que estigui en aquesta situació.

Convalidacions: Per l'alumnat repetidor es convalidarà la nota del projecte de l'any anterior (curs 2025-26) si es compleixen aquestes condicions:

a)La nota final del Projecte Total del curs anterior és més gran o igual a 7

b)La nota de l'Avaluació Individual del curs anterior és més gran o igual a 3

MH: Es donaran tantes matrícules com es puguin dins de la normativa de la universitat, començant per les notes més altes i sempre i quan la nota mínima sigui un 9.

Revisions: Per a cada activitat d’avaluació, s’indicarà un lloc, data i hora de revisió en la que l'estudiant podrà revisar l’activitat amb el professor. Algunes d'aquestes revisions es podran fer també mitjançant el campus virtual en l'entorn de prova pilot de revisió d'exàmens. En aquest context, es podran fer reclamacions sobre la nota de l’activitat, que seran avaluades pel professorat responsable de l’assignatura. A l'alumnat que no es presenti a aquesta revisió, no se li revisarà posteriorment aquesta activitat.

Protocol de sol·licitud de reprogramació d’activitats d’avaluació:

En cas que un estudiant no pugui assistir a una prova parcial o a l’avaluació individual de seguiment del projecte per una causa degudament justificada i reconeguda per la titulació, no es programarà una prova alternativa abans de la recuperació. En aquests casos, l’estudiant realitzarà directament la prova de recuperació corresponent. Només en el cas que tampoc pugui acreditar l’assoliment dels resultats d’aprenentatge mitjançant aquesta prova, l’equip docent valorarà la realització d’una activitat d’avaluació específica addicional. Les incidències justificades que impedeixin la realització de lliuraments de problemes o del projecte seran analitzades individualment per l’equip docent, que determinarà les mesures compensatòries que corresponguin en funció de les circumstàncies de cada cas. En cas d’incidències tècniques generals que afectin la plataforma de lliurament i impedeixin o dificultin significativament la presentació dels treballs, els delegats o delegades del curs hauran de comunicar la incidència a tot l’equip docent tan aviat com sigui possible. Un cop verificada la incidència, s’establirà una ampliació extraordinària del termini de lliurament proporcional al temps durant el qual el servei hagi estat afectat.

Nota important sobre còpies i plagis:

Sense perjudici d'altres mesures disciplinàries que s'estimin oportunes, i d'acord amb la normativa acadèmica vigent, les irregularitats comeses per l'alumnat que puguin conduir a una variació de la qualificació es qualificaran amb un zero (0). Les activitats d'avaluació qualificades d'aquesta forma i per aquest procediment no seran recuperables. Si és necessari superar qualsevol d'aquestes activitats d'avaluació per aprovar l'assignatura, aquesta assignatura quedarà suspesa directament, sense oportunitat de recuperar-la en el mateix curs. Aquestes irregularitats inclouen, entre d'altres:

  • la còpia total o parcial d'una pràctica, informe, o qualsevol altra activitat d'avaluació;
  • deixar copiar;
  • presentar un treball de grup no fet íntegrament pels membres del grup;
  • presentar com a propis materials elaborats per un tercer, encara que siguin traduccions o adaptacions, i en general treballs amb elements no originals i exclusius de l'estudiant;
  • tenir dispositius de comunicació (com telèfons mòbils, smart watches, etc.) accessibles durant les proves d'avaluació teòric-pràctiques individuals (exàmens).

En aquests casos, la nota numèrica de l'expedient serà el valor menor entre 3.0 i la mitjana ponderada de les notes (i per tant no serà possible l'aprovat per compensació). En l'avaluació dels lliuraments de problemes i pràctiques s’utilitzaran eines de detecció de còpia del codi del programa.

Nota sobre la planificació de les activitats d'avaluació. Les dates d'avaluació continuada i lliurament de treballs es publicaran al principi de curs i poden estar subjectes a canvis de programació per motius d'adaptació a possibles incidències. Sempre s'informarà a través de Caronte i/o Campus Virtual sobre aquests canvis ja que s'entén que aquestes són les plataformes habituals d'intercanvi d'informació entre professors i estudiants.

Avaluació única. Aquesta assignatura no preveu el sistema d’avaluació única.

Ús de la IA. Ús restringit: Per a aquesta assignatura, es permet l'ús de tecnologies d'Intel·ligència Artificial (IA) exclusivament en tasques de suport, com la cerca bibliogràfica o d’informació, la correcció de textos o les traduccions, la generació de petits codis d'inicialització de classes o alguns processos simples de recorregut d'estructures simples com els vectors. L'estudiant haurà d'identificar clarament quines parts han estat generades amb aquesta tecnologia, especificar les eines emprades i incloure una reflexió crítica sobre com aquestes han influït en el procés i el resultat final de l’activitat. La no transparència de l’ús de la IA en aquesta activitat avaluable es considerarà falta d'honestedat acadèmica i pot comportar una penalització parcial o total en la nota de l'activitat, o sancions majors en casos de gravetat.

Bibliografia

  • http://www.cplusplus.com/ : The C++ Resources Network
  • https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B: Programación en C++ - Wikilibros
  • https://www.geeksforgeeks.org/c-plus-plus/?ref=ghm
  • Mark Allen Weiss. Data Structures and Data Analysis in C++. Pearson. 2014.
  • B. Eckel. Thinking in C++, Volume 1: Introduction to Standard C++, Prentice-Hall, 1999
  • B. Eckel. Thinking in C++, Volume 2: Standard Libraries and Advanced Topics, Prentice-Hall, 1999
  • F. Xhafa, P. Vázquez, J. Marco, X. Molinero, A. Martín: Programación en C++ para ingenieros. Thomson, 2006
  • Scott Meyers. Effective Modern C++: Specifics Ways to Improve Your Use of C++11 and 14. O'Reilly Media, Incorporated, 2014.
  • Robert C. Martin. Código limpio : manual de estilo para el desarrollo ágil de software. Anaya Multimedia, 2012
  • Thinking in PYTHON Bruce Eckel (se puede descargar de http://www.bruceeckel.com).
  • Learning PYTHON 2nd Edition. Mark Lutz and David Ascher, Safari Tech Books Online.
  • Manuals de Python (de la pagina web oficial).
  • https://www.geeksforgeeks.org/python-programming-language/?ref=ghm
  • Llibres electrònics interactius de python:
  • http://interactivepython.org/runestone/static/thinkcspy/toc.html#t-o-c
  • http://interactivepython.org/runestone/static/pythonds/index.html
  • http://www.pythontutor.com/

Programari

  • Microsoft Visual Studio
  • Spyder Anaconda


Grups i idiomes de l'assignatura

La informació proporcionada és provisional fins al 30 de novembre. A partir d'aquesta data, podreu consultar l'idioma de cada grup a través d'aquest enllaç. Per accedir a la informació, caldrà introduir el CODI de l'assignatura

Tipus de docència Grup Idioma Semestre Torn
(PAUL) Pràctiques d'aula 411 Català/Castellà primer quadrimestre matí-mixt
(PAUL) Pràctiques d'aula 412 Català/Castellà primer quadrimestre matí-mixt
(PAUL) Pràctiques d'aula 431 Català/Castellà primer quadrimestre matí-mixt
(PAUL) Pràctiques d'aula 432 Català/Castellà primer quadrimestre matí-mixt
(PAUL) Pràctiques d'aula 451 Català/Castellà primer quadrimestre matí-mixt
(PAUL) Pràctiques d'aula 452 Català/Castellà primer quadrimestre matí-mixt
(PAUL) Pràctiques d'aula 453 Català/Castellà primer quadrimestre matí-mixt