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

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

Otros

  • 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 ( )

Horas semanales

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

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.
Objetivos: 4 3 9
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
3h
Aprendizaje dirigido
0h
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
2h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
19.5h

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.
Objetivos: 5 6 7 8 12
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0h
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

Teoría
0h
Problemas
0h
Laboratorio
9h
Aprendizaje dirigido
0h
Aprendizaje autónomo
33h

Examen parcial

Hay que resolver varios ejercicios de programación usando la plataforma jutge.org.
Objetivos: 1 2 8
Semana: 9 (Fuera de horario lectivo)
Tipo: examen de teoría
Teoría
2h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Examen parcial

Hay que resolver varios ejercicios de programación usando la plataforma jutge.org.
Objetivos: 1 2 4 3 5 7 8 9
Semana: 14 (Fuera de horario lectivo)
Tipo: examen de teoría
Teoría
3h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Examen final

Hay que resolver varios ejercicios de programación en la plataforma jutge.org. Evaluación global de la asignatura
Objetivos: 1 2 4 3 5 6 7 8 9 10 11 12
Semana: 15 (Fuera de horario lectivo)
Tipo: examen de teoría
Teoría
3h
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 todo el curso, habrá entregas de deberes de forma regular, las cuales consistirán en tener que entregar via juez soluciones a ejercicios específicos. El total de las notas obtenidas por los deberes contará un 15% de la nota global de la asignatura. Los estudiantes podrán aprovechar las clases de laboratorio para preguntar dudas sobre estos deberes.

Durante el curso, también tendrán lugar dos pruebas evaluatorias, el examen parcial y el examen final. Sean D, P y F las notas sobre 10 de los deberes, el examen parcial y el examen final, respectivamente. La nota global de la asignatura se obtiene mediante esta fórmula:

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

Un examen tendrá nota NP si no se ha hecho ninguna entrega a ninguno de sus problemas.
La nota global de la asignatura N será NP si ambos exámenes parcial y final tienen nota NP.

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

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 A=min(D,1.5*N) y será:

NP si la nota de la asignatura N es NP o la cantidad de deberes entregados representa menos del 50% del total. En caso contrario:
D si 0 <= A < 5
C si 5 <= A < 7
B si 7 <= A < 9
A si 9 <= A <= 10

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

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.