Volver a la página inicial

Indice Programación Curso de Programación en C Temario
y Presentación
Listado siguiente
Última versión de utiles (17/07/22)
Syllabus (22/07/18)
Seminarios (1/01/70) ScreenCasts
Lista Simplemente Enlazada XCode   DevCpp Archivos de texto y binarios XCode   DevCpp

Bibliografía


Título
Editorial
Autor(es)
Programación estructurada en C Prentice Hall
(ISBN 978-84-832-2423-6)
José Rafael García-Bermejo Giner
Programación en C DIA
(ISBN 84-688-3223-5)
Varios autores
Programación en C McGraw Antonakos-Mansfield
El lenguaje de programación C Prentice-Hall
(ISBN 978-9688802052)
Brian Kernighan y Dennis Ritchie




Direcciones útiles


Videos Grabaciones de pantalla
CodeBlocks Herramientas de programación
XCode - Apple Herramientas de programación
Netbeans Herramientas de programación
Eclipse Herramientas de programación
MinGW Herramientas de programación
gcc - GNU Herramientas de programación

Temario abreviado (Ver Studium)


  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ón system() . 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: 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() y fwrite() . 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.

Comentarios

Esta asignatura requiere una metodología de trabajo especial.

Método de estudio

Esta asignatura no se puede abordar mediante "estudio", "memorización", "empolle" ni otros métodos de regurgitación. Ésta asignatura sólo se puede dominar mediante la práctica . El término práctica denota la realización personal y cuidadosa de los ejercicios que se plantean
  1. En clase y
  2. En estas páginas.
Realizar un ejercicio (tanto del tipo propuesto en estas páginas como de examen) consiste en leer cuidadosamente el enunciado del mismo y escribir el código fuente mediante el cual se implementa el programa solicitado en el enunciado, para después compilarlo y ejecutar el programa obtenido. El programa en cuestión debe satisfacer los requisitos especificados en el enunciado; estará escrito respetando las normas del estándar ANSI C y no contendrá, en principio, extensiones propias de fabricantes o plataformas concretas. Se admitirá únicamente el uso de extensiones cuando el programa fuente contenga directrices de compilación condicional que garanticen el correcto funcionamiento del programa. En este sentido, se prestará especial atención a la compatibilidad de código fuente entre distintas plataformas. Se considera mala práctica de programación escribir programas que dificulten o imposibiliten l a compatibilidad por utilizar dialectos de C distintos de ANSI.

Asistencia a clase

No se considera esencial la asistencia a clase. Se considera esencial el conocimiento de todas y cada una de las indicaciones allí efectuadas. En otras palabras, la inasistencia a clase no exime de saber lo que allí se cuenta. Se estima que una hora de clase equivale como mínimo a cuatro horas de trabajo en solitario por parte del alumno. Por tanto, se recomienda encarecidamente la asistencia, tanto a las clases teóricas como (especialmente, por lo dicho más arriba) a las prácticas. Deberán prestar especial atención quienes carezcan de experiencia previa en programación, así como quienes tengan experiencia en otros lenguajes, por cuanto es fácil confundir o mezclar distintos lenguajes, con resultados catastróficos.

Recomendaciones

La plataforma de elección para el estudio de programación es Unix en cualquiera de sus variantes, por cuanto se trata de un sistema operativo muy probado y estable, y poco dado a la aparición de virus. Entre las versiones de Unix más extendidas, recomendamos Linux y Mac OS X . Todas las versiones de Unix ofrecen, junto con el correspondiente sistema operativo, las oportunas herramientas gratuitas de desarrollo. Concretamente, se utiliza el compilador gcc (versión 4.x) por su amplia difusión y estabilidad. Como editor de programas puede emplearse cualquiera de los siguientes:



Otra posibilidad que se debe tener en cuenta, pese a los problemas que acarrea, es el uso de entornos integrados de desarrollo (IDE). Entre ellos cabe mencionar los que siguen:

Indicaciones finales

La máquina que se destine a su un uso académico no debe emplearse para usos lúdicos. La adición de programas de dudosa procedencia y posiblemente perniciosos para el buen funcionamiento del ordenador da lugar a numerosos problemas de solución difícil salvo un formateo a bajo nivel. Conocemos muchos casos en que un aparente error de programación no era tal, sino el resultado de una instalación defectuosa, o la consecuencia de algún tipo de infección por virus o malware .

Si la máquina que va a utilizarse para trabajos académicos ha sido empleada con anterioridad para usos lúdicos, es recomendable partir de cero: formatee la máquina, instale el sistema operativo, instale un antivirus, actualice el sistema operativo y prepare finalmente la máquina con el compilador y/o entorno integrado de desarrollo seleccionado. Esto supone, a la larga, un ahorro de tiempo realmente considerable, y evita situaciones desagradables como una corrupción del sistema de archivos que fuerce el formateo del disco de forma imprevista.

Efectúe regularmente copias de seguridad (véase, por ejemplo, Time Machine ). Las copias de seguridad deben ser regulares y tan automáticas como sea posible. Pregúntese cuántos datos puede permitirse perder. Hágase a la idea de que el sistema fallará tarde o temprano: no se deje sorprender por un fallo catastrófico.

Buena caza!

Salamanca, Septiembre de 2009