1. Introducción a los lenguajes de programación. Concepto de programa fuente, programa objeto y programa ejecutable. Entornos no integrados de desarrollo. Recursos en la Web. Concepto de editor, compilador y enlazador. Entor nos integrados de desarrollo. Depuración y depuradores. Recursos en la web.
2. Recursos de programación. Presentación del sistema operativo Unix. Presentación del lenguaje C. El programa "Hola, Mundo". Compilación del programa. Concepto de bibliotecas de funciones. Uso de archivos de encabezado. Breve introducción a los distintos archivos de encabezado disponibles en C. Necesidad de su estudio. Las páginas man. Uso local y a través de la Web.
3. Herramientas básicas del lenguaje. Primeros programas. Variables. Tipos de datos. Las funciones elementales de entrada/salida (printf("cómo escribir", "qué escribir") y scanf("cómo leer, " dónde guardar lo leído")). Tipos de datos atómicos. Tipos numéricos enteros y de coma flotante. Tipos alfanuméricos: caracteres y cadenas. Operadores aritméticos, lógicos y relacionales. Parám etros de la línea de órdenes: concepto y utilización. Imposibilidad de crear grandes programas empleando una sola función o bloque de código. Una solución: la descomposición en funciones.
4. Subprogramas. Declaración de una función: prototipos, implementación y llamadas. Parámetros formales y parámetros actuales o reales. Alcance de una variable. Variables locales y globales. Variables static. El problema de las variables globales. Solución: variables locales. El problema de las variables locales. Solución: paso de parámetros. Paso de parámetros por valor y por referencia. Concepto básico de función recursiva o autorrecurrente. Cálculo de un factorial. Concepto de compilación por separado. make y makefile. Necesidad de tomar decisiones y repetir acciones. Solución: las sentencias de control.
5. Estructuras de control alternativas, repetitivas y selectivas. Construcción de programas "reales", dotados de menús y opciones. El problema de conio. Solución del problema mediante la funciónsystem(). El problema de getch() en MS-DOS. El problema de getch() en Unix. Solución del problema mediante directrices de compilación condicional. Importancia de la compatibilidad de código fuente. Presentación de la utilidad make. Inviabilidad de los tipos atómicos para resolver problemas con grandes cantidades de datos. Ejemplo: cálculo matricial y vectorial (3x3). Solución: los tipos de datos estructurados homéneos.
6. Tipos de datos estructurados homogéneos. Listas, tablas y matrices. Nomenclatura (declaración de punteros adecuados para su uso). Cálculo matricial elemental. Productos escalares y vectoriales. Las cadenas como lis tas de caracteres. Funciones de tratamiento de cadenas. Estudio de string.h. Inviabilidad del uso de listas y tablas de tipos atómicos para abordar el problema de las bases de datos. Solución: los tipos estructurados inhomogéneos.
7. Tipos de datos estructurados inhomogéneos. Tipos de datos basados en struct; creación de nuevos tipos de datos. Concepto de union. Listas, tablas y matrices de estructuras. Bases de datos: concepto de altas, bajas, informes y modificaciones. Bases de datos implementadas mediante listas estáticas. Ordenación: uso de la función quicksort(). Falta de flexibilidad de las variables estáticas para reutilizar la memoria. Limitaciones de las variables estáticas. Solución : las variables dinámicas.
8. Asignación dinámica de memoria. Estudio de calloc(), malloc(), realloc() y free(). Aplicaciones:
* Listas, tablas y matrices dinámicas (de tipos atómicos)
* Listas, tablas y matrices dinámicas (de tipos estructurados)
* Listas de punteros (que apuntan a listas de tipos atómicos)
* Listas de punteros (que apuntan a listas de tipos estructurados)
* Listas simplemente enlazadas
* Listas doblemente enlazadas
Necesidad de almacenar información a largo plazo. Solución: uso de un sistema de archivos.
9. Manejo de archivos. Concepto de acceso secuencial y de acceso directo. Apertura, lectura, escritura y cierre de archivos. Las funciones fpen(), fclose(), fprintf(), fscanf(), fr ead() yfwrite(). Archivos binarios. Aplicación a bases de datos. Archivos de texto: archivos encolumnados y delimitados. Uso de strtok(). Importación y exportación de datos. Conveniencia de una granularidad más adecuada para la construcción de módulos reutilizables. Solución: programación orientada a objetos.
10. Programación avanzada. Concepto y aplicaciones de los punteros de función. Un paso más: programación orientada a objetos. Concepto de clase. Concepto de método. El lenguaje C++. El programa "Hola, Mundo" en C++. El lenguaje Java. El programa "Hola, Mundo" en Java. Relación de esta asignatura con otras de la titulación.