Programación I

Usted está aquí

Créditos
7.5
Tipos
Obligatoria
Requisitos
Esta asignatura no tiene requisitos, pero tiene capacidades previas
Departamento
CS
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.

Profesores

Responsable

  • Jose Carmona Vargas ( )
  • Lluis Padro Cirera ( )

Otros

  • Edelmira Pasarella Sanchez ( )
  • Emma Rollón Rico ( )
  • Enrique Romero Merino ( )
  • Gabriel Valiente Feruglio ( )
  • Gerard Canal Camprodon ( )
  • Glyn Morrill ( )
  • Jorge Castro Rabal ( )
  • Jose Miguel Rivero Almeida ( )
  • Lluis Vila Grabulosa ( )
  • Maria Angela Nebot Castells ( )
  • Nicolas Mylonakis Pascual ( )
  • Rosa Maria Jiménez Gómez ( )

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 - 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.
    Related competences: 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++).
    Related competences: CT5.3,
  3. Tener destreza en el uso de funciones y acciones en el desarrollo de programas.
    Related competences: G7.1, CT4.1, CT5.4,
  4. Entender los conceptos de función, acción y paso de parámetros
    Related competences: CT4.1,
  5. Conocer en profundidad las tablas e identificar los problemas en los que su uso es apropiado
    Related competences: 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.

    Related competences: CT4.1, CT4.2, CT5.2,
  7. Asimilar en profundidad los esquemas de recorrido y búsqueda
    Related competences: CT4.2, CT1.2B,
  8. Asociar a un problema el esquema de solución apropiado
    Related competences: CT4.1, CT5.3,
  9. Comprender la recursividad. Ser capaz de proponer soluciones recursivas a problemas sencillos.
    Related competences: 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
    Related competences: CT4.1, CT4.2, CT5.2,
  11. Conocer en profundidad otros algoritmos fundamentales: Hörner, producto rápido, etc.
    Related competences: CT4.1, CT1.2B, CT1.1A,
  12. Ser capaz de escribir programas de una página que sean legibles, elegantes y eficientes.
    Related competences: 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 un ejercicio de programación usando el juez. 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: 1 2
Semana: 6 (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 un ejercicio de programación usando el juez. 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 7
Semana: 10 (Fuera de horario lectivo)
Tipo: examen de laboratorio
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Control 3

Hay que resolver usando el juez un ejercicio de programación . 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: 5 6 8 9
Semana: 15 (Fuera de horario lectivo)
Tipo: examen de laboratorio
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Examen final

Examen sobre ordenador. Evaluación global de la asignatura, con énfasis en los últimos temas.
Objetivos: 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

En esta asignatura se realizan tres controles C1, C2 y C3.

Con las tres notas de los controles combinadas obtiene una nota de evaluación continua AC expresada en la fórmula [1].
[1] AC = 0.25*n1 + 0.3*n2 + 0.45*n3

Los estudiantes con AC>=5 se consideran aprobados por curso con nota final AC.

Los estudiantes con AC<5 deberán presentarse al examen final (F). Su nota de la asignatura NF se obtendrá por la fórmula [2].
[2] NF = max (F, (AC + F) / 2)

Los estudiantes aprobados por curso podrán presentarse al exámen final solamente si solicitan explícitamente el cambio a la fórmula de evaluación [2]. El cambio sera irreversible.

Para poder presentarse a los controles será necesario haber resuelto un mínimo de problemas de las listas vinculadas a cada control, según el procedimiento y los plazos indicados en la web de la asignatura.

La corrección de los controles combina una nota automática otorgada por el "Jutge" y una nota manual. El peso global de las notas automáticas o de las notas manuales, no será inferior al 30%.

La corrección del examen final será íntegramente manual.

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
- Haber obtenido una nota final entre 3.5 y 4.9
- Haberse presentado a todos los exámenes (controles y final) durante el cuatrimestre.

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

  • 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/
  • 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
  • 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/
  • 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/
  • 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

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.