Breve descripción de la asignatura:
Esta asignatura establece los principios básicos de la programación. Permite al alumno familiarizarse con conceptos como algoritmos, lenguajes de programación, variables, programación estructurada y a construir programas básicos con funcionalidades muy concretas. Establece las bases en las que se sustentarán el resto de asignaturas de esta área de conocimiento.
Objetivos de la asignatura:
- Adquirir los conocimientos básicos sobre programación.
- Desarrollar programas aplicando técnicas de programación estructurada y usando los elementos que los entornos de desarrollo proporcionan.
- Elaborar interfaces de usuario que cumplan los requisitos dados.
- Conocer el lenguaje de programación C como lenguaje de programación estructurada.
- Usar las librerías más importantes de C y saber desarrollar librerías nuevas.
- Evaluar y desarrollar escenarios de prueba para comprobar el correcto funcionamiento de los programas.
Temario:
Tema 1. Introducción a la Programación.
- Programa.
- Lenguaje de Programación.
- Compilador.
- Algoritmo.
- Pseudocódigo.
Tema 2. Conceptos básicos de C.
- Estructura de un programa en C.
- Elementos de un programa en C.
- Comentarios.
- Concepto de variable e inicialización de variables.
- Concepto de constante e inicialización de constantes.
- Identificadores y palabras reservadas.
Tema 3. Entrada/Salida Formateada.
- La función Printf.
- La función Scanf.
Tema 4. Tipos de Datos.
- Variables:
- Enteros.
- Coma flotante (reales).
- Caracteres.
- Booleanos.
- Constantes
Tema 5. Conversión de Tipos de Datos.
- Conversiones de tipos:
- Implícitas (Reglas).
- Explícitas (Casting).
- Definiciones de tipos: typedef.
- El operados sizeof
Tema 6. Operadores y expresiones.
- Expresiones.
- Operadores aritméticos.
- Precedencia de operadores. Asociatividad.
- Asignación. Asignación compuesta.
- Operadores de incremento y decremento.
- Evaluación de expresiones. Orden.
- Expresiones como sentencias.
Tema 7. Control de flujo: Selección.
- Estructuras de control.
- Expresiones lógicas.
- Operadores relacionales.
- Operadores lógicos.
- Evaluación de expresiones.
- La sentencia if.
- Expresiones condicionales.
- Tipo de datos booleano.
- La sentencia switch.
Tema 8. Control de flujo: Iteración.
- La sentencia while.
- La sentencia do.
- La sentencia for.
- Saliendo de un bucle: break y continue.
- Saliendo de un bucle: goto.
- La sentencia Null (nula).
Tema 9. Funciones.
- Definiendo una función.
- Llamadas a funciones.
- Argumentos y parámetros.
- Declaración de funciones.
- Paso de parámetros por valor y por referencia.
- Conversión de argumentos.
- La sentencia return.
- Terminación del programa.
Tema 10. Recursividad.
- Definición de recursividad.
- Condiciones en la recursividad.
- Ventajas e inconvenientes.
- Ejemplos y ejecución.
Tema 11. Arrays.
- Arrays unidimensionales.
- Indexación de elementos.
- Inicialización de arrays.
- Arrays y el operador sizeof.
- Arrays multidimensionales.
- Arrays constantes.
- Arrays de tamaño variable .
- Arrays como argumentos.
Tema 12. Cadenas.
- Cadenas literales o constantes.
- Almacenamiento de cadenas.
- Inicialización.
- Arrays de caracteres. Punteros.
- Leer y escribir cadenas.
- La librería estándar string.h.
- Arrays de cadenas.
- Argumentos en la línea de comandos.
Tema 13. Estructuras.
- Estructuras.
- Operaciones sobre estructuras.
- Tipos estructura.
- Estructuras y funciones.
- Estructuras y punteros.
- Combinando arrays y estructuras.
- Enumeraciones.
- Typedef.
Breve descripción de la asignatura:
Esta asignatura es la continuación de Fundamentos de programación I. Se centra en establecer las estructuras dinámicas de datos necesarias para almacenar la información que luego será tratada por los diferentes algoritmos.
Objetivos de la asignatura:
- Conocer e identificar las principales estructuras de datos, tanto lineales como no lineales, incluidas aquellas que se establecen en memoria secundaria.
- Realizar programas avanzados con tipos abstractos de datos.
- Calcular la complejidad algorítmica de un determinado código.
Temario:
Tema 1. Ficheros.
- Librería estándar de C.
- Operaciones básicas con ficheros: Apertura, lectura, escritura, renombrado, borrado y cierre.
- Ficheros de texto.
- Ficheros binarios. Posicionamiento.
Tema 2. Punteros.
- Definición.
- Declaración de punteros.
- Operadores.
- El operador referencia: &
- El operador indirección: *
- Asignación de punteros.
- Punteros como argumentos.
- Proteger argumentos.
- Devolver punteros.
Tema 3. Punteros y arrays.
- Aritmética de punteros.
- Uso de punteros para el procesamiento de arrays.
- Uso del nombre de array como puntero.
- Arrays como argumentos.
- Punteros y arrays multidimensionales.
Tema 4. Programación modular y documentación de código fuente
- Programación modular en C
- Archivos de cabecera
- Archivos de implementación
- Variables globales
- Documentación de código en C
- Introducción a Doxygen
- Añadir comentarios al código
- Generación automática de documentación
Tema 5. Listas.
- Listas versión estática
- Lista versión cursor.
- Listas dinámicas
- Lista simple con cabecera
- Lista simple sin cabecera
- Lista circular
- Lista doblemente enlazada
- Lista circular doblemente enlazada
Tema 6. Pilas.
- Versión estática.
- Versión dinámica.
Tema 7. Colas.
- Versión estática.
- Versión dinámica.
Tema 8. Árboles.
- Estructuras dinámica.
- Recorrido.
- Previo.
- Simétrico
- Posterior.
- Operaciones básicas:
- Insertar
- Pertenece
- Encontrar
- Padre de
- Borrar
Tema 9. Grafos.
- Versión estática.
- Versión dinámica.
- Algoritmos sobre grafos:
- Dijkstra.
- Floyd.
- Warshall.
Tema 10. Complejidad.
- Conceptos básicos.
- Notaciones asintóticas.
- Ecuaciones de recurrencia.
Breve descripción de la asignatura:
La asignatura de Algoritmia se basa fundamentalmente en explicar los conocimientos teóricos necesarios para cualquier tipo de programación informática. Con estos conocimientos, el alumno tendrá las herramientas necesarias para encontrar soluciones a diferentes tipos de problemas mediante programación software. En particular, se estudiarán algoritmos de recorrido de estructura de datos lineales y no lineales, algoritmos de clasificación y búsqueda, y técnicas de backtracking y hashing.
Objetivos de la asignatura:
- Que el alumno comprenda el esquema de funcionamiento de los algoritmos más importantes de clasificación, búsqueda, backtracking y hashing.
- Que el alumno sea capaz de aplicar soluciones óptimas para la resolución de problemas utilizando algoritmos adecuados
- Que el alumno sepa desarrollar aplicaciones informáticas aplicando el algoritmo correcto para un problema, es decir, que sea capaz de seleccionar un algoritmo de búsqueda, clasificación, backtracking o hashing, dependiendo del problema a resolver
- Que el alumno sea capaz de detectar las importantes diferencias que se pueden obtener, en términos de rendimiento temporal, entre algoritmos aparentemente equivalentes en cuanto a su resultado.
Temario:
Tema 1. Algoritmos de búsqueda.
- Búsqueda lineal
- Búsqueda binaria
- Búsqueda en árboles binarios balanceados (AVL)
- Búsqueda de patrones (Fuerza bruta, KMP, BM)
Tema 2. Algoritmos de clasificación y ordenación.
- Algoritmo de la burbuja
- Algoritmo de inserción
- Algoritmo de selección
- Algoritmo Shell Short
- Algoritmo Bucket Sort
- Algoritmo Quick Sort
- Algoritmo de mezcla directa
- Algoritmo de mezcla natural
Tema 3. Backtracking: Algoritmos de vuelta atrás.
- Concepto de backtracking
- Programación con backtracking
- Ejemplos de algoritmos de backtracking
- Optimización: Branch and bound
Tema 4. Métodos de almacenamiento y búsqueda mediante cálculo de dirección basado en clave (hashing).
- Introducción
- Colisiones y alternativas para su solución
- Borrado de elementos en tablas hash
- Reordenamiento en tablas hash
- Eficiencia de algoritmos hash