Ejercicios inventados

De acuerdo a la carta al estudiante:

Los ejercicios de programación están agrupados en aproximadamente 14 temas. Cada estudiante podrá inventar 10 ejercicios durante el semestre y recibirá crédito por un 5% de la nota del curso. Cada ejercicio inventado debe tener el formato usado en la plataforma HackerRank y debe pertenecer a un tema 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 tema, y puede tomar como ejemplo los ejercicios propuestos por el profesor y asistentes en la plataforma HackerRank. Los ejercicios inventados deben ser únicos entre estudiantes. Es decir, si dos o más estudiantes proponen el mismo ejercicio, se dará crédito sólo al primero en someterlo. 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 en notación Markdown. Ubique el problema en un contexto: una situación hipotética pero realista que haga al ejercicio aplicado y más interesante. El enunciado del problema debe incluir un ejemplo de entrada que recibirán los programas que intenten resolverlo, y su correspondiente salida esperada.
  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 (make solution), o abrir el proyecto solution.pro en QtCreator.
  5. Escriba el caso de prueba de ejemplo. Copie el 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 (y por tanto, un extracto de solution.c o solution.cpp). Por ejemplo, puede proveer una función main() completa y pedir a quienes resuelvan el reto escribir otras funciones faltantes. O bien, proveer varias funciones y que ellos tengan que implementar 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. Nombre su archivo comprimido con el número del tema al que pertene ce el ejercicio y algún texto corto alusivo al problema. Por ejemplo, si el problema a resolver es un validador de jugadas de ajedrez en el tema de matrices (1.5), podría usar un nombre como "1.5-validador_ajedrez.7z". Los temas de los ejercicios se muestran abajo.
  11. Adjunte el archivo comprimido en un correo electrónico dirigido al profesor del curso.

Temas de los ejercicios

Los ejercicios del curso están agrupados en secciones temáticas, y se listan a continuación.

ParadigmaNumTema
Programación procedimental
Metaprogramación
1.1Entrada y salida en C
1.2Expresiones y condicionales
1.3Ciclos
1.4Subrutinas, arreglos y matrices
1.5Punteros, arreglos y matrices
1.6Cadenas de caracteres de C
1.7Registros (estructuras)
Programación orientada a objetos2.1Clases, objetos, atributos, métodos
2.2.Sobrecarga de operadores (clase String)
Programación genérica3.1Arreglo dinámico
3.2Lista enlazada
3.3Árbol binario
Programación orientada a objetos4.1Herencia y polimorfismo