Programación I

Usted está aquí

Créditos
7.5
Tipos
Obligatoria
Requisitos
Esta asignatura no tiene requisitos, pero tiene capacidades previas
Departamento
CS;ICE
Mail
En la asignatura se adquieren los conceptos y técnicas básicas para construir programas en lenguajes imperativos. Al terminar el curso, el/la estudiante:

1. Conocerá los elementos básicos de los lenguajes imperativos: variables, tipos, expresiones, condicionales e iteración.

2. Podrá usar y diseñar procedimientos (acciones y funciones) para encapsular soluciones subproblemas.

3. Podrá usar la metodología del diseño descendente para dar soluciones a problemas de dificultad media.

4. Podrá usar vectores para guardar información estructurada y como base del diseño de estructuras de datos.

5. Conocerá y podrá reproducir e usar adecuadamente algunos algoritmos fundamentales como la búsqueda dicotómica y algoritmos elementales de ordenación de vectores.

Actualmente el lenguaje de programación usado es un subconjunto de C++, aunque el énfasis no es en el aprendizaje de un lenguaje sino en la resolución de problemas algorítmicos y la construcción estructurada de programas.

Profesorado

Responsable

  • Emma Rollón Rico ( )
  • Jorge Castro Rabal ( )

Otros

  • Alexis Molina Martinez de los Reyes ( )
  • Alfonso Valverde Ruiz ( )
  • Edelmira Pasarella Sanchez ( )
  • Glyn Morrill ( )
  • Joaquin Gabarró Vallés ( )
  • Lluis Padro Cirera ( )
  • Marc Gàllego Asín ( )
  • Maria Angela Nebot Castells ( )
  • Maria Josep Blesa Aguilera ( )
  • Montserrat Madridejos Mora ( )
  • Nicolas Mylonakis Pascual ( )
  • Raúl López Sánchez ( )
  • Rosa Maria Jiménez Gómez ( )
  • Xavier Rubiés Cullell ( )

Horas semanales

Teoría
2
Problemas
0
Laboratorio
3
Aprendizaje dirigido
0.5
Aprendizaje autónomo
7

Competencias

Competencias Técnicas

Competencias técnicas comunes

  • CT1 - Demostrar conocimiento y comprensión de hechos esenciales, conceptos, principios y teorías relativas a la informática y a sus disciplinas de referencia.
    • CT1.1A - Demostrar conocimiento y comprensión de los conceptos fundamentales de la programación y de la estructura básica de un computador. CEFB4. Conocimiento de los fundamentos del uso y programación de los computadores, los sistemas operativos, las bases de datos y, en general, los programas informáticos con aplicación en ingeniería.
    • CT1.1B - Interpretar, seleccionar y valorar conceptos, teorías, usos y desarrollos tecnológicos relacionados con la informática y su aplicación a partir de los fundamentos matemáticos, estadísticos y físicos necesarios. CEFB2. Capacidad para comprender y dominar los fundamentos físicos y tecnológicos de la informática: electromagnetismo, ondas, teoría de circuitos, electrónica y fotónica y su aplicación para la resolución de problemas propios de la ingeniería.
    • CT1.2B - Interpretar, seleccionar y valorar conceptos, teorías, usos y desarrollos tecnológicos relacionados con la informática y su aplicación a partir de los fundamentos matemáticos, estadísticos y físicos necesarios. CEFB3. Capacidad para comprender y dominar los conceptos básicos de matemática discreta, lógica, algorítmica y complejidad computacional, y su aplicación para el tratamiento automático de la información por medio de sistemas computacionales y su aplicación para la resolución de problemas propios de la ingeniería.
  • CT4 - Demostrar conocimiento y capacidad de aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y la complejidad de los algoritmos
    • CT4.1 - Identificar las soluciones algorítmicas más adecuadas para resolver problemas de dificultad mediana.
    • CT4.2 - Razonar sobre la corrección y la eficiencia de una solución algorítmica.
  • CT5 - Analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, escogiendo el paradigma y los lenguajes de programación más adecuados.
    • CT5.2 - Conocer, diseñar y utilizar de forma eficiente los tipos y las estructuras de datos más adecuados para la resolución de un problema.
    • CT5.3 - Diseñar, escribir, probar, depurar, documentar y mantener código en un lenguaje de alto nivel para resolver problemas de programación aplicando esquemas algorítmicos y usando estructuras de datos.
    • CT5.4 - Diseñar la arquitectura de los programas utilizando técnicas de orientación a objetos, de modularización y de especificación e implementación de tipos abstractos de datos.
  • CT8 - Planificar, concebir, desplegar y dirigir proyectos, servicios y sistemas informáticos en todos los ámbitos, liderando su puesta en marcha, su mejora continua y valorando su impacto económico y social
    • CT8.6 - Demostrar comprensión de la importancia de la negociación, de los hábitos de trabajo efectivos, del liderazgo y de las habilidades de comunicación en todos los entornos de desarrollo de software.

Competencias Transversales

Aprendizaje autónomo

  • G7 [Avaluable] - Detectar carencias en el propio conocimiento y superarlas mediante la reflexión crítica y la elección de la mejor actuación para ampliar este conocimiento. Capacidad para el aprendizaje de nuevos métodos y tecnologías y versatilidad para adaptarse a nueves situaciones.
    • G7.1 - Aprendizaje dirigido: Llevar a cabo las tareas asignadas en el tiempo previsto, trabajando con las fuentes de información indicadas, de acuerdo con las pautas marcadas por el profesor o tutor. Identificar el progreso y el grado de cumplimiento de los objetivos de aprendizaje. Identificar los puntos fuertes y débiles.

Objetivos

  1. Comprender el proceso de construcción de un programa
    y saber usar las herramientas que se requieren: consola,
    editor y compilador.
    Competencias relacionadas: G7.1, CT1.1B, CT1.1A,
  2. Conocer la sintaxis y semántica de las expresiones e
    instrucciones básicas de un lenguaje de programación
    imperativo (C++).
    Competencias relacionadas: CT5.3,
  3. Tener destreza en el uso de funciones y acciones en el desarrollo de programas.
    Competencias relacionadas: G7.1, CT4.1, CT5.4,
  4. Entender los conceptos de función, acción y paso de parámetros
    Competencias relacionadas: CT4.1,
  5. Conocer en profundidad las tablas e identificar los problemas en los que su uso es apropiado
    Competencias relacionadas: CT4.1, CT5.2, CT5.3,
  6. Ser capaz de confrontar soluciones respecto al uso de de los recursos de tiempo y memoria que hacen y escoger la más apropiada en casos sencillos.

    Competencias relacionadas: CT4.1, CT4.2, CT5.2,
  7. Asimilar en profundidad los esquemas de recorrido y búsqueda
    Competencias relacionadas: CT4.2, CT1.2B,
  8. Asociar a un problema el esquema de solución apropiado
    Competencias relacionadas: CT4.1, CT5.3,
  9. Comprender la recursividad. Ser capaz de proponer soluciones recursivas a problemas sencillos.
    Competencias relacionadas: CT4.1, CT4.2, CT5.3,
  10. Asimilar en profundidad el algoritmo de búsqueda dicotómica y los algoritmos de ordenación de inserción, selección, mergesort y quicksort
    Competencias relacionadas: CT4.1, CT4.2, CT5.2,
  11. Conocer en profundidad otros algoritmos fundamentales: Hörner, producto rápido, etc.
    Competencias relacionadas: CT4.1, CT1.2B, CT1.1A,
  12. Ser capaz de escribir programas de una página que sean legibles, elegantes y eficientes.
    Competencias relacionadas: G7.1, CT8.6, CT4.1, CT4.2, CT5.2, CT5.4, CT5.3, CT1.1B, CT1.2B, CT1.1A,

Contenidos

  1. Introducción a los principios básicos de la programación
    Introducción de conceptos fundamentales:
    Algoritmo, programa, variable, expresión, tipos de datos.

    Instrucciones básicas c++.
  2. La instrucción iterativa
    Instrucciones for y while. Ejemplos.
  3. Esquemas de recorrido y búsqueda
    Secuencias. Recorridos y búsquedas en secuencias.
  4. Acciones y Funciones.
    Acciones y Funciones. Paso de parámetros. Ámbitos de visibilidad.
  5. Recursividad
    Introducción al diseño recursivo.
  6. Tablas
    Tablas unidimensionales. Tablas multidimensionales. Recorridos y búsquedas en tablas.
  7. Tuplas
    Programación con tuplas.
  8. Algoritmos fundamentales I
    Algoritmos de ordenación. Búsqueda binaria.
  9. Algoritmos fundamentales II
    Otros algoritmos fundamentales: Hörner, producto rápido, etc.

Actividades

Actividad Acto evaluativo


Desarrollo del tema: "Principios básicos de programación"

Entender y asimilar los conceptos introducidos en teoría. Resolver las actividades propuestas en laboratorio.
Objetivos: 1 2
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Desarrollo del tema: "La instrucción iterativa"

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para este tema de la web www.jutge.org.
Objetivos: 1 2
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Desarrollo del tema: "Esquemas de recorrido y búsqueda"

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para este tema de la web www.jutge.org.
Objetivos: 2 7 8
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Desarrollo del tema: "Acciones y funciones".

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para este tema de la web www.jutge.org.
Objetivos: 2 4 3
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Desarrollo del tema: "Recursividad"

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para este tema de la web www.jutge.org.
  • Aprendizaje dirigido: Control 1
Objetivos: 4 3 9
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0.8h
Aprendizaje autónomo
6h

Consolidación de los temas 1 a 5

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para la consolidación de la primera parte del curso de la web www.jutge.org.
Objetivos: 1 2 4 3 7 8 9
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
12h

Desarrollo del tema: "Tablas"

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para este tema de la web www.jutge.org.
  • Aprendizaje dirigido: Control 2
Objetivos: 5 6 7 8 12
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0.9h
Aprendizaje autónomo
12h

Desarrollo del tema: "Tuplas"

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para este tema de la web www.jutge.org.
Objetivos: 12
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Desarrollo del tema: "Algoritmos fundamentales I"

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para este tema de la web www.jutge.org.
Objetivos: 5 6 10 12
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Desarrollo del tema: "Algoritmos fundamentales II"

Entender y asimilar los conceptos introducidos en teoría. Resolver los problemas seleccionados para este tema de la web www.jutge.org.
Objetivos: 6 11 12
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Consolidación

Resolver los problemas seleccionados para este tema de la web www.jutge.org.
  • Aprendizaje dirigido: Control 3 + Parcial + Final
Objetivos: 12
Contenidos:
Teoría
6h
Problemas
0h
Laboratorio
9h
Aprendizaje dirigido
5.8h
Aprendizaje autónomo
33h

Control 1

Hay que resolver varios ejercicios de programación usando la plataforma jutge.org. Para presentarse a este control se podrá exigir la resolución previa, con éxito e individualmente, de un número de ejercicios de una lista.
Objetivos: 1 2 8
Semana: 9 (Fuera de horario lectivo)
Tipo: examen de laboratorio
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Control 2

Hay que resolver varios ejercicios de programación usando la plataforma jutge.org. Para presentarse a este control se podrá exigir la resolución previa, con éxito e individualmente, de un número mínimo de ejercicios de una lista.
Objetivos: 4 3 5 7 8 9
Semana: 14 (Fuera de horario lectivo)
Tipo: examen de laboratorio
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Examen final

Hay que resolver varios ejercicios de programación usando la plataforma jutge.org. Evaluación global de la asignatura.
Objetivos: 4 3 5 6 7 8 9 10 11 12
Semana: 15 (Fuera de horario lectivo)
Tipo: examen final
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Metodología docente

En las sesiones de teoría el profesor intercala la exposición de nuevo material
teórico con ejemplos y problemas. Se combina tanto la parte magistral, en la que el profesor expone, explica y ejemplifica los conceptos de la asignatura, como
la interacción con los alumnos sobre las diversas alternativas que aparezcan
durante la resolución de casos prácticos

Las sesiones de laboratorio tienen dos partes diferenciadas:
Durante la primera hora, el profesor explica conceptos pràctios del entorno de programación, o se hacen ejercicios de forma colaborativa, o bien se analiza código para encontrar errores, etc.
Durante el resto de la sesión, los estudiantes resuelven problemas con el juez automático, con la ayuda del profesor si es necesario.

Se espera que en las sesiones de laboratorio, y durante las horas de estudio
personal, los estudiantes intenten resolver problemas de una colección, y que envíen sus soluciones a un juez automático que comprobará el funcionamiento con juegos de pruebas exhaustivos.
Adicionalmente, se aconseja al estudiante mostrar regularmente sus programas
(funcionen o no) a los profesores, por tal de que estos evalúen la calidad.

Método de evaluación

Durante el curso se realizarán tres exámenes llamados P1, P2 y F. Los dos primeros son parciales, mientras que el último es un final. Cada una de los exámenes tiene una lista de problemas asociada. Para poderse presentar al P1 y P2 es requisito imprescindible resolver un número mínimo de problemas de sus listas. Además, resolver un número mínimo de problemas de la lista asociada al examen final F habilita que el valor FF de la fórmula de evaluación abajo sea la nota del final F (en caso contrario, el valor de FF será No Presentado (NP)). El mínimo de problemas de cada lista, el procedimiento y plazos de entrega se establecen en la página web de la asignatura. La nota final de la asignatura se obtiene con la fórmula:

max (0,2 * P1 + 0,3 * P2 + 0,5 * FF, F)

Un examen tendrá nota NP si no se ha hecho ninguna entrega a ninguno de sus problemas.


REEVALUACIÓN

La reevaluación consiste en un curso intensivo de 12 horas presenciales con su correspondiente evaluación, después de los exámenes finales y antes del inicio del cuatrimestre siguiente. Se calcula que la reevaluación requiere unas 50 horas de dedicación por parte del estudiante, entre clases presenciales, horas de estudio personal y evaluación.

Requisitos mínimos para optar a la reavaluación:
- Estar matriculado de la assignatura
- Tener una calificación diferente de NP en P1, P2 y FF en la fórmula de evaluación arriba. Notamos que este requisito implica haber resuelto un mínimo de problemas en cada una una de las listas asosciadas a cada exámen.
- Haber obtenido una nota final entre 3.5 y 4.9

Requisitos para ser reevaluado:
- Asistir a todas las clases presenciales del curso intensivo.
- Hacer los ejercicios y actividades que solicite el profesorado del curso intensivo.

Evaluación:
El resultado de la evaluación del curso intensivo será "apto" o "no apto". La nota definitiva de la asignatura será:
Nota definitiva = 5, si la nota del intensivo es "apto";
Nota definitiva = NF, si la nota del intensivo es "no apto";
(donde NF es la nota obtenida durante el cuadrimestre).

COMPETENCIA TRANSVERSAL
La evaluación de la competencia transversal "Aprendizaje Autónomo" se basa en la recopilación de 2 datos relacionados con el rendimiento del estudiante respecto a las listas de problemas a entregar durante el cuatrimestre:

Esfuerzo de autoaprendizaje (E):
Media del ratio problemas_entregados / problemas_minimos_requeridos para cada control del curso. Se calculará como: E = (E1 + E2 + E3) / 3. La métrica se saturará en 2. Esta métrica pretende incentivar a los estudiantes a hacer más ejercicios de los mínimos requeridos.

Planificación del autoaprendizaje (P):
Medida de la distribución temporal de las entregas de los problemas presentados de las diferentes listas. Se calculará como P = (P1 + P2 + ... + Pn) / n
Donde:
Pi = -Xi*log(Xi) - (1-Xi)*log(1-Xi), si Xi<0.5
Pi = 1, si Xi>=0.5
siendo Xi el porcentaje de problemas presentados en la primera mitad del período de entrega de la lista (y por tanto 1-Xi el porcentage presentado en la segunda mitad). Un valor bajo de P indica tendencia a concentrar el esfuerzo en la seguna mitad del periodo. Un valor alto indica una distribución más uniforme del esfuerzo, o una concentración en el principio del periodo.
Esta métrica pretende incentivar a los estudiantes a organizarse el trabajo y distribuir los ejercicios en el tiempo, al ritmo marcado por las sesiones de teoría y laboratorio.

La nota de la competencia transversal será:
NP si E <= 0.5 (No hay suficientes ejercicios presentados para evaluar la competencia)
D si 0.5 < E < 1 (No se ha llegado al mínimo requerido, indicando poco esfuerzo de autoaprendizaje)
C si E>=1 y P*E <= 0.4
B si E>=1 y 0.4 < P*E <= 1
A si E>=1 y P*E > 1

Bibliografía

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/
  • 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/
  • 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://www.lsi.upc.edu/~pro1/
  • 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

Capacidades previas

Students are expected to have acquired the knowledge and skills defined for the scientific-technical branch of upper secondary school education or equivalent.