Programación y Algorítmica I

Usted está aquí

Créditos
6
Tipos
Obligatoria
Requisitos
Esta asignatura no tiene requisitos, pero tiene capacidades previas
Departamento
CS
Esta asignatura es la introducción a la programación por los estudiantes del Grado de IA. La asignatura girará en torno al concepto de Abstracción, poniendo énfasis en el proceso mediante el que se es capaz de resolver problemas utilizando abstracción basada en funciones.

Profesorado

Responsable

  • Jordi Delgado Pin ( )

Horas semanales

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

Competencias

Competencias Transversales

Transversales

  • CT4 [Avaluable] - Trabajo en equipo. Ser capaz de trabajar como miembro de un equipo interdisciplinar, ya sea como un miembro más o realizando tareas de dirección, con la finalidad de contribuir a desarrollar proyectos con pragmatismo y sentido de la responsabilidad, asumiendo compromisos teniendo en cuenta los recursos disponibles.
  • CT6 [Avaluable] - Aprendizaje autónomo. Detectar deficiencias en el propio conocimiento y superarlas mediante la reflexión crítica y la elección de la mejor actuación para ampliar dicho conocimiento.

Competencias Técnicas

Específicas

  • CE02 - 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.
  • CE03 - Identificar i aplicar els procediments algorítmics bàsics de les tecnologies informàtiques per a dissenyar solucions a problemes, analitzant la idoneïtat i complexitat dels algorismes proposats.
  • CE04 - Diseñar y utilizar de forma eficiente los tipos y estructuras de datos más adecuados a la resolución de un problema.
  • CE10 - Analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, eligiendo el paradigma y los lenguajes de programación más adecuados.
  • CE12 - Dominar los principios fundamentales y modelos de la computación y saberlos aplicar para interpretar, seleccionar, valorar, modelar, y crear nuevos conceptos, teorías, usos y desarrollos tecnológicos relacionados con la inteligencia artificial.
  • CE13 - Evaluar la complejidad computacional de un problema, identificar estrategias algorítmicas que puedan conducir a su resolución y recomendar, desarrollar e implementar aquella que garantice el mejor rendimiento de acuerdo con los requisitos establecidos.

Competencias Técnicas Genéricas

Genéricas

  • CG2 - Utilizar los conocimientos fundamentales y metodologías de trabajo sólidas adquiridos durante los estudios para adaptarse a los nuevos escenarios tecnológicos del futuro.
  • CG4 - Razonar, analizando la realidad y diseñando algoritmos y formulaciones que la modelen. Identificar problemas y construir soluciones algorítmicas o matemáticas válidas, eventualmente nuevas, integrando el conocimiento multidisciplinar necesario, valorando distintas alternativas con espíritu crítico, justificando las decisiones tomadas, interpretando y sintetizando los resultados en el contexto del dominio de aplicación y estableciendo generalizaciones metodológicas a partir de aplicaciones concretas.
  • CG8 - Observar un ejercicio ético de la profesión en todas sus facetas, aplicando criterios éticos en el diseño de sistemas,algoritmos, experimentos, utilización de datos, de acuerdo con los sistemas éticos recomendados por los organismos nacionales e internacionales, con especial énfasis en seguridad, robustez, privacidad, transparencia, trazabilidad, prevención de sesgos (de raza, género, religión, territorio, etc.) y respeto a los derechos humanos.

Objetivos

  1. 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,
  2. Conocer el concepto de recursividad y cómo distinguir procesos iterativos y recursivos definidos con funciones recursivas
    Competencias relacionadas: CG4, CT6, CE03, CE10, CE12,
  3. Empezar a entender el concepto de diseño del software
    Competencias relacionadas: CG4, CT6, CE03, CE10,
  4. Poder trabajar con la idea de error en un programa y la utilización de excepciones para tratar estos errores
    Competencias relacionadas: CG4, CE10,
  5. 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,
  6. Introducir al estudiante en el cálculo de la complejidad de los algoritmos
    Competencias relacionadas: CE13,
  7. 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

  1. 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)
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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


Teoría
10h
Problemas
0h
Laboratorio
12h
Aprendizaje dirigido
0h
Aprendizaje autónomo
30h

Construyendo Abstracciones con Funciones: Contenedores, Iteradores, Generadores.

Es necesario que el estudiante esté atento en clase y realice los ejercicios propuestos.
Objetivos: 5 7
Contenidos:
Teoría
12h
Problemas
0h
Laboratorio
14h
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

Examen Parcial


Objetivos: 1 2 3 4
Semana: 7
Tipo: examen de teoría
Teoría
2h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Examen Final


Objetivos: 5 6 7
Semana: 15 (Fuera de horario lectivo)
Tipo: examen de teoría
Teoría
3h
Problemas
0h
Laboratorio
0h
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)

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ásica:

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

Capacidades previas

Las definidas en el bachillerato científico-técnico o equivalentes