Clases de programación

Aquí puede encontrar diferentes materiales empleandos para dar clases de programación.

El principal objetivo de mis clases es enseñar a programar, empleando como instrumento práctico un entorno UNIX como sistema operativo, el lenguaje de programación C como lenguaje imperativo, y C++ como lenguaje orientado a objetos.

Las clases pretenden ser eminentemente prácticas. Aun así se intenta aportar una mínima base teórica.

Es posible que un autodidacta pueda aprender a programar con los materiales disponibles en esta página, aunque no todos los contenidos de las clases se encuentran aquí. Intentaré, en la medida de lo posible, ir añadiendo todo lo que falta. No obstante se echará en falta un profesor, ya que no siempre las cosas están lo suficientemente claras en los documentos. En ese caso mi correo está disponible: intentaré resolver dudas puntuales.

Materiales

Los materiales están en el orden que considero más adecuado para enfrentarse a los contenidos. Claro que algunas partes se pueden saltar (si, por ejemplo, no disponemos de un sistema UNIX para trabajar, la introducción a UNIX no tendrá mucho sentido para nosotros).

El formato elegido para los documentos es el Portable Document Format (PDF). Gracias a su portabilidad no debe haber problemas para imprimir los documentos en cualquier plataforma de una forma aceptable. Si no dispone de un visor, puede descargar el visor gratuito que ofrece Adobe.

Los documentos se pueden descargar comprimidos con gzip (GZ, hay un descompresor aquí) o Info-ZIP (ZIP, hay un descompresor aquí). También emplearé ocasionalmente documentos en texto plano para ejemplos, ejercicios, etc.

  1. Introducción a UNIX (08/02/03) [ gz | zip ]

Contenidos

1. Introducción
2. Permisos
3. Estructura de directorios
4. Montar el sistema de ficheros
5. Procesos
6. Shells
7. Terminales
8. Referencia de comandos básicos
9. Editores de texto

  1. Metodología
    • Introducción a la Programación (08/02/03) [ gz | zip ]

Contenidos

1. Definición de algoritmo
2. Técnicas de representación
3. Algoritmos de ejemplo

* Estudio de algoritmos: 

Búsqueda secuencial (08/02/03) [ pseudocódigo | diagrama flujo ]
Algoritmo de la burbuja (12/04/03) [ pseudocódigo | diagrama de flujo ]

* Ejercicios (12/04/03) [ [enunciados](materiales/ejercicios_ss.txt) | soluciones ]
  1. Programación en C

    • Programación en C (1) (15/02/03) [ gz | zip ]
    • Funciones de ANSI C (1) (08/02/03) [ gz | zip ]
    • Funciones de ANSI C (2): Strings (03/03/03) [ gz | zip ]
    • Ficheros en C (03/03/03) [ gz | zip | ejercicios y solución ]
    • Programación en C (2) (10/05/03) [ gz | zip ]
    • Ejercicios Programación en C (2) (13/05/03) [ memoria dinámica | hexdump y solución]
    • TADs de Programación en C (2) (10/05/03) [ tgz | zip ]

    • Implementación de algoritmos:

Algoritmo de la burbuja (08/02/03) [ impl. 1 | impl. 2 | impl. 3 ]

  1. Programación en C++

Contacto

Mi página personal, con mis datos de contacto, se encuentra aquí.

Lista de correo clases-de-programacion

Hay una lista de correo en la que plantear dudas sobre las clases y/o relacionadas con cualquier tema tratado en las mismas (metodología, algoritmos, C, C++, etc).

La lista se encuentra cerrada hasta nuevo aviso.

Recursos externos

En este apartado recomiendo diferentes recursos LIBRES disponibles en la web.

Sistemas

  • FreeBSD: Sistema UNIX Libre para máquinas basadas en el 386 de Intel (existe una versión también para máquinas alpha). Requiere más trabajo de administración que otros sistemas (cualquier Microsoft Windows), pero las prestaciones compensan (sobretodo el alto desempeño en redes, el balance del sistema con alta carga, …).
  • Debian GNU/Linux: Sistema UNIX-like Libre para máquinas basadas en el 386 de Intel. Sin duda la distribución de Linux que más me gusta, aunque requiere casi tanto esfuerzo por parte del usuario como los *BSD libres (todo depende).

Compiladores

Si empleas un sistema UNIX o UNIX-like, probablemente ya tendrás instalado (como mínimo) un compilador de C. Si además es un sistema LIBRE, seguramente tendrás la suite de compiladores de GNU.

Si usas un sistema propietario, aquí hay algunas opciones libres para compilar tus programas:

  • MinGW: Port de la suite de compiladores de GNU a la plataforma Win32 (Microsoft Windows). Incluye compiladores de C y C++, entre otros. Además se encargan de portar multitud de aplicaciones y paquetes de UNIX a Win32, incluyendo un entorno UNIX minimalista para Win32 que permite portar aplicaciones con relativa facilidad.
  • DJGPP: Port de la suite de compiladores de GNU a DOS. Incluye compiladores de C y C++, entre otros.

Editores

Aunque podemos programar con cualquier editor de texto plano, es interesante emplear editores para programadores que nos ofrecen características orientadas a facilitarnos un poco las cosas.

Si empleas un sistema UNIX o UNIX-like, sin duda tendrás a mano diferentes posibildades. En la Introducción a UNIX hago varias propuestas orientadas a consola. Eso no quiere decir que no hayan opciones para entornos de ventanas X11: Anjuta, Kate o Glimmer son buenos ejemplos.

Para entornos propietarios existen menos opciones libres (o gratuitas). Estas son las que recomiendo:

  • Dev-C++: Es un entorno integrado de desarrollo (IDE) que emplea MinGW. Es una buena solución si nos gustan los IDEs avanzados. Lo podemos descargar con MinGW incluido (e integrado).
  • Vim: Es un editor para programadores muy avanzado con muchas funciones, disponible para Win32, Win16 y DOS (además de UNIX, OS/2, Amiga, Macintosh, etc). Cuesta un poco hacerse con él al principio, pero en coger un poco de soltura es una herramienta indispensable.

Referencias

Si empleas un sistema UNIX o UNIX-like, probablemente tengas man instalado con las páginas de manual que puedes ir necesitando en las clases. Si no es así, o utilizas un sistema operativo propietario para el que no está disponible esta valiosa herramienta, puedes acceder a las páginas del manual de FreeBSD en linea aquí.

Además, gracias a el proyecto TLDP-ES/LuCAS, disponemos de documentación de calidad en un perfecto castellano.

Actualizaciones

(03/10/03) - He cerrado la lista de correo. Nadie la usaba y ya no tengo relación con la empresa que porporcionaba el servicio.

(15/09/03) - Publicada una solución para el ejercicio de ‘El laberinto de C++‘.

(25/08/03) - Publicado el enunciado para el ejercicio de ‘El laberinto de C++‘.

(18/06/03) - Felipe Gordillo a contribuido una excelente pila genérica (templates).

(12/06/03) - Publicado Programación en C++ (2).

(31/05/03) - ¡Tenemos lista de correo! Más información aquí.

(29/05/03) - Felipe Gordillo ha contribuido una clase para la pila de enteros. La implementación se ha realizado con objetos en lugar de encapsular el tad descrito en Programación en C (2).

(17/05/03) - Publicado Programación en C++ (1), y la implementación de ejemplo del objeto vector descrito.

(13/05/03) - Lamentándolo mucho he tenido que prescindir de los ficheros pdf para consultar online. Principalmente porque el ancho de banda no me lo regalan :-/ y parece que nadie está descargando los ficheros comprimidos. Ahora es necesario descargar el fichero, descomprimirlo y consultarlo localmente.

(13/05/03) - Publicado fgzhexdump como solución al ejercicio de hexdump, cortesía de Felipe Gordillo.

(10/05/03) - Publicada actualización de Programación en C (2) con correcciones en las implementaciones de los TADs. También se pueden descargar los fuentes de la implementación. Mis disculpas por los errores.

(07/05/03) - Publicado ejercicio hexdump.

(21/04/03) - Publicado Introducción a la Programación Orientada a Objetos.

(12/04/03) - Diagrama de flujo del algoritmo de la burbuja y ejercicios de metodología.

(24/03/03) - Ejercicios memoria dinámica.

(15/03/03) - Publicado Programación en C (2).

(03/03/03) - Publicado Funciones ANSI C (2): Strings y solución a ejercicios de ficheros (ii).

(24/02/03) - Publicación de ejercicios sobre ficheros.

(15/02/03) - La revisión de Programación en C (1) está lista y disponible en la web.

(10/02/03) - En Ficheros en C: corrección de errata en el ejemplo.

© 2003 Juan J. Martinez. Todos los derechos reservados. Cada documento incluye una nota acerca de sus condiciones de redistribución. Si no hay nota, se asume dominio público.

Last updated Jun 29, 2018