Programació I

Esteu aquí

Crèdits
7.5
Tipus
Obligatòria
Requisits
Aquesta assignatura no té requisits, però té capacitats prèvies
Departament
CS;ICE
Mail
En l'assignatura s'adquireixen els conceptes i tècniques bàsiques per a la construcció de programes en llenguatges imperatius. En acabar el curs, el/la estudiant:

1. Coneixerà els constituents bàsics de llenguatges imperatius: variables, tipus, expressions, condicionals i iteracions.

2. Podrà usar i dissenyar procediments (accions i funcions) per encapsular solucions de subproblemes.

3. Podrà usar la metodologia del disseny descendent per donar solucions a problemes de dificultat mitjana.

4. Podrà usar vectors per guardar informació estructurada i com a base del disseny d'estructures de dades.

5. Coneixerà i podrà reproduir i usar adequadament alguns algorismes fonamentals, com ara la cerca dicotòmica o els algorismes elementals d'ordenació de vectors.

Actualment el llenguatge de programació emprat com a base és un subconjunt de C++, encara que l'èmfasi no és en l'aprenentatge dels detalls del llenguatge sinó en la resolució de problemes
algorísmics i la construcció estructurada de programes.

Professorat

Responsable

  • Guillem Godoy Balil ( )
  • Pau Fernandez Duran ( )

Altres

  • Alexandre Gracia Calvo ( )
  • Alexis Molina Martinez de los Reyes ( )
  • Alfonso Valverde Ruiz ( )
  • Emma Rollón Rico ( )
  • Glyn Morrill ( )
  • Jorge Castro Rabal ( )
  • Lluis Padro Cirera ( )
  • Maria Angela Nebot Castells ( )
  • Montserrat Madridejos Mora ( )
  • Nicolas Mylonakis Pascual ( )
  • Raúl López Sánchez ( )
  • Rosa Maria Jiménez Gómez ( )
  • Xavier Rubiés Cullell ( )

Hores setmanals

Teoria
2
Problemes
0
Laboratori
3
Aprenentatge dirigit
0
Aprenentatge autònom
7.5

Competències

Competències Tècniques

Competències tècniques comunes

  • CT1 - Demostrar coneixement i comprensió de fets essencials, conceptes, principis i teories relatives a la informàtica i a les seves disciplines de referència.
    • CT1.1A - Demostrar coneixement i comprensió dels conceptes fonamentals de la programació i de l'estructura bàsica d'un computador. CEFB4. Coneixement dels fonaments de l'ús i de la programació dels computadors, dels sistemes operatius, de les bases de dades i, en general, dels programes informàtics amb aplicació a l'enginyeria.
    • CT1.1B - Demostrar coneixement i comprensió dels conceptes fonamentals de la programació i de l'estructura bàsica d'un computador. CEFB5. Coneixement de l'estructura, funcionament i interconnexió dels sistemes informàtics, i dels fonaments de la seva programació.
    • CT1.2B - Interpretar, seleccionar i valorar conceptes, teories, usos i desenvolupaments tecnològics relacionats amb la informàtica i la seva aplicació a partir dels fonaments matemàtics, estadístics i físics necessaris. CEFB2. Capacitat per a comprendre i dominar els fonaments físics i tecnològics de la informàtica: electromagnetisme, ones, teoria de circuits, electrònica i fotònica i la seva aplicació per a la resolució de problemes propis de l'enginyeria.
  • CT4 - Demostrar coneixement i capacitat d'aplicació dels procediments algorísmics bàsics de les tecnologies informàtiques per a dissenyar solucions a problemes, analitzant la idoneïtat i la complexitat dels algorismes
    • CT4.1 - Identificar les solucions algorísmiques més adequades per a resoldre problemes de dificultat mitjana.
    • CT4.2 - Raonar sobre la correcció i l'eficiència d'una solució algorísmica.
  • CT5 - Analitzar, dissenyar, construir i mantenir aplicacions de forma robusta, segura i eficient, triant el paradigma i els llenguatges de programació més adequats.
    • CT5.2 - Conèixer, dissenyar i utilitzar de forma eficient els tipus i les estructures de dades més adients per a la resolució d'un problema.
    • CT5.3 - Dissenyar, escriure, provar, depurar, documentar i mantenir codi en un llenguatge d'alt nivell per a resoldre problemes de programació aplicant esquemes algorísmics i utilitzant estructures de dades.
    • CT5.4 - Dissenyar l'arquitectura dels programes utilitzant tècniques d'orientació a objectes, de modularització i d'especificació i implementació de tipus abstractes de dades.
  • CT8 - Planificar, concebre, desplegar i dirigir projectes, serveis i sistemes informàtics en tots els àmbits, liderar-ne la posada en marxa, la millora contínua i valorar-ne l'impacte econòmic i social.
    • CT8.6 - Demostrar comprensió de la importància de la negociació, dels hàbits de treball efectius, del lideratge i de les habilitats de comunicació en tots els entorns de desenvolupament de software.

Competències Transversals

Aprenentatge autònom

  • G7 [Avaluable] - Detectar carències en el coneixement propi i superar-les mitjançant la reflexió crítica i l'elecció de la millor actuació per ampliar aquest coneixement. Capacitat per a l'aprenentatge de nous mètodes i tecnologies, i versatilitat per a adaptar-se a noves situacions.
    • G7.1 - Aprenentatge dirigit: dur a terme les tasques assignades en el temps previst, treballant amb les fonts d'informació indicades d'acord amb les pautes marcades pel professor o pel tutor. Identificar el progrés i el grau d'acompliment dels objectius d'aprenentatge. Identificar els punts forts i els punts febles.

Objectius

  1. Comprendre el procés de construcció d'un programa i saber utilitzar les eines que es requereixen: consola, editor i compilador
    Competències relacionades: G7.1, CT1.1B, CT1.1A,
  2. Conèixer la sintaxi i semàntica de les expressions i instruccions bàsiques d'un llenguatge de programació imperatiu (C++).
    Competències relacionades: CT5.3,
  3. Tenir destresa en l'ús de funcions i accions en el desenvolupament de programes.
    Competències relacionades: G7.1, CT4.1, CT5.4,
  4. Entendre els conceptes de funció, acció i pas de paràmetres
    Competències relacionades: CT4.1,
  5. Conèixer en profunditat les taules i identificar aquells problemes en les que el seu ús és apropiat.
    Competències relacionades: CT4.1, CT5.2, CT5.3,
  6. Ser capaç de confrontar solucions respecte a l'ús que en fan de els recursos de temps i memòria i escollir la més apropiada en casos senzills.
    Competències relacionades: CT4.1, CT4.2, CT5.2,
  7. Assimilar en profunditat els esquemes de recorregut i cerca
    Competències relacionades: CT4.2, CT1.2B,
  8. Associar a un problema l'esquema de solució apropiat
    Competències relacionades: CT4.1, CT5.3,
  9. Comprendre la recursivitat. Ser capaç de proposar solucions recursives a problemes simples.
    Competències relacionades: CT4.1, CT4.2, CT5.3,
  10. Assimilar en profunditat l'algoritme de cerca binària i els algorismes d'ordenació d'inserció, selecció, mergesort
    i quicksort.
    Competències relacionades: CT4.1, CT4.2, CT5.2,
  11. Conèixer en profunditat altres algoritmes fonamentals: Hörner, producte rapid, etc
    Competències relacionades: CT4.1, CT1.2B, CT1.1A,
  12. Ser capaç d'escriure programes d'una pàgina que siguin llegibles, elegants i eficients.
    Competències relacionades: G7.1, CT8.6, CT4.1, CT4.2, CT5.2, CT5.4, CT5.3, CT1.1B, CT1.2B, CT1.1A,

Continguts

  1. Introducció als principis bàsics de la programació
    Introducció de conceptes fonamentals:
    Algorisme, programa, variable, expressió, tipus de dades,etc.

    Instruccions bàsiques c++.
  2. La instrucció iterativa
    Instruccions for i while. Exemples.
  3. Esquemes de recorregut i cerca
    Seqüències. Recorreguts i cerques en seqüències.
  4. Accions i Funcions
    Accions i Funcions. Pas de paràmetres. Àmbits de visibilitat.
  5. Recursivitat
    Introducció al disseny recursiu.
  6. Taules
    Taules unidimensionals. Taules multidimensionals. Recorreguts i cerques en taules.
  7. Tuples
    Programació amb tuples.
  8. Algorismes fonamentals I
    Algorismes de ordenació. Cerca dicotòmica.
  9. Algorismes fonamentals II
    Altres algorismes importants: Hörner, producte ràpid, etc.

Activitats

Activitat Acte avaluatiu


Desenvolupament del tema: "Principis bàsics de la programació"

Entendre i assimilar els conceptes introduïts en teoria. Resoldre les activitats proposades en laboratori.
Objectius: 1 2
Continguts:
Teoria
2h
Problemes
0h
Laboratori
3h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Desenvolupament del tema: "La instrucció iterativa"

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per a aquest tema de la web www.jutge.org.
Objectius: 1 2
Continguts:
Teoria
2h
Problemes
0h
Laboratori
3h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Desenvolupament del tema: "Esquemes de recorregut i cerca"

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per a aquest tema de la web www.jutge.org.
Objectius: 2 7 8
Continguts:
Teoria
2h
Problemes
0h
Laboratori
3h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Desenvolupament del tema: "Accions i funcions".

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per a aquest tema de la web www.jutge.org.
Objectius: 2 4 3
Continguts:
Teoria
2h
Problemes
0h
Laboratori
3h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Desenvolupament del tema: "Recursivitat"

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per aquest tema de la web www.jutge.org.
Objectius: 4 3 9
Continguts:
Teoria
2h
Problemes
0h
Laboratori
3h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Consolidació dels temes 1 a 5

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per a la consolidació de la primera part del curs de la web www.jutge.org.
Objectius: 1 2 4 3 7 8 9
Continguts:
Teoria
2h
Problemes
0h
Laboratori
6h
Aprenentatge dirigit
0h
Aprenentatge autònom
19.5h

Desenvolupament del tema: "Taules"

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per aquest tema de la web www.jutge.org.
Objectius: 5 6 7 8 12
Continguts:
Teoria
4h
Problemes
0h
Laboratori
6h
Aprenentatge dirigit
0h
Aprenentatge autònom
12h

Desenvolupament del tema: "Tuples"

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per aquest tema de la web www.jutge.org.
Objectius: 12
Continguts:
Teoria
2h
Problemes
0h
Laboratori
3h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Desenvolupament del tema: "Algorismes fonamentals I"

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per aquest tema de la web www.jutge.org.
Objectius: 5 6 10 12
Continguts:
Teoria
2h
Problemes
0h
Laboratori
3h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Desenvolupament del tema: "Algorismes fonamentals II"

Entendre i assimilar els conceptes introduïts en teoria. Resoldre els problemes seleccionats per aquest tema de la web www.jutge.org.
Objectius: 6 11 12
Continguts:
Teoria
2h
Problemes
0h
Laboratori
3h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Teoria
0h
Problemes
0h
Laboratori
9h
Aprenentatge dirigit
0h
Aprenentatge autònom
33h

Examen parcial

Cal resoldre diversos exercicis de programació usant la plataforma jutge.org.
Objectius: 1 2 8
Setmana: 9 (Fora d'horari lectiu)
Tipus: examen de teoria
Teoria
2h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
0h

Examen parcial

Cal resoldre diversos exercicis de programació usant la plataforma jutge.org.
Objectius: 1 2 4 3 5 7 8 9
Setmana: 14 (Fora d'horari lectiu)
Tipus: examen de teoria
Teoria
3h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
0h

Examen final

Cal resoldre diversos exercicis de programació usant la plataforma jutge.org. Avaluació global de l'assignatura.
Objectius: 1 2 4 3 5 6 7 8 9 10 11 12
Setmana: 15 (Fora d'horari lectiu)
Tipus: examen de teoria
Teoria
3h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
0h

Metodologia docent

En les sessions de teoria el professor intercala l'exposició de nou material
teòric amb exemples i problemes. Es combina tant la part magistral, en la qual el professor exposa, explica i exemplifica els conceptes de l'assignatura, com
la interacció amb els alumnes sobre les diverses alternatives que apareguin
durant la resolució de casos pràctics

Les sessions de laboratori tenen dues parts diferenciades:
Durant la primera hora, hi ha una sessió guiada pel professor, on s'expliquen conceptes pràctics de l'entorn de programació, o bé es fan exercicis de forma col·laborativa, o bé s'analitza codi per trobar-hi errors, etc.
Les restants dues hores de la sessió de laboratori, els estudiants les dediquen a resoldre problemes al jutge, amb l'assistència del professor si és necessari.

S'espera que en les sessions de laboratori, i durant les hores d'estudi
personal, els estudiants intentin resoldre problemes d'una col·lecció, i que enviïn les seves solucions a un jutge automàtic que comprovarà el funcionament amb jocs de proves exhaustius.
Addicionalment, s'aconsella l'estudiant mostrar regularment els seus programes
(funcionin o no) als professors, per tal que aquests n'avaluïn la qualitat.

Mètode d'avaluació

Durant tot el curs, hi hauran entregues de deures de forma regular, els quals consistiran en haver d'entregar via jutge solucions a exercicis específics. El total de les notes obtingudes pels deures comptarà un 15% de la nota global de l'assignatura. Els estudiants podran aprofitar les classes de laboratori per a preguntar dubtes sobre aquests deures.

Durant el curs també es realitzaran dues proves avaluatòries, l'examen parcial i l'examen final. Siguin D, P i F les notes sobre 10 dels deures, de l'examen parcial, i de l'examen final, respectivament. La nota global de l'assignatura s'obté amb la fórmula:

N = 0.15 * D + 0.85 * max ((0,4 * P + 0,6 * F), F)

Un examen tindrà nota NP si no s'ha fet cap entrega a cap dels seus problemes.
La nota global de l'assignatura N serà NP si ambós exàmens parcial i final tenen nota NP.

REAVALUACIÓ
La reavaluació consisteix en un curs intensiu de 12 hores presencials amb la corresponent avaluació, un cop finalitzats els exàmens finals i abans de l'inici del quadrimestre següent. Es calcula que la reavaluació requereix unes 50 hores de dedicació per part de l'estudiant entre classes presencials, hores d'estudi personal i avaluació.

Requisits per optar a la reavaluació:

- Estar matriculat de l'assignatura.
- Haver obtingut una nota final entre 3.5 i 4.9.

Requisits per a ser re-avaluat:

- Assistir a totes les classes presencials del curs intensiu.
- Fer els exercicis o activitats que demani el professorat del curs intensiu.

Avaluació:
El resultat de l'avaluació del curs intensiu serà "apte" o "no apte". La nota definitiva de l'assignatura serà:
Nota definitiva = 5, si la nota de l'intensiu és "apte";
Nota definitiva = NF, si la nota de l'intensiu és "no apte";
(on NF és la nota obtinguda durant el quadrimestre).

COMPETÈNCIA TRANSVERSAL

L'avaluació de la competència transversal "Aprenentatge Autònom" es basa en A=min(D,1.5*N) i será:

NP si la nota de l'assignatura N és NP o el nombre de deures entregats representa menys d'un 50% del total. En cas contrari:
D si 0 <= A < 5
C si 5 <= A < 7
B si 7 <= A < 9
A si 9 <= A <= 10

Bibliografia

Bàsica:

Complementaria:

Web links

  • Col·lecció de videos (en castellà) construits per a una altra assignatura de programació pel professor Pau Fernández, del departament. Encara que ni l'estil ni el contingut s'ajusten del tot als d'aquesta assignatura, poden ser un complement útil. El temari de Programació 1 és aproximadament els temes 1 a 13. Colección de videos construidos para otra asignatura de programación por el profesor Pau Fernández, del departamento. Aunque ni el estilo ni el contenido se ajustan del todo a los de esta asignatura, pueden ser un complemento útil. El temario de Programación 1 es aproximadamente los temas 1 a 13. Video collection (in Spanish) built for another programming course by Pau Fernández, also instructor at our department. Although neither the style nor the contents is exactly that of Progrmaming 1, it may be a useful complement. The topics in Programming 1 are those in "temas" 1 to 13. http://minidosis.org/
  • Pàgina de la asignatura, on es troben apunts, normes de programació, exàmens de cursos passats i altre material docent. Página de la asignatura, donde se encuentran apuntes, normas de programación, exámenes de cursos pasados y otro material docent. Course homepage, with notes, programming style rules, past edition exams, and other teaching material. http://pro1.cs.upc.edu/
  • Curs de programació impartit a la Stanford University. Encara que el llenguatge de base és Java i no C++, molts conceptes són similars. Programació 1 cobreix, aproximadament, els temes 1 a 5, 8, part de l'11, 12 i part del 14. Curso de programación impartido en la Stanford University. Aunque el lenguaje de base es Java y no C++, muchos conceptos son similares. Programación 1 cubre, aproximadamente, los temas 1 a 5, 8, parte del 11, 12 y parte del 14. Programming course taught at Stanford University. Although the base language is Java and not C++, many concepts are similar. Programming 1 covers, approximately, topics 1 to 5, 8, part of 11, 12, and part of 14. http://www-cs-faculty.stanford.edu/~eroberts/books/ArtAndScienceOfJava/
  • Referència molt completa dels llenguatges C i C++. Referencia muy completa de los lenguajes C y C++. Very complete reference for the C and C++ languages. http://www.cprogramming.com/
  • Una introducció a C++. A diferència de l'assignatura, l'èmfasi és en el llenguatge i menys en els conceptes algorísmics. Una introducción a C++. A diferencia de la asignatura, el énfasis es en el lenguaje y menos en los conceptos algorítmicos. An introduction to C++. Unlike Programming 1, the emphasis is on the lantuage and less on algorithmic concepts. http://www.uow.edu.au/~nabg/ABC/ABC.html
  • El jutge o avaluador automàtic de programes. El juez o evaluador automático de programas. The judge or automatic program evaluator. https://www.jutge.org

Capacitats prèvies

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