Vés al contingut

Programació I

Crèdits
7.5
Tipus
Obligatòria
Requisits
Aquesta assignatura no té requisits , però té capacitats prèvies
Departament
CS
Web
https://pro1.cs.upc.edu/
Mail
pro1@cs.upc.edu
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

Altres

Hores setmanals

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

Competències

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.
  • 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. Tuples
      Programació amb tuples.
    4. Accions i Funcions
      Accions i Funcions. Pas de paràmetres. Àmbits de visibilitat.
    5. Esquemes de recorregut i cerca
      Seqüències. Recorreguts i cerques en seqüències.
    6. Recursivitat
      Introducció al disseny recursiu.
    7. Taules
      Taules unidimensionals. Taules multidimensionals. Recorreguts i cerques en taules.
    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: "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: "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: "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

    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: "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

    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: "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
    3h
    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)
    Teoria
    0h
    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)
    Teoria
    0h
    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 10% 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 realitzarà una prova avaluatòria, l'examen parcial i l'examen final. Siguin D, P i F les notes sobre 10 dela prova avaluatòria, de l'examen parcial, i de l'examen final, respectivament. La nota global de l'assignatura s'obté amb la fórmula:

    N = 0.1 * D + 0.9 * 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àsic

    • Transparències de teoria de l'assignatura (Pàgina web de l'assignatura, apartat material docent) - Professorat de Programació 1,
    • Dotze algorismes fonamentals - Professorat de Programació 1, Dotze algorismes fonamentals,
      https://pro1.cs.upc.edu/pdfs/alg-fonamentals.pdf

    Complementari

    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.