Guía docente de Fundamentos de Programación (2161115)
Grado
Rama
Módulo
Materia
Curso
Semestre
Créditos
Tipo
Profesorado
Teórico
Práctico
Tutorías
Julián Luengo Martín
Email- Primer semestre
- Martes
- 09:30 a 12:30 (D16 (Etsiit))
- 13:30 a 14:00 (D16 (Etsiit))
- Viernes
- 09:30 a 11:30 (D16 (Etsiit))
- 13:30 a 14:00 (D16 (Etsiit))
- Segundo semestre
- Martes de 10:30 a 13:30 (D16 (Etsiit))
- Jueves de 10:30 a 13:30 (D16 (Etsiit))
Prerrequisitos y/o Recomendaciones
No se necesita ningún prerrequisito.
Breve descripción de contenidos (Según memoria de verificación del Grado)
- Tipos de datos básicos.
- Objetos, operadores y expresiones.
- Estructuras de control.
- Funciones y procedimientos.
- Tipos de datos compuestos: homogéneos (arrays) y heterogéneos (registros).
- Algoritmos básicos de ordenación y búsqueda.
- Recursividad.
Resultados del proceso de formación y de aprendizaje
Conocimientos o Contenidos
- C01. Conoce las materias básicas y tecnologías que capacitan para el aprendizaje y desarrollo de nuevos métodos y tecnologías, así como las que dotan de una gran versatilidad para adaptarse a nuevas situaciones.
- C04. Conoce los fundamentos del uso y programación de los ordenadores, sistemas operativos, bases de datos y programas informáticos con aplicación en ingeniería.
- C05. Conoce la estructura, organización, funcionamiento e interconexión de los sistemas informáticos, los fundamentos de su programación, y su aplicación para la resolución de problemas propios de la ingeniería.
Competencias
- COM05. Concebir, desarrollar y mantener sistemas, servicios y aplicaciones informáticas empleando los métodos de la ingeniería del software como instrumento para el aseguramiento de su calidad.
- COM09. Analizar y valorar el impacto social y medioambiental de las soluciones técnicas, comprendiendo la responsabilidad ética y profesional de la actividad del Ingeniero Técnico en Informática.
Habilidades o Destrezas
- HD19. Trabaja en equipo, usando competencias demostrables mediante la elaboración y defensa de argumentos.
- HD20. Aplica principios de ética profesional para conseguir la mejora continua y la calidad de los productos actuando con rigor y responsabilidad.
Resultados de aprendizaje (Objetivos)
- Comprender el funcionamiento de un computador, haciendo especial énfasis en la necesidad de desarrollo de software por parte del programador.
- Presentar la historia de la programación y de los distintos paradigmas de programación, situando en ese contexto el lenguaje de programación que se va a utilizar.
- Comprender la necesidad de un proceso de traducción de un lenguaje de alto nivel.
- Conocer y distinguir los conceptos de algoritmo y programa.
- Mostrar la necesidad de codificar la información que maneja internamente un computador, enfatizando posibilidades y limitaciones cuando se resuelve un problema.
- Conocer los tipos de datos primitivos y sus operaciones.
- Distinguir entre tipo de dato y objeto.
- Conocer las acciones básicas de E/S de datos.
- Aprender a usar las estructuras de control básicas: secuencial, condicional e iterativa.
- Comprender la necesidad de dividir la solución creando módulos (funciones o procedimientos) que implementen operaciones no primitivas.
- Comprender la necesidad de la especificación de una función o procedimiento, como método de abstracción, introduciendo los conceptos de precondición y postcondición.
- Aprender a resolver problemas aplicando una metodología de diseño modular (top-down/bottom-up).
- Manejar correctamente los mecanismos de comunicación entre módulos (interfaces), así como las distintas formas de paso de parámetros y devolución de resultados.
- Entender la gestión de llamadas a funciones mediante la pila.
- Motivar e introducir los tipos de datos compuestos registros, vectores y matrices, así como sus operaciones.
- Conocer los algoritmos de ordenación básicos (selección, inserción, burbuja).
- Conocer los algoritmos de búsqueda básicos (lineal, dicotómica).
- Motivar y aprender a resolver problemas mediante algoritmos recursivos.
Programa de contenidos teóricos y prácticos
Teórico
Tema 1. Programación en C++: Fundamentos
- El ordenador, algoritmos y programas
- Especificación de programas
- Datos y tipos de datos
- Operadores y Expresiones
- Tipos de datos comunes en C++
Tema 2. Estructuras de Control
- Estructura Condicional
- Estructuras Repetitivas
Tema 3. Funciones
- Fundamentos. Paso de parámetros por valor y por referencia.
- Diseño de funciones
Tema 4. Registros, Vectores y Matrices
- Registros
- Vectores. Algoritmos de búsqueda y ordenación sobre vectores
- Matrices
Tema 5. Clases
- Encapsulación. Datos y métodos.
- Ocultación de información. Ámbito público y privado.
- Constructores.
- Copias de objetos.
- Datos y métodos constantes
- Colecciones de datos: clases tipo secuencia y tabla
Tema 6. Recursividad
- Diseño de algoritmos recursivos
- Funciones recursivas
Práctico
Los alumnos tendrán que resolver a lo largo de la asignatura una serie de ejercicios cuyo ámbito es el definido por el temario de la asignatura, por lo que se organizan en los siguientes bloques:
Bloque 1: Tipos de datos, expresiones y sentencias
Bloque 2: Estructuras condicionales y repetitivas
Bloque 3: Funciones
Bloque 4: Vectores, matrices, y registros
Bloque 5: Clases
Bloque 6: Recursividad
Seminario 1. Presentación del entorno de trabajo
Seminario 2. Test y depuración
Seminario 3. Documentación de funciones
Bibliografía
Bibliografía fundamental
- A. Garrido. Fundamentos de Programación en C++. Delta Publicaciones, 2005.
- R. Lafore. Object-oriented Programming in C++. Sams Publishing 2005.
Bibliografía complementaria
- A. Garrido. Fundamentos de programación con la STL. Editorial Universidad de Granada, 2016.
- A. Garrido. Metodología de la Programación: de bits a objetos. Editorial Universidad de Granada, 2016.
- R. Martin. Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall, 2008.
- S. McConnell. Code Complete: A Practical Handbook of Software Construction. 2ª Edición. Microsoft Press, 2004.
- B. Stroustrup. The C++ Programming Language. 4ª Edición. Addison-Wesley, 2015.
- R. Mercer. Computing Fundamentals with C++. Franklin, Beedle and Associates, 2018.
- T. Gaddis, J. Walters, G. Muganda. Starting out with C++: early objects. 10ª Edición. Pearson, 2019.
- W. Savitch. Resolución de problemas con C++. Pearson, 2017.
Enlaces recomendados
Metodología docente
- MD01. Lección magistral.
- MD02. Actividades prácticas.
- MD03. Seminarios.
- MD04. Actividades no presenciales.
- MD05. Tutorías académicas.
Evaluación (instrumentos de evaluación, criterios de evaluación y porcentaje sobre la calificación final)
Evaluación ordinaria
Todo lo relativo a la evaluación se regirá por la Normativa de evaluación y calificación de los estudiantes vigente en la Universidad de Granada.
La nota final del alumno se calculará a partir de las calificaciones que obtenga en las siguientes partes, y según la ponderación indicada:
- Parte teórica: La ponderación de esta parte es del 60%. Para la parte escrita se realizará un examen escrito multi-pregunta sobre los contenidos de la materia impartida. Este examen se realizará en su convocatoria oficial ordinaria.
- Parte práctica: La ponderación de esta parte es del 40%. La evaluación del trabajo práctico consta de los siguientes apartados:
- La parte de la nota de la evaluación continua se obtendrá con distintas pruebas que se realizarán durante el desarrollo de las clases prácticas, además de la asistencia y entrega de los trabajos requeridos. La ponderación de esta parte es del 10%.
- Se realizará una o varias pruebas de resolución de problemas a lo largo de la asignatura. La ponderación de esta parte es del 30%.
Si la nota de la parte teórica es superior o igual a 4 sobre 10, entonces la nota final será:
Nota final = 0,6 * parte teórica + 0,4 * parte práctica
En otro caso, la nota final será la nota de la parte teórica (sobre 10)
Evaluación extraordinaria
Los alumnos podrán optar, entre conservar la nota de cada parte obtenida en la convocatoria ordinaria o volver a evaluarse.
Se realizarán las siguientes pruebas en un único acto académico:
- Parte teórica: La ponderación de esta parte es del 60%. Para la parte escrita se realizará un examen escrito multi-pregunta sobre los contenidos de la materia impartida.
- Parte práctica: La ponderación de esta parte es del 40%. Para la parte práctica se realizará un examen práctico en el ordenador.
Si la nota de la parte teórica es superior o igual a 4 sobre 10, entonces la nota final será:
Nota final = 0,6 * parte teórica + 0,4 * parte práctica
En otro caso, la nota final será la nota de la parte teórica (sobre 10).
Evaluación única final
Aquellos alumnos que opten por acogerse a la "Evaluación Única Final", realizarán un examen en ordenador como evaluación de la parte práctica. La parte teórica se evaluará mediante un examen escrito multi-pregunta sobre los contenidos de la materia impartida. Ambos exámenes se realizarán en un solo acto académico.
El peso de la evaluación de las actividades formativas, se ajustará a lo indicado a continuación:
- Parte teórica: La ponderación de esta parte es del 60%. Para la parte escrita se realizará un examen escrito multi-pregunta sobre los contenidos de la materia impartida. Este examen se realizará en su convocatoria oficial ordinaria.
- Parte práctica: La ponderación de esta parte es del 40%. Para la parte práctica se realizará un examen práctico en el ordenador.
Si la nota de la parte teórica es superior o igual a 4 (sobre 10), entonces la nota final será:
Nota final = 0,6 * parte teórica + 0,4 * parte práctica
En otro caso, la nota final será la nota de la parte teórica (sobre 10).
Para más información sobre la evaluación única final, véase la Normativa de Evaluación y Calificación de los Estudiantes de la Universidad de Granada.
Información adicional
Información de interés para estudiantado con discapacidad y/o Necesidades Específicas de Apoyo Educativo (NEAE): Gestión de servicios y apoyos (https://ve.ugr.es/servicios/atencion-social/estudiantes-con-discapacidad).