Créditos
6
Tipos
Obligatoria
Requisitos
Esta asignatura no tiene requisitos
, pero tiene capacidades previas
Departamento
CS
Profesorado
Responsable
- Jordi Delgado Pin (jdelgado@cs.upc.edu)
Horas semanales
Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0
Aprendizaje autónomo
6
Competencias
Transversales
Específicas
Genéricas
Objetivos
-
Conocer los conceptos más básicos de la programación con funciones (sencillas y de orden superior) y su utilización como herramientas para adecuar un lenguaje de programación al dominio del problema que se quiere resolver
Competencias relacionadas: CG2, CT6, CE03, CE10, CE12, -
Conocer el concepto de recursividad y cómo distinguir procesos iterativos y recursivos definidos con funciones recursivas
Competencias relacionadas: CG4, CT6, CE03, CE10, CE12, -
Empezar a entender el concepto de diseño del software
Competencias relacionadas: CG4, CT6, CE03, CE10, -
Poder trabajar con la idea de error en un programa y la utilización de excepciones para tratar estos errores
Competencias relacionadas: CG4, CE10, -
Conocer el concepto de contenedor y las situaciones en que es pertinente utilizarlos. Conocer el coste de su uso (informalmente)
Competencias relacionadas: CG4, CT6, CE02, CE04, -
Introducir al estudiante en el cálculo de la complejidad de los algoritmos
Competencias relacionadas: CE13, -
Involucrar al estudiante en el diseño e implementación en grupo de un problema sencillo
Competencias relacionadas: CG2, CG4, CG8, CT4, CE03, CE10,
Contenidos
-
Construyendo Abstracciones con Funciones: Funciones (simples y de orden superior). Entornos. Control del flujo de ejecución.
Se introduce al estudiante en el mecanismo principal de solución de problemas a partir del diseño bottom-up de funciones que acerquen el lenguaje de programación al dominio del problema. Se estudian los mecanismos de definición de funciones, paso de parámetros, entorno y alcance, y las principales estructuras de control del flujo de ejecución (condicional, iterativas) -
Construir Abstracciones con Funciones: Recursividad y ejemplos.
Se introduce el hecho de que una función se puede llamar a sí misma, la recursividad como mecanismo conceptual para resolver problemas y la idea de proceso. Funciones recursivas definen procesos iterativos y recursivos. -
Construyendo Abstracciones con Funciones: Diseño. Tratamiento de errores con excepciones.
Se introduce el concepto de diseño de un programa para resolver un problema. Se introduce la idea de error en un programa y cómo tratarlos con el mecanismo de excepciones. -
Construyendo abstracciones con Funciones: Ejemplos de resolución de problemas
Se refuerzan los conceptos introducidos hasta el momento con numerosos problemas de dificultad baja y media. -
Construyendo Abstracciones con Funciones: Contenedores
Se empieza a trabajar con contenedores proporcionados por el lenguaje de programación: Secuencias, Listas, Diccionarios y con otros de implementados dentro del curso, como las Matrices o los Árboles. -
Construyendo Abstracciones con Funciones: Mutabilidad. Iteradores y Generadores.
El concepto de mutabilidad se ve por primera vez relacionado con listas, y se discuten las ventajas e inconvenientes de tener estructuras de datos inmutables. Se introducen los iteradores y generadores como nuevas estructuras de control. -
Introducción a la Complejidad de los Algoritmos
Se hace una pequeña introducción a la notación asintótica y el cálculo de la complejidad en caso peor de algunos algoritmos notables vistos durante el curso.
Actividades
Actividad Acto evaluativo
Construyendo Abstracciones con Funciones: Funciones y Estructuras de Control
Es necesario que el estudiante esté atento en clase y realice los ejercicios propuestos.Objetivos: 1 2 3 4
Contenidos:
- 1 . Construyendo Abstracciones con Funciones: Funciones (simples y de orden superior). Entornos. Control del flujo de ejecución.
- 2 . Construir Abstracciones con Funciones: Recursividad y ejemplos.
- 3 . Construyendo Abstracciones con Funciones: Diseño. Tratamiento de errores con excepciones.
- 4 . Construyendo abstracciones con Funciones: Ejemplos de resolución de problemas
Teoría
10h
Problemas
0h
Laboratorio
12h
Aprendizaje dirigido
0h
Aprendizaje autónomo
30h
Complejidad de los Algoritmos
Es necesario que el estudiante esté atento en clase y realice los ejercicios propuestos.Objetivos: 6
Contenidos:
Teoría
3h
Problemas
0h
Laboratorio
4h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h
Metodología docente
La docencia de la asignatura está estructurada en clases de teoría y clases de laboratorio.En las clases de teoría los profesores presentan los contenidos esenciales de la asignatura. En las clases de laboratorio se practican los contenidos de la asignatura (los presentados en clase y los adquiridos autónomamente) mediante la realización de problemas prácticos. Las clases de laboratorio serán una continuación de las clases teóricas, donde los conceptos nuevos se implementarán a medida que vayan apareciendo.
Método de evaluación
El método de evaluación de la asignatura consistirá en dos pruebas de carácter teórico (T1 y T2), una a mediados de curso y otra al final y una práctica de tamaño pequeño-medio (Practica).Entonces, el método de evaluación sería:
0.8 * Teoría + 0.2 * Practica
donde:
Teoría: MAX(T2, 0.5 * T1 + 0.5 * T2)
Reevaluación: sólo se pueden presentar a la reevaluación aquellas personas que, habiéndose presentado en el examen final, hayan suspendido la teoría. La nota máxima que se puede obtener en la reevaluación es un 7.
Competencia transversal "Trabajo en equipo":
Se evalúa usando una rúbrica simple en que el tutor de cada grupo puntúa los
diferentes aspectos del trabajo en equipo de cada miembro de los grupos.
Bibliografía
Básico
-
Composing Programs (on-line)
- DeNero, John,
https://www.composingprograms.com -
Structure and interpretation of computer programs
- Abelson, Harold; Sussman, Gerald Jay; Sussman, Julie,
MIT Press [etc.],
1996.
ISBN: 9780262011532
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002456139706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Python pocket reference
- Lutz, Mark,
O'Reilly Media, Inc.,
2014.
ISBN: 9781449356941
Web links
- Aquest és el text PRINCIPAL de l'assignatura, la font d'informació primària per a tot allò que expliquem a classe. http://www.composingprograms.com/
- Aquest és el curs CS 61A: Structure and Interpretation of Computer Programs, de l'Universitat de Berkeley, en el que aquest curs està basat https://cs61a.org/
- La principal referència del llenguatge de programació que fem servir: Python. No és un lloc on aprendre a programar, és un lloc on consultar detalls de les construccions i llibreries del llenguatge https://docs.python.org/3/reference/index.html