
Programación 3
Código: 107892Créditos: 6
| Titulación | Tipo | Curso |
|---|---|---|
| Ingeniería Informática | OB | 2 |
Profesor/a de contacto
- Nombre :
- Gemma Sanchez Albaladejo
- Correo electrónico :
- gemma.sanchez@uab.cat
Equipo docente
- Roberto Ferrero Pintor
- Daniel Soto Alvarez
Idiomas de los grupos
Puede consultar esta información al final del documento.
Prerrequisitos
La asignatura no puede tener ningún prerrequisito oficial por normativa. Pero los estudiantes que no han cursado y aprobado previamente las asignaturas de Programació 1 y Programació 2, suspenden en mayor proporción esta asignatura. Por ello se recomienda insistentemente que el estudiante haya cursado y superado satisfactoriamente las asignaturas previas de Programació 1 y Programació 2 así como Matemàtica Discreta. Por lo tanto, está familiarizado con las estructuras básicas y avanzadas de la programación, Orientación objetos y el concepto de grafo con los diferentes métodos de recorrido sobre ellos.
Objetivos
Esta asignatura forma parte de la materia Algorísmica e información y debe verse como la continuación lógica de la asignatura Programació 2 y la continuación práctica de la asignatura de Matemàtica Discreta. El objetivo básico es profundizar en las nociones de programación orientada a objetos introducidas en Programació 2 y ampliarlas con otros conceptos de programación y otras estructuras de datos más complejas así como algoritmos eficientes para su recorrido. Se profundizará en el concepto de objetos trabajando en profundidad las plantillas de clases (templatas) y la herencia. Se introducirá el concepto de algoritmo recursivo con algoritmos recursivos simples y más complejos como los relacionados con recorridos de árboles y grafos. Además se introducirán algoritmos de búsqueda y ordenación eficientes y se profundizará en el concepto de coste temporal y espacial de un algoritmo. Al finalizar el curso el estudiante debe ser capaz de diseñar y programar soluciones a problemas complejos de forma óptima. De esta forma, los objetivos formativos que se proponen para la asignatura son los siguientes:
- Ser capaz de analizar un problema complejo, diseñar una solución óptima, implementarla, calcular su coste y probarla.
- Entender y saber utilizar estructuras de datos complejos como árboles, grafos etc. y utilizarlas correctamente y de forma eficiente para resolver problemas algorítmicos complejos.
- Entender y aplicar correctamente los principios avanzados de la programación orientada a objetos: templates, clases abstractas, funciones virtuales.
- Dotar al alumno de la capacidad de diseño de algoritmos para la resolución de problemas complejos, viendo algoritmos complejos de recorrido y búsqueda en estructuras de datos complejos. Además de analizar la complejidad temporal y espacial de ellos a fin de elegir la solución que más se adapte a las necesidades de cada momento.
- Introducir el concepto de recursividad y su aplicación en el recorrido de estructuras complejas recursivas, además de ser capaz de analizar la complejidad de algoritmos recursivos.
- Programar en un lenguaje de programación real y ser capaz de depurar sus propios programas.
- Desarrollar los programas siguiendo unas normas de estilo tendentes a conseguir programas de calidad. Dentro de estas normas de estilo se engloban aquéllas que facilitan la comprensión del código, como pueden ser el uso de comentarios, sangrar el código, la utilización de nombres adecuados por variables y funciones, etc. Y el uso de excepciones.
Resultados de aprendizaje
- CM19 (Crear las estructuras de datos más adecuadas en el diseño e implementación de algoritmos) Crear las estructuras de datos más adecuadas en el diseño e implementación de algoritmos
- KM20 (Identificar las principales estructuras de datos y estructuras de recursividad en la definición de algoritmos) Identificar las principales estructuras de datos y estructuras de recursividad en la definición de algoritmos
- SM23 (Analizar las estructuras de datos utilizadas en el diseño de algoritmos) Analizar las estructuras de datos utilizadas en el diseño de algoritmos
Contenidos
0. Introducción
Objetivos y presentación de la asignatura. Repaso de Programación Orientada a Objetos y Estructuras de Datos Dinámicos.
1. Orientación a objetos
Paradigma de objetos avanzado. Templates. Herencia, clases abstractas, funciones virtuales y polimorfismo.
2. Complejidad en algoritmos iterativos
Complejidad espacial y temporal. Cómo calcular la complejidad en algoritmos iterativos.
3. Estructuras de datos no lineales. Hash
Técnicas de "Hashing". Matrices hash y listas hash. Funciones hash.
4. Recursividad y Algoritmos de ordenación
Introducción a los algoritmos recursivos. Método de la burbuja, QuickSort, MergeSort. Recursividad. Cálculo complejidad.
5. Estructuras de datos no lineales. Grafos
Representaciones y recorridos. BFS, DFS, Resolución de problemas con grafos.
6. Estructuras de datos no lineales. Árboles.
Definición y representación de un árbol. Recorridos de árboles. Binary Heaps. Red-Black Tree.
7. Conceptos básicos de Python.
Conceptos básicos de programación en Python.
Actividades formativas y Metodología
| Título | Horas | ECTS | Resultados de aprendizaje |
|---|---|---|---|
| Trabajo autónomo | 46 | 1,84 | CM19, KM20, SM23 |
| Clases presenciales | 50 | 2 | CM19, KM20, SM23 |
| Preparación previa de las clases. | 34 | 1,36 | CM19, KM20, SM23 |
| Tutorias | 1 | 0,04 | CM19, KM20, SM23 |
| Estudio Individual | 13 | 0,52 | CM19, KM20, SM23 |
La metodología docente de la asignatura parte del principio que dice que "programar es la única forma de aprender a programar" y, por tanto, estará centrada principalmente en el trabajo práctico del estudiante. También se basa en aprovechar al máximo el tiempo presencial que el estudiante está con el profesor. De esta forma conceptos teóricos descriptivos, fácilmente alcanzados por el estudiante mediante la visualización de vídeos o lectura de artículos, se harán de forma autónoma (y guiada) por parte del estudiante. Mientras que la puesta en práctica de estos conceptos o la ampliación de los mismos se realizarán en clase con ayuda del profesor. El objetivo principal de la asignatura es que el estudiante sepa resolver un problema dado, de forma eficiente, utilizando estructuras de datos complejos, si es necesario. Por esta razón el aprendizaje se centrará en acompañar al estudiante en su labor de resolución de problemas a partir de unos conceptos teóricos estudiados previamente de forma autónoma. Se utilizará principalmente el lenguaje de programación C++, y se darán algunos conceptos de programación en python.
La metodología general de la asignatura se puede dividir en tres fases:
- Preparación de la clase: el objetivo de esta fase es que el alumnado pueda aprender los conceptos que se trabajarán en la siguiente sesión mediante diversas actividades ofrecidas por el profesorado como puede ser el visionado de vídeos, la lectura de textos, etc.
- Clase presencial: el objetivo de esta fase es consolidar los conceptos vistos y ponerlos en valor dentro del contexto de la asignatura. El profesorado velará para que el alumnado profundice en estos conceptos mediante ejercicios (más o menos) guiados durante la sesión, y añadiendo nuevos matices a los conceptos aprendidos de forma autónoma cuando sea necesario. De esta forma la clase presencial se aprovecha mucho más dado que los conceptos descriptivos ya son conocidos por el estudiante y se puede entrar de lleno en su utilización y ampliación que son los puntos en los que el estudiante puede necesitar más la ayuda del profesor. En las clases presenciales es necesario llevar un portátil a menos que se hagan en aulas que ya dispongan de ordenadores.
- Trabajo autónomo: para que el alumnado coja soltura en la utilización de estructuras complejas y los algoritmos asociados a las mismas éste deberá hacer una parte del trabajo por su cuenta, ya sean
ejercicios sueltos o dentro de un proyecto.
El trabajo del proyecto deberá realizarse en grupos de 2 personas.
La gestión de la docencia de la asignatura se realizará a través de la plataforma de campus virtual (https://cv.uab.cat/) y quizás Caronte (http://caronte.uab.cat/).
Evaluación
Actividades de evaluación continuada
| Título | Peso | Horas | ECTS | Resultados de aprendizaje |
|---|---|---|---|---|
| Segundo Parcial | 35% de la nota final (50% de la nota de teoria) | 2 | 0,08 | CM19, KM20, SM23 |
| Examen de recuperación | ver la descripción de los métodos de evaluación | 2 | 0,08 | CM19, KM20, SM23 |
| Primer Parcial | 28% de la nota final (40% de la nota de teoria) | 1,8 | 0,072 | CM19, KM20, SM23 |
| Proyecto Programación | 20% | 0 | 0 | CM19, KM20, SM23 |
| Entrega de problemas | 10% | 0 | 0 | CM19, KM20, SM23 |
| Tercer Parcial | 7% de la nota final (10% de la nota de teoria) | 0,2 | 0,008 | CM19, KM20, SM23 |
La evaluación de la asignatura tendrá en cuenta tres tipos de actividades de evaluación: Evaluación Individual, Proyecto Total de programación y Evaluación de Problemas. Además tiene un apartado adicional de Nota Adicional Problemas Clase que puede aportar hasta 1 punto a la nota final siempre que esté ya aprobada
La nota final de la asignatura se obtiene combinando la evaluación de estas 3 actividades (más la adicional) de la manera siguiente:
Nota Final = (0.7 * Evaluación Individual) + (0.2 * Proyecto Total) + (0.1 * Evaluación Problemas) + Nota Adicional Problemas Clase (màximo 1 punto)
A continuación se detallan los diferentes componentes de la calificación de la asignatura:
- Evaluación Individual: Este apartado corresponde a las pruebas individuales realizadas a lo largo del curso. La evaluación constará de tres pruebas parciales y una prueba final de recuperación. El primer parcial se realizará durante el período lectivo, preferentemente en una franja que permita la coincidencia horaria de todos los grupos de la asignatura. El resto de pruebas parciales y la prueba de recuperación se programarán según el calendario y los horarios establecidos por la coordinación de la titulación
La prueba final de recuperación permitirá recuperar los parciales no superados y, de forma voluntaria, mejorar la calificación de los parciales ya superados. El alumnado que no haya superado uno o más parciales deberá examinarse únicamente de los contenidos correspondientes a las partes no superadas. Por otra parte, el alumnado que desee mejorar la calificación de algún parcial ya superado podrá presentarse también en la prueba de recuperación de forma voluntaria. En todos los casos, la calificación final de cada parcial será la más alta de las notas obtenidas entre la convocatoria ordinaria y la prueba de recuperación.
La calificación de la evaluación individual se calculará segun la fórmula siguiente:
Evaluación Individual = (0,4×Parcial 1) + (0,5×Parcial 2) + (0,1×Parcial 3)
Para superar la asignatura será necesario:
- Obtener una calificación mínima de 4,0 en cada uno de los tres parciales.
- Obtener una Evaluación Individual mínima de 5,0
- Proyecto Total: Este apartado incluye el trabajo desarrollado en el proyecto de programación, que se realizará en grupos de hasta dos personas. La calificación del proyecto se basará en la evaluación de las diferentes entregas y en una prueba individual de seguimiento destinada a verificar la participación y el grado de conocimiento de cada estudiante sobre el proyecto desarrollado.
La calificación final del proyecto se calculará segun la fórmula siguiente:
Proyecto Total = (0.2 x Evaluación seguimiento proyecto) + (0.3 x Entrega Parcial 1) + (0.5 x Entrega Final)
donde:
- Entrega Parcial 1 (30%): entrega intermedia del proyecto a medio curso.
- Entrega Final (50%): versión final del proyecto.
- Evaluación Seguimiento Proyecto (20%): prueba individual sobre el proyecto realizado. La evaluación de seguimiento consistirá en una prueba individual que se realitzará conjuntamente con los parciales 2 y 3 de la asignatura. En caso de no superarla, se podrá recuperar el mismo dia de la prueba final de recuperación.
Para superar el proyecto será necesario:
- Obtener una calificación mínima de 4,0 en la Evaluación Seguimento Proyecto.
- Obteneruna calificación mínima de 5,0 en la Entrega Final.
- Obtener una calificación mínima de 5,0 en la nota de Proyecto Total.
La calificación del lliurament final podrà recuperar-se únicament si:
- La nota de Projecte Total és igual o superior a 3,0, i
- La calificación de l'Avaluació Individual és igual o superior a 5,0.
Esta recuperación de la entrega final se realitzará en las fechas establecidas para la recuperación de la asignatura.
- Evaluación Problemas: Este apartado incluye los ejercicios identificados como AVALUABLES(EVALUABLES) que se proponen a lo largo del curso y que se tendrán ue resolver de manera individual i autónoma.
No se exige una calificación mínima en esta actividad para superar la asignatura. Sin embargo, esta parte representa 1 punto de la nota final, por lo que no realizar las entregas puede impedir alcanzar la calificación mínima para aprobar la asignatura.
Los ejercicios entregados fuera de plazo, o aquellos que hayan obtenido una calificación de suspenso, podrán volver a entregarse hasta la fecha del examen final de la asignatura. En estos casos, la calificación máxima obtenida estará sujeta a una penalización del 20%.
La contribución de cada problema a la nota de este apartado se calculará de forma proporcional al peso del tema dentro de la asignatura y al número de problemas evaluables asociados a cada tema.
- Nota Adicional Problemas Clase (máximo 1 punto): Durante las sesiones de clase, el estudiantado realizará ejercicios que podrán entregarse mediante la plataforma digital. Estos ejercicios permitirán obtener hasta 1 punto adicional sobre la calificación final de la asignatura.
Para cada ejercicio se tendrán que hacer dos entregas:
- Primera entrega: debe realizarse al final de la sesión de clase. No es necesario que el ejercicio sea completamente funcional, pero debe contener código desarrollado durante la sesión. Esta entrega es obligatoria para poder optar a la entrega final.
- Entrega final: se podrá realizar hasta las 23.59 h del día siguiente a la sesión. Sólo podrán efectuarlo los estudiantes que hayan realizado la primera entrega dentro del plazo establecido.
Estas entregas no son recuperables. La contribución de cada ejercicio a la puntuación adicional se determinará en función del peso del tema dentro de la asignatura y el número de ejercicios entregables asociados a este tema.
No evaluable: Se considerará no evaluable (NA) al alumnado que no hace al menos el 50% de las entregas de ejercicios y no hace ninguna de las siguientes pruebas de evaluación: parcial 1, parcial 2, parcial 3, prueba final de recuperación, entrega final de la práctica.
Suspendidos: Si el cálculo de la nota final es igual o superior a 5 pero no se alcanza el mínimo exigido en alguna de las actividades de evaluación, la nota final será suspendido y se pondrá un 4.5 en la nota del expediente del alumnado que esté en esta situación.
Convalidaciones: Para el alumnado repetidor se convalidará la nota del proyecto del año anterior (curso 2025-26) si se cumplen estas condiciones:
a)La nota final del Proyecto Total del curso anterior es mayor o igual a 7
b)La nota de la Evaluación Individual del curso anterior es mayor o igual a 3
MH: Se darán tantas matrículas como puedan dentro de la normativa de la universidad, empezando por las notas más altas y siempre y cuando la nota mínima sea un 9.
Revisiones: Para cada actividad de evaluación, se indicará un lugar, fecha y hora de revisión en la que el estudiante podrá revisar la actividad con el profesor. Algunas de estas revisiones se podrán realizar también mediante el campus virtual en el entorno de prueba piloto de revisión de exámenes. En este contexto, se podrán realizar reclamaciones sobre la nota de la actividad, que serán evaluadas por el profesorado responsable de la asignatura. Al alumnado que no se presente a esta revisión, no se le revisará posteriormente esta actividad.
Protocolo de solicitud de reprogramación de actividades de evaluación:
En caso de que un estudiante no pueda asistir a una prueba parcial oa la evaluación individual de seguimiento del proyecto por causa debidamente justificada y reconocida por la titulación, no se programará una prueba alternativa antes de la recuperación. En estos casos, el estudiante realizará directamente la prueba de recuperación correspondiente. Sólo en caso de que tampoco pueda acreditar la consecución de los resultados de aprendizaje mediante esta prueba, el equipo docente valorará la realización de una actividad de evaluación específica adicional. Las incidencias justificadas que impidan la realización de entregas de problemas o del proyecto serán analizadas individualmente por el equipo docente, que determinará las medidas compensatorias que correspondan en función de las circunstancias de cada caso. En caso de incidencias técnicas generales que afecten a la plataforma de entrega e impidan o dificulten significativamente la presentación de los trabajos, los delegados o delegadas del curso tendrán que comunicar la incidencia a todo el equipo docente tan pronto como sea posible. Una vez verificada la incidencia, se establecerá una ampliación extraordinaria del plazo de entrega proporcional al tiempo durante el cual el servicio se haya afectado.
Nota importante sobre copias y plagios:
Sin perjuicio de otras medidas disciplinarias que se estimen oportunas, y de acuerdo con la normativa académica vigente, las irregularidades cometidas por el alumnado que puedan conducir a una variación de la calificación se calificarán con un cero (0). Las actividades de evaluación calificadas de esta forma y por este procedimiento no serán recuperables. Si es necesario superar cualquiera de estas actividades de evaluación para aprobar la asignatura, esta asignatura quedará suspendida directamente, sin oportunidad de recuperarla en el mismo curso. Estas irregularidades incluyen, entre otras:
la copia total o parcial de una práctica, informe, o cualquier otra actividad de evaluación;
- dejar copiar;
- presentar un trabajo de grupo no realizado íntegramente por los miembros del grupo;
- presentar como propios materiales elaborados por un tercero, aunque sean traducciones o adaptaciones, y por lo general trabajos con elementos no originales y exclusivos del estudiante;
- tener dispositivos de comunicación (como teléfonos móviles, smart watches, etc.) accesibles durante las pruebas de evaluación teórico-prácticas individuales (exámenes).
En estos casos, la nota numérica del expediente será el valor menor entre 3.0 y la media ponderada de las notas (y por tanto no será posible el aprobado por compensación). En la evaluación de las entregas de problemas y prácticas se utilizarán herramientas de detección de copia del código del programa.
Nota sobre la planificación de las actividades de evaluación. Las fechas de evaluación continua y entrega de trabajos se publicarán al principio de curso y pueden estar sujetas a cambios de programación por motivos de adaptación a posibles incidencias. Siempre se informará a través de Caronte y/o Campus Virtual sobre estos cambios ya que se entiende que éstas son las plataformas habituales de intercambio de información entre profesores y estudiantes.
Evaluación única. Esta asignatura no contempla el sistema de evaluación única.
Uso de la IA. Uso restringido: Para esta asignatura, se permite el uso de tecnologías de Inteligencia Artificial (IA) exclusivamente en labores de soporte, como la búsqueda bibliográfica o de información, la corrección de textos o las traducciones, la generación de pequeños códigos de inicialización de clases o algunos procesos simples de recorrido de estructuras simples como los vectores. El estudiante tendrá que identificar claramente qué partes han sido generadas con esta tecnología, especificar las herramientas utilizadas e incluir una reflexión crítica sobre cómo éstas han influido en el proceso y el resultado final de la actividad. La no transparencia del uso de la IA en esta actividad evaluable se considerará falta de honestidad académica y puede acarrear una penalización parcial o total en la nota de la actividad, o sanciones mayores en casos de gravedad.
Bibliografía
- http://www.cplusplus.com/ : The C++ Resources Network
- https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B: Programación en C++ - Wikilibros
- https://www.geeksforgeeks.org/c-plus-plus/?ref=ghm
- Mark Allen Weiss. Data Structures and Data Analysis in C++. Pearson. 2014.
- B. Eckel. Thinking in C++, Volume 1: Introduction to Standard C++, Prentice-Hall, 1999
- B. Eckel. Thinking in C++, Volume 2: Standard Libraries and Advanced Topics, Prentice-Hall, 1999
- F. Xhafa, P. Vázquez, J. Marco, X. Molinero, A. Martín: Programación en C++ para ingenieros. Thomson, 2006
- Scott Meyers. Effective Modern C++: Specifics Ways to Improve Your Use of C++11 and 14. O'Reilly Media, Incorporated, 2014.
- Robert C. Martin. Código limpio : manual de estilo para el desarrollo ágil de software. Anaya Multimedia, 2012
- Thinking in PYTHON Bruce Eckel (se puede descargar de http://www.bruceeckel.com).
- Learning PYTHON 2nd Edition. Mark Lutz and David Ascher, Safari Tech Books Online.
- Manuals de Python (de la pagina web oficial).
- https://www.geeksforgeeks.org/python-programming-language/?ref=ghm
- Llibres electrònics interactius de python:
- http://interactivepython.org/runestone/static/thinkcspy/toc.html#t-o-c
- http://interactivepython.org/runestone/static/pythonds/index.html
- http://www.pythontutor.com/
Software
- Microsoft Visual Studio
- Spyder Anaconda
Grupos e idiomas de la asignatura
La información proporcionada es provisional hasta el 30 de noviembre. A partir de esta fecha, podrá consultar el idioma de cada grupo a través de este enlace. Para acceder a la información, será necesario introducir el CÓDIGO de la asignatura
| Tipo de docencia | Grupo | Idioma | Semestre | Turno |
|---|---|---|---|---|
| (PAUL) Prácticas de aula | 411 | Catalán/Español | primer cuatrimestre | manaña-mixto |
| (PAUL) Prácticas de aula | 412 | Catalán/Español | primer cuatrimestre | manaña-mixto |
| (PAUL) Prácticas de aula | 431 | Catalán/Español | primer cuatrimestre | manaña-mixto |
| (PAUL) Prácticas de aula | 432 | Catalán/Español | primer cuatrimestre | manaña-mixto |
| (PAUL) Prácticas de aula | 451 | Catalán/Español | primer cuatrimestre | manaña-mixto |
| (PAUL) Prácticas de aula | 452 | Catalán/Español | primer cuatrimestre | manaña-mixto |
| (PAUL) Prácticas de aula | 453 | Catalán/Español | primer cuatrimestre | manaña-mixto |