Ejemplos en C

Entrada y salida

Precisión decimal

]]>
La precisión en la computadora es limitada. Este programa iprime "ay mama". Obtener código fuente.

Octal, decimal y hexadecimal

]]>
Un valor entero se puede imprimir en octal, decimal o hexadecimal. Obtener código fuente.

Leer e imprimir fecha

]]>
Lee una fecha y la imprime en la salida estándar. Obtener código fuente.

Expresiones y condicionales

Edad en años cumplidos

]]>
Calcula la edad en años cumplidos de fechas ingresadas en la entrada estándar. Obtener código fuente.
]]>
Ejemplo de fechas de nacimiento, algunas reales (input01.txt). Obtener código fuente.
]]>
Caso de prueba con las fechas de nacimiento de la entrada anterior y sus correspondientes años cumplidos (output01.txt). Esta es la salida esperada que debe generar el programa. Obtener código fuente.
Ejemplo de una sesión Unix para compilar y probar el programa contra los casos de prueba.

Fortuna

]]>
Escoge una frase al azar utilizando la hora en que el programa se ejecuta como semilla. Obtener código fuente.

Subrutinas (funciones)

Combinatoria

]]>
Lee parejas (n,r) de la entrada estándar. Imprime el número de combinaciones de r en n que pueden hacerse. Obtener código fuente.
]]>
Encabezado de la biblioteca combinatorics.h. Consta de prototipos o declaraciones de funciones, las cuales deben estar debidamente documentadas. Obtener código fuente.
]]>
Implementación de la biblioteca combinatorics.c. Contiene la implementación o definiciones de las funciones de la biblioteca. Obtener código fuente.
]]>
Compilar al programa, la biblioteca y agregar la biblioteca al ejecutable (enlace estático). Este Makefile hace el proceso de compilación. Obtener código fuente.

Punteros, arreglos, matrices

Tamaño de los punteros

]]>
Imprime 8 y 8. Todos los punteros miden lo mismo, indiferentemente del tipo de datos apuntado. El tamaño de los punteros es suficiente para almacenar una dirección de memoria y depende de la arquitectura. Obtener código fuente.

Mediana estadística

En memoria de pila

]]>
La mediana es el valor del centro de un conjunto ordenado de valores. Esta versión calcula la mediana usando un arreglo en memoria de pila. Es fácil de que se desborde ya que la pila está limitada por el sistema operativo. Obtener código fuente.
]]>
Caso para probar el programa de la mediana. Obtener código fuente.

En memoria dinámica

]]>
Calcula la mediana usando un arreglo en memoria dinámica. Este programa es menos propenso a caerse por falta de memoria. Obtener código fuente.

Modularizado en funciones

]]>
Calcula la mediana de: no un único conjunto de datos sino varios de ellos. Varias funciones colaboran para realizar la tarea y se transmiten los valores de retorno que debe informar el main() al sistema operativo. Si se compila habilitando la macro DEBUG imprime los valores del vector en pantalla. Obtener código fuente.
]]>
Compila las diferentes versiones de la mediana. Note que se crean dos ejecutables distintos a partir un mismo código fuente (median3.c), en este caso, uno release y otro debug. Esta capacidad del código fuente se conoce como metaprogramación. Obtener código fuente.
]]>
Caso para probar el programa de la mediana con dos conjuntos de datos. Obtener archivo.

Matrices

]]>
Muestra la diferencia entre matrices en memoria automática y memoria dinámica, y dos tipos de acceso: con subíndices o con punteros. Obtener código fuente.
]]>
Caso para probar el programa de la matriz. Obtener código fuente.

Tipos de arreglos en C

]]>
Tipos de arreglos en C: {arreglos, matrices, arreglos multidimensionales} x {literales, automáticos, almacenados en memoria dinámica continua, almacenados en memoria dinámica no continua}. Obtener código fuente.

Cadenas de caracteres terminadas en nulo

Lectura de cadenas

]]>
Lee palabras de la entrada estándar y las guarda en una dirección de memoria desconocida, indicada por el puntero string el cual no es inicializado. El programa, en el mejor de los casos, debería caerse por un fallo de segmento. Obtener código fuente.
]]>
Corrige el problema del programa anterior al reservar 10 caracteres en un arreglo para almacenar las palabras. Sin embargo el programa fallará si se lee un palabra de 32 o más caracteres. En tal caso, las variables de tipo double que están antes o después del arreglo de caracteres será modificadas. Sin embargo, si el compilador afecta el orden de las variables locales, puede ser que el error no se haga evidente. Obtener código fuente.
]]>
Lee líneas de la entrada estándar sin desbordar la memoria disponible (1024 caracteres). La función fgets(str,size,file) lee caractereres hasta encontrar el fin de línea ('\n'). Si la línea es más extensa que el parámetro size, la función se detiene sin provocar un desbordamiento de capacidad del arreglo. Sin embargo, fgets() incluye el fin de línea en el buffer leído. Este programa remueve ese fin de cadena. Se proveen dos funciones para contar caracteres. La primera versión utiliza notación de índices, la segunda notación de punteros. Obtener código fuente.
]]>
Archivo Makefile para compilar todos los archivos .c que se encuentren en la misma carpeta que el Makefile. Asume que cada archivo .c pertenece a un programa distinto (y por tanto, con su propia función main()). Obtener código fuente.
]]>
Archivo de texto para probar los programas anteriores de manejo de cadenas. Obtener código fuente.

Archivos y argumentos de la línea de comandos

]]>
Paso de argumentos de la línea de comandos y su análisis para el comando fsplit. Obtener código fuente. También puede obtener el archivo con que se harán las pruebas: input.txt.

Registros o estructuras (records)

reverse_speech en ASCII

]]>
Comando de Unix que invierte el discurso en la concatenación de varios archivos de entrada. Utiliza estructuras para tratar los argumentos de invocación del programa como una sola unidad. Obtener código fuente.
]]>
Un Makefile para compilar el comando reverse_speech. Obtener archivo.

reverse_speech en Unicode

Para habilitar Unicode se debe:

  1. Habilitar la configuración local del sistema operativo con setlocale.
  2. El tipo char cambia a wchar_t, y las funciones que representan un char con un int cambian a wint_t
  3. Las funciones de ctype.h cambian por las de wctype.h.
  4. Las funciones del encabezado wchar.h reemplazan: la entrada y salida de caracteres de stdio.h, las funciones de string.h, y funciones de conversión entre números y cadenas de stdlib.h.
]]>
Comando reverse_speech con soporte Unicode. Obtener código fuente.

Ejemplos en C++

Sobrecarga de operadores

La clase Fraction en C++

]]>
Ejemplo de una clase en C++. Obtener código fuente.
]]>
Makefile para compilar la clase Fracción y el main() de ejemplo. Obtener código fuente.

Traducción de la clase fracción a C

Ejemplo de un potencial código fuente que podría generar un compilador de C++ del programa de fracciones a C.

]]>
Conversión hipótetica de una clase a programación procedimental. Obtener código fuente.

Calculadora fraccional en C++

Este ejemplo divide las clases en archivos encabezado y fuente:

main.cpp

]]>
Punto de entrada de la Calculadora Fraccional. Obtener código fuente.

Calculator.h

]]>
Clase controladora Calculator que representa la aplicación como un todo. Obtener código fuente.

Calculator.cpp

]]>
Implementación de la clase controladora Calculator. Obtener código fuente.

Fraction.h

]]>
Interfaz de la clase Fraction. Obtener código fuente.

Fraction.cpp

]]>
Implementación de la clase Fraction. Obtener código fuente.

Makefile

]]>
Compila cada archivo fuente (.cpp) por aparte, de tal forma que una modificación en uno de ellos, no afecta lo que ya se ha compilado, evitando trabajo redundante y agilizando el proceso de compilación. Obtener código fuente.

Biblioteca ECCI

Clase String

La clase String es capaz de trabajar con cadenas unicode, aunque la entrada y salida de C++ no lo soporta aún. Implementa constructor por defecto, de copia, de traslado; destructor; y operador de asignación y de traslado con el fin de evitar fugas de memoria.

]]>
Programa para probar la clase String. Obtener código fuente.
]]>
Interfaz de la clase String. Obtener código fuente.
]]>
Implementación de la clase String. Obtener código fuente.

Arreglo dinámico (Array)

La clase Array implementa un arreglo dinámico. Clase que permite almacenar una cantidad arbitraria de elementos y en caso de necesitarse más espacio, crece dinámicamente. Se usa de ejemplo una versión de la mediana estadística que en lugar de preguntar el tamaño al usuario, sólo lee valores de la entrada estándar, ajustándose dinámicante a la cantidad que se proporcionen.

]]>
Programa de la media aritmética que usa un arreglo dinámico para poder leer una cantidad arbitraria de datos sin saber su tamaño. Obtener código fuente.
]]>
Interfaz de la clase que implementa un arreglo dinámico. Obtener código fuente.
]]>
Implementación de la clase que implementa un arreglo dinámico. Obtener código fuente.

Lista doblemente enlazada (List)

La lista almacena elementos que no necesariamente deben estar contiguos en la memoria de la compuadora, lo cual permite, almacenar mayores cantidades de elementos que un arreglo. La inserción de un elemento es muy eficiente. Pero no permite acceso aleatorio. Es decir, para acceder al n-ésimo elemento se deben recorrer los n-1 elementos previos o los posteriores. Para permitir el acceso a los valores, se utilizan iteradores. Un iterador es un objeto que simula un puntero.

]]>
Ejemplo de uso de la clase List. Obtener código fuente.
]]>
Clase List. Convertirla en plantilla de clases List, es ejercicio para el lector. Obtener código fuente.

Árbol binario de búsqueda (no balanceado)

Mantiene los elementos en orden, lo que hace las búsquedas sumamente eficientes (en tiempo logarítmico).

]]>
Programa para probar el árbol binario de búsqueda. Obtener código fuente.
]]>
Plantilla para hacer clases árbol binario de búsqueda. Obtener código fuente.

Herencia y polimorfismo

Universidad

Muestra una jerarquía de clases. Es importante tener en mente que aunque en una relación de herencia hay dos clases involucradas y se crea un objeto de la clase derivada, no se crean dos objetos distintos. Se crea un único objeto que tiene tanto lo de la clase base (al inicio), seguido de los campos de la clase derivada (al final).

]]>
Crea un estudiante y un funcionario. Obtener código fuente.
]]>
Clase base Persona. Obtener código fuente.
]]>
Implementación de la clase base Persona. Obtener código fuente.
]]>
Clase derivada Estudiante. Obtener código fuente.
]]>
Implementación de la clase derivada Estudiante. Obtener código fuente.
]]>
Clase derivada Funcionario. Obtener código fuente.
]]>
Implementación de la clase derivada Funcionario. Obtener código fuente.
]]>
Proyecto Qt de la jerarquía Universidad. Obtener código fuente.

Trivia

]]>
Instancia el controlador Trivia e inicia su ejecución. Obtener código fuente.
]]>
Trivia.h: Interfaz de la clase controladora del juego Trivia. Obtener código fuente.
]]>
Trivia.cpp Obtener código fuente.
]]>
Question.h. Obtener código fuente.
]]>
Question.cpp. Obtener código fuente.
]]>
NumericQuestion.h. Obtener código fuente.
]]>
NumericQuestion.cpp. Obtener código fuente.
]]>
SingleChoiceQuestion.h. Obtener código fuente.
]]>
SingleChoiceQuestion.cpp. Obtener código fuente.
]]>
TextualQuestion.h. Obtener código fuente.
]]>
TextualQuestion.cpp. Obtener código fuente.
]]>
trivia.pro: Proyecto de Qt. Obtener código fuente.
]]>
preguntas.txt: Archivo de preguntas. Obtener código fuente.

Ejemplos de Qt

Restauración cognitiva del discurso invertido (GUI)

En un ejemplo previo se implementó un comando que transformaba el texto en la entrada estándar, en texto alterado que aún podía ser leído por la mente humana, gracias a una propiedad del cerebro llamada "Restauración cognitiva del discurso invertido" (en inglés, Cognitive restoration of reversed speech). Hubo dos versiones del comando, una en ASCII y otra en Unicode. La versión que se presenta en esta sección, implementa una versión gráfica que permite a los usuarios hacer la conversión de texto Unicode, sin tener necesidad de tener conocimiento de comandos.

]]>
ReversedSpeech.pro: Proyecto de Qt que indica los archivos que forman parte de la solución y otras configuraciones globales. Obtener código fuente.
]]>
main.cpp: Instancia el objeto controlador que rerpresenta la aplicación e inicia el ciclo de eventos. Obtener código fuente.
]]>
MainWindow.h Interfaz de la ventana principal de la aplicación. Obtener código fuente.
]]>
MainWindow.cpp Implementa de la ventana principal de la aplicación. Obtener código fuente.
]]>
Clase del modelo que se encarga en convertir textos a notación reversed speech. Obtener código fuente.
]]>
Implementación de la clase SpeechReverser. Obtener código fuente.
]]>
MainWindow.ui: Formulario XML que Qt convierte a código C++. Este archivo XML sale del editor de interfaz (pestaña Design de QtCreator). Obtener código fuente.