Programació i Algorísmia I

Esteu aquí

Crèdits
6
Tipus
Obligatòria
Requisits
Aquesta assignatura no té requisits, però té capacitats prèvies
Departament
CS
Aquesta assignatura és la introducció a la programació pels estudiants del Grau d'IA. L'assignatura girarà al voltant del concepte d'Abstracció, posant èmfasi en el procés mitjançant el que hom és capaç de resoldre problemes utilitzant abstracció basada en funcions.

Professorat

Responsable

  • Jordi Delgado Pin ( )

Hores setmanals

Teoria
2
Problemes
0
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
6

Competències

Competències Transversals

Transversals

  • CT4 [Avaluable] - Treball en equip. Ser capaç de treballar com a membre d'un equip interdisciplinari, ja sigui com un membre més o realitzant tasques de direcció, amb la finalitat de contribuir a desenvolupar projectes amb pragmatisme i sentit de la responsabilitat, assumint compromisos tenint en compte els recursos disponibles.
  • CT6 [Avaluable] - Aprenentatge autònom. Detectar deficiències en el propi coneixement i superar-les mitjançant la reflexió crítica i l'elecció de la millor actuació per ampliar aquest coneixement.

Competències Tècniques

Específiques

  • CE02 - Dominar els conceptes bàsics de matemàtica discreta, lògica, algorísmica i complexitat computacional i la seva aplicació per al tractament automàtic de la informació per mitjà de sistemes computacionals i la seva aplicació per a la resolució de problemes.
  • CE03 - Identificar i aplicar els procediments algorítmics bàsics de les tecnologies informàtiques per dissenyar solucions a problemes, analitzant la idoneïtat i complexitat dels algoritmes proposats.
  • CE04 - Dissenyar i utilitzar de forma eficient els tipus i estructures de dades més adequats a la resolució d'un problema.
  • CE10 - Analitzar, dissenyar, construir i mantenir aplicacions de forma robusta, segura i eficient, triant el paradigma i els llenguatges de programació més adequats.
  • CE12 - Dominar els principis fonamentals i models de la computació i saber-los aplicar per a interpretar, seleccionar, valorar, modelar, i crear nous conceptes, teories, usos i desenvolupaments tecnològics relacionats amb la intel·ligència artificial.
  • CE13 - Avaluar la complexitat computacional d'un problema, identificar estratègies algorítmiques que puguin conduir a la seva resolució i recomanar, desenvolupar i implementar aquella que garanteixi el millor rendiment d'acord amb els requisits establerts.

Competències Tècniques Generals

Genèriques

  • CG2 - Utilitzar els coneixements fonamentals i metodologies de treball sòlides adquirits durant els estudis per adaptar-se als nous escenaris tecnològics de el futur.
  • CG4 - Raonar, analitzant la realitat i dissenyant algoritmes i formulacions que la modelin. Identificar problemes i construir solucions algorísmiques o matemàtiques vàlides, eventualment noves, integrant el coneixement multidisciplinari necessari, valorant diferents alternatives amb esperit crític, justificant les decisions preses, interpretant i sintetitzant els resultats en el context de l'domini d'aplicació i establint generalitzacions metodològiques a partir de aplicacions concretes.
  • CG8 - Observar un exercici ètic de la professió en totes les seves facetes, aplicant criteris ètics en el disseny de sistemes, algoritmes, experiments, utilització de dades, d'acord amb els sistemes ètics recomanats pels organismes nacionals i internacionals, amb especial èmfasi en seguretat, robustesa , privacitat, transparència, traçabilitat, prevenció de biaixos (de raça, gènere, religió, territori, etc.) i respecte als drets humans.

Objectius

  1. Conèixer els conceptes més bàsics de la programació amb funcions (senzilles i d'ordre superior) i la seva utilització com a eines per adeqüar un llenguatge de programació al domini del problema que es vol resoldre
    Competències relacionades: CG2, CT6, CE03, CE10, CE12,
  2. Conèixer el concepte de recursivitat i com distingir processos iteratius i recursius definits amb funcions recursives
    Competències relacionades: CG4, CT6, CE03, CE10, CE12,
  3. Començar a entendre el concepte de disseny del programari
    Competències relacionades: CG4, CT6, CE03, CE10,
  4. Poder treballar amb la idea d'error en un programa i l'utilització d'excepcions per tractar aquests errors
    Competències relacionades: CG4, CE10,
  5. Conèixer el concepte de contenidor i les situacions en que és pertinent utilitzar-los. Conèixer el cost del seu ús (informalment)
    Competències relacionades: CG4, CT6, CE02, CE04,
  6. Introduir l'estudiant en el càlcul de la complexitat dels algorismes
    Competències relacionades: CE13,
  7. Involucrar l'estudiant en el disseny i implementació en grup d'un problema senzill
    Competències relacionades: CG2, CG4, CG8, CT4, CE03, CE10,

Continguts

  1. Construint Abstraccions amb Funcions: Funcions (senzilles i d'ordre superior). Entorns. Control del flux d'execució.
    S'introdueix a l'estudiant en el mecanisme principal de solució de problemes a partir del disseny bottom-up de funcions que acostin el llenguatge de programació al domini del problema. S'estudien els mecanismes de definició de funcions, pas de paràmetres, entorn i abast, i les principals estructures de control del flux d'execució (condicional, iteratives)
  2. Construint Abstraccions amb Funcions: Recursivitat i exemples.
    S'introdueix el fet que una funció es pot cridar a ella mateixa, la recursivitat com a mecanisme conceptual per resoldre problemes i la idea de procés. Funcions recursives defineixen processos iteratius i recursius.
  3. Construint Abstraccions amb Funcions: Disseny. Tractament d'errors amb excepcions.
    S'introdueix el concepte de dissenyar un programa per resoldre un problema. S'introdueix la idea d'error en un programa i com tractar-los amb el mecanisme d'excepcions.
  4. Construint Abstraccions amb Funcions: Exemples de resolució de problemes
    Es reforcen els conceptes introduits fins el moment amb nombrosos problemes de dificultat baixa i mitjana.
  5. Construint Abstraccions amb Funcions: Contenidors
    Es comença a treballar amb contenidors proporcionats pel llenguatge de programació: Seqüències, Llistes, Diccionaris i amb altres d'implementats dins el curs, com les Matrius o els Arbres.
  6. Construint Abstraccions amb Funcions: Mutabilitat. Iteradors i Generadors.
    El concepte de mutabilitat es veu per primer cop relacionat amb llistes, i es discuteixen els avantatges i inconvenients de tenir estructures de dades immutables. S'introdueixen els iteradors i generadors com a noves estructures de control.
  7. Introducció a la Complexitat dels Algorismes
    Es fa una petita introducció a la notació asimptòtica i al càlcul de la complexitat en cas pitjor d'alguns algorismes notables vistos durant el curs.

Activitats

Activitat Acte avaluatiu


Teoria
10h
Problemes
0h
Laboratori
12h
Aprenentatge dirigit
0h
Aprenentatge autònom
30h

Construint Abstraccions amb Funcions: Contenidors, Iteradors, Generadors.

Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats.
Objectius: 5 7
Continguts:
Teoria
12h
Problemes
0h
Laboratori
14h
Aprenentatge dirigit
0h
Aprenentatge autònom
30h

Complexitat dels Algorismes

Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats.
Objectius: 6
Continguts:
Teoria
3h
Problemes
0h
Laboratori
4h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h

Examen Parcial


Objectius: 1 2 3 4
Setmana: 7
Tipus: examen de teoria
Teoria
2h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h

Examen Final


Objectius: 5 6 7
Setmana: 15 (Fora d'horari lectiu)
Tipus: examen de teoria
Teoria
3h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h

Metodologia docent

La docència de l'assignatura està estructurada en classes de teoria i classes de laboratori.

A les classes de teoria els professors presenten els continguts essencials de l'assignatura. A les classes de laboratori es practiquen els continguts de l'assignatura (els presentats a classe i els adquirits autònomament) mitjançant la realització de problemes pràctics. Les classes de laboratori seran una continuació de les classes teòriques, on els conceptes nous s'implementaran a mida que vagin apareixent.

Mètode d'avaluació

El mètode d'avaluació de l'assignatura consistirà en dues proves de caire teòric (T1 i T2), una a mitjans de curs i l'altre al final i una pràctica de mida petita-mitjana (Practica).

Aleshores, el mètode d'avaluació seria:
0.8 * Teoria + 0.2 * Practica
on:
Teoria: MAX(T2, 0.5 * T1 + 0.5 * T2)

Competència transversal "Treball en equip":

S'avalua usant una rúbrica simple en que el tutor de cada grup puntua els
diferents aspectes del treball en equip de cada membre dels grups.

Bibliografia

Bàsica:

Web links

  • Aquest és el text PRINCIPAL de l'assignatura, la font d'informació primària per a tot allò que expliquem a classe. http://www.composingprograms.com/
  • Aquest és el curs CS 61A: Structure and Interpretation of Computer Programs, de l'Universitat de Berkeley, en el que aquest curs està basat https://cs61a.org/
  • La principal referència del llenguatge de programació que fem servir: Python. No és un lloc on aprendre a programar, és un lloc on consultar detalls de les construccions i llibreries del llenguatge https://docs.python.org/3/reference/index.html

Capacitats prèvies

Les definides en el batxillerat científic-tècnic o equivalents.