De acuerdo a la carta al estudiante:

Los ejercicios de programación están agrupados en aproximadamente 14 bloques. Cada estudiante deberá inventar al menos 10 ejercicios durante el semestre y recibirá crédito por un 5% de la nota del curso. Cada ejercicio inventado debe tener el mismo formato usado en los concursos de programación de la ACM, y debe pertenecer a un bloque distinto de los 14 disponibles. La creación de ejercicios correlaciona con una mayor comprensión de los conceptos de programación, de acuerdo a la literatura científica. Para crearlos, el estudiante debe prestar atención a los conceptos de programación involucrados en el bloque, y puede tomar como ejemplos los ejercicios propuestos por el profesor y asistentes. Los ejercicios inventados deben ser únicos entre estudiantes. Es decir, si dos o más estudiantes inventan el mismo ejercicio, se dará crédito sólo al del primero en proponerlo. El profesor servirá como el ente centralizador de los ejercicios inventados por estudiantes, y podrá ayudarles en el proceso de creación de los mismos durante las horas de consulta.
Plantilla para crear un ejercicio inventado en C
c_invented_exercise.zip
Plantilla para crear un ejercicio inventado en C++
cpp_invented_exercise.zip

Para presentar los ejercicios inventados, descargue uno de los archivos comprimidos anteriores, acorde al lenguaje de programación que se va a usar para resolverlo. Luego siga estas instrucciones:

  1. Descomprima el archivo que descargó en una carpeta para su ejercicio propuesto.
  2. Edite el archivo problem.es.md para escribir el enunciado de su ejercicio. Ubique su problema en un contexto: una situación hipotética pero realista que haga al ejercicio aplicado y más interesante. Su enunciado del problema debe tener un ejemplo de entrada y de salida que debe generar el programa.
  3. Solucione el problema. Escriba su solución en el archivo solution.c o solution.cpp acorde al lenguaje de programación (C ó C++ respectivamente).
  4. Compile su solución. Puede utilizar el Makefile provisto para compilar en línea de comandos, o abrir el proyecto solution.pro en QtCreator.
  5. Escriba el caso de prueba de ejemplo. Copie caso de prueba que incluyó en el enunciado del problema (en problem.es.md) en dos archivos: input01.txt para la entrada y ouput01.txt para la salida correspondiente.
  6. Agregue al menos dos casos de prueba más, y por tanto, al menos dos parejas de archivos: (input02.txt, output02.txt) y (input03.txt, output03.txt). Piense en valores interesantes, extremos o inválidos a probar. Por ejemplo, un programa para encontrar números primos puede probarse con números negativos, cero, uno (que no es primo), y valores muy grandes que pueden hacer fallar por exceso de tiempo para una solución fuerza bruta.
  7. Pruebe sus casos de prueba. Invoque su ejecutable con cada pareja de archivos de entrada y salida y verifique que coinciden. Por ejemplo, al invocar ./solution < input01.txt | diff output01.txt - no debe producir salida.
  8. Modifique el archivo given.c ó given.cpp. Escriba en él el código fuente inicial que dispondrán las personas que resuelvan su ejercicio. Es un extracto de su solución (en solution.c o solution.cpp). Por ejemplo, puede proveer una función main() y pedir a quienes resuelvan el reto escribir otras funciones faltantes. O bien, proveer varias funciones y que ellos tengan que escribir el main() y otras funciones, o proveer una clase incompleta, o una clase que depende de otra que está ausente.
  9. Comprima los archivos fuente que editó en formato 7z o Zip. No incluya en su comprimido, archivos generados a partir del código fuente, como código objeto/binario generado por el compilador. Es decir, su comprimido debería tener archivos fuente de C/C++, archivos de Markdown, casos de prueba en .txt, Makefiles, y el proyecto de Qt (.pro). Si usa la linea de comandos puede escribir make 7z ó make zip.
  10. Adjunte el archivo comprimido en un correo electrónico dirigido al profesor con copia al asistente del curso.