Programación procedimental (C)

Entrada y salida

Replicador de la entrada

]]>
Lee caracteres de la entrada estándar y los replica en la salida encerrados entre corchetes. Obtener código fuente.

Expresiones y condicionales

Validador de ensayos

El siguiente código surgió de aplicar el ciclo de desarrollo para resolver el problema. La solución es modular, escalable, documentada y aplica otras buenas prácticas de programación. Soluciones con menos instrucciones son posibles, pero el código es menos escalable. Programas "hechos a la carrera" son convenientes para situaciones de emergencia o programación competitiva. No es la norma en el ejercicio de la disciplina.

]]>
main.c: Usa las subrutinas del validador de ensayos para crear un programa en línea de comandos. Obtener código fuente.
]]>
essay_validator.h: Encabezado común para los dos archivos fuente. Obtener código fuente.
]]>
essay_validator.c: Valida si ensayos presentados por estudiantes cumplen los requisitos impuestos por el profesor. Obtener código fuente.
]]>
build.sh: Guión de comandos (shell script) que compila los archivos anteriores y genera un ejecutable usando GCC/Clang. Obtener código fuente.

Aunque el ejemplo se ubica en la sección de expresiones y condicionales, se agregan ciclos y subrutinas, dado que son conceptos conocidos del curso Programación I.

Indirección, arreglos y matrices

Imprimir rango de números

Recibe los valores de un rango e imprime los valores separados por un delimitador. Si el rango está invertido, intercambia los valores con punteros.

]]>
Imprime valores en un rango. Obtener código fuente.

Mediana estadística (arreglo automático)

]]>
Enunciado del problema en Markdown. Obtener código fuente.

El siguiente programa almacena el arreglo en el segmento de pila y para números grandes, el arreglo desborda este segmento.

]]>
Calcula la mediana con un arreglo automático. Obtener código fuente.

Mediana estadística (arreglo estático)

En la siguiente versión el arreglo se almacena en el segmento de datos, pero se puede acceder sólo dentro de la función main().

]]>
Calcula la mediana con un arreglo estático. Obtener código fuente.

En la siguiente versión el arreglo también se almacena en el segmento de datos, pero se puede acceder dentro de varias funciones por ser una variable global.

]]>
Calcula la mediana con un arreglo global. Obtener código fuente.

Mediana estadística (arreglo con alojamiento dinámico)

En la siguiente versión el arreglo se almacena en memoria dinámica. Esta programa es menos propenso a fallar que las versiones anteriores. Puede fallar para grandes volúmenes de datos que no pueden alojarse en la máquina donde corre.

]]>
Calcula la mediana usando memoria dinámica. Obtener código fuente.

Tipos de arreglos en C

]]>
Muestra como se declaran, acceden, destruyen y pasan por parámetro diferentes tipos de arreglos en C. Obtener código fuente.

Cadenas de caracteres y registros

chext: cambiar la extensión

chext es un comando en C para renombrar archivos, en especial para cambiarles la extensión. Para descargar el proyecto completo en un archivo comprimido:

Proyecto para renombrar extensiones
chext.zip
]]>
cli/main.c: Comando para cambiar la extensión de archivos. Obtener código fuente.
]]>
args.h: Declaraciones para analizar los argumentos. Obtener código fuente.
]]>
args.c: Implementación de subrutinas para analizar los argumentos. Obtener código fuente.
]]>
chext.h: Declaraciones de la biblioteca para renombrar extensiones. Obtener código fuente.
]]>
chext.c: Implementación de la biblioteca para renombrar extensiones. Obtener código fuente.
]]>
test.h: Nano-biblioteca para facilitar pruebas unitarias. Obtener código fuente.
]]>
test/main.c: Prueba dos subrutinas de la biblioteca contra algunos pocos valores. Falta crear más pruebas y probar todas las funciones de la biblioteca libchext. Obtener código fuente.
]]>
Makefile para compilar el proyecto chext. Obtener código fuente.

El archivo de configuración de Doxygen se generó con el comando doxygen -g. Se le hicieron los siguientes cambios para configurarlo como un proyecto de C:

PROJECT_NAME           = "My Project" "chext"
PROJECT_NUMBER         =    1.0.0
PROJECT_BRIEF          =    "An extension renamer"
OUTPUT_DIRECTORY       =    doc
OPTIMIZE_OUTPUT_FOR_C  = NO YES
EXTRACT_ALL            = NO YES
EXTRACT_PRIVATE        = NO YES
EXTRACT_PACKAGE        = NO YES
EXTRACT_STATIC         = NO YES
EXTRACT_LOCAL_METHODS  = NO YES
INPUT                  =    src
RECURSIVE              = NO YES
Cambios hechos al archivo de configuración de Doxygen. Obtener código fuente.

Programación orientada a objetos (C++)

Clases y objetos

Espacios de nombres (namespaces)

]]>
Espacios de nombres evitan que los identificadores colisionen. Obtener código fuente.

Calculadora fraccional (versión 1)

]]>
Una clase Fraction en C++. Obtener código fuente.
]]>
La clase Fraction en C++ convertida a código procedimental en C. Obtener código fuente.

Sobrecarga de operadores

Calculadora fraccional (versión 2)

]]>
Ejemplo de una aplicación con un controlador principal: el "main" lo instancia e inicia la ejecución. Obtener código fuente.
]]>
Encabezado de la clase controladora. Obtener código fuente.
]]>
Implementación de la clase controladora. Obtener código fuente.
]]>
Encabezado de la clase Fraction. Obtener código fuente.
]]>
Implementación de la clase Fraction. Obtener código fuente.
]]>
Programa para probar la clase Fraction. Obtener código fuente.

Clase String

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

Programación genérica

Arreglo dinámico

]]>
Programa de la mediana que usa un arreglo dinámico dado que no conoce la cantidad de elementos. Obtener código fuente.
]]>
Encabezado del arreglo dinámico. Obtener código fuente.
]]>
Implementación del arreglo dinámico. Obtener código fuente.

Clase fracción para mediana

Permite comparar fracciones con el operador < para poder ordenarlas y dividir fracciones para poder calcular el promedio.

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

Lista doblemente enlazada

]]>
Lee varios elementos en una lista y los imprime. Obtener código fuente.
]]>
Encabezado de la lista doblemente enlazada. Obtener código fuente.
]]>
Implementación de la lista doblemente enlazada. Obtener código fuente.

Mapa (diccionario/arreglo asociativo)

]]>
Cuenta palabras de la entrada estándar. Obtener código fuente.
]]>
Encabezado de un mapa (arreglo asociativo). Obtener código fuente.

Herencia y polimorfismo

Trivia

trivia3.txt

Juego de Trivia en línea de comandos que carga las preguntas de este archivo:

]]>
Archivo de preguntas. Obtener código fuente.

main.cpp

]]>
main.cpp. Obtener código fuente.

Common.h

]]>
Common.h. Obtener código fuente.

Clase Trivia (controlador)

]]>
Trivia.h. Obtener código fuente.
]]>
Trivia.cpp. Obtener código fuente.

Clase Question (model)

]]>
Question.h. Obtener código fuente.
]]>
Question.cpp. Obtener código fuente.

Clase NumericQuestion

]]>
NumericQuestion.h. Obtener código fuente.
]]>
NumericQuestion.cpp. Obtener código fuente.

Clase TextualQuestion

]]>
TextualQuestion.h. Obtener código fuente.
]]>
TextualQuestion.cpp. Obtener código fuente.

Clase SingleChoiceQuestion

]]>
SingleChoiceQuestion.h. Obtener código fuente.
]]>
SingleChoiceQuestion.cpp. Obtener código fuente.