Entrenamiento OIE 2023 - Nivel inicial

Bienvenido al entrenamiento de la OIE'2023 enfocado a aquellos que están dando sus primeros pasos en la programación y la algoritmia.

El entrenamiento está organizado sobre el juez on-line Acepta el reto. Si quieres participar, necesitarás crearte un usuario en el juez (si tienes ya uno, puedes utilizar ese) y registrarte aquí.

El entrenamiento está dividido en once sesiones de dos semanas de duración, que comienzan los lunes a las 9:00. Durante cada sesión se espera que los participantes revisen los contenidos enlazados de esa sesión e intenten los problemas propuestos. Las dudas que puedan surgir pueden hacerse usando el discord de la OIE. Cuando terminan las dos semanas, además de comenzar la sesión siguiente, se publican algunas explicaciones sobre los problemas de la sesión para que aquellos que no los hayan conseguido resolver puedan seguir intentándolo.

Resumen
Sesión Fecha de inicio
#13 de octubre
#217 de octubre
#331 de octubre
#414 de noviembre
#528 de noviembre
#612 de diciembre
#79 de enero
#823 de enero
#96 de febrero
#1020 de febrero
#116 de marzo

Resumen del entrenamiento

El entrenamiento está dividido en 11 sesiones que puedes ver en la tabla derecha. Cada sesión tiene una duración de dos semanas; en la tabla aparece la fecha de comienzo. Las sesiones que no han comenzado aún aparecen en negro. Las ya empezadas (incluidas las terminadas) aparecen en azul y el enlace lleva a la información de la sesión. A esa misma información puedes acceder pulsando sobre su pestaña en la parte superior.

En la pestaña de cada sesión puedes ver la lista de los ejercicios de ¡Acepta el Reto! de esa sesión así como quiénes han hecho envíos a ellos en el periodo establecido y una clasificación. El orden en la clasificación de cada sesión viene dado por el número de problemas resueltos y, en caso de empate, por la suma de los tiempos invertidos en hacer cada uno más una penalización de 20 minutos por cada envío incorrecto.

En esta pestaña resumen puedes ver una clasificación general en la que aparece el número de problemas resueltos en cada sesión por los participantes. En este caso no hay criterio de desempate, por lo que dos participantes con el mismo número de problemas resueltos aparecerán en orden arbitrario.

En las clasificaciones aparecen en rojo los nombres de los participantes y en negro los envíos realizados por los profesores responsables del entrenamiento. No te extrañe si hay pocos envíos suyos, los problemas los resolvieron hace mucho ;)

Clasificación general

La tabla que aparece a continuación condensa el número total de problemas resueltos de cada sesión por cada participante.

#1

Primera sesión de la serie de entrenamiento.

El objetivo de estas dos semanas es que rompas el hielo con la programación y el lenguaje C++, y aprendas a utilizar las herramientas básicas que necesitarás para resolver los problemas propuestos. Si eres nuevo, te proponemos algo de lectura para empezar:

En la lista de la derecha tienes los problemas que te proponemos que resuelvas para esta sesión. Son problemas que están disponibles en la web Acepta el reto, y es donde tendrás que enviar tus soluciones. Si nunca has usado la plataforma, aquí te ayudamos a resolver tu primer problema. También tienes algo de ayuda adicional (que puede venirte bien más adelante) aquí.

Los envíos que hagas dentro del plazo a Acepta el reto a los problemas propuestos para la sesión aparecerán reflejados aquí. Pincha en el número o nombre del problema para ver su enunciado.

Esta sesión de entramiento ya ha terminado. Si te quedaste con dudas, puedes consultar la explicación de las soluciones de los problemas.

#2

Segunda sesión de la serie de entrenamiento.

En esta sesión vamos a practicar los condicionales y los operadores relacionales y booleanos. Ten en cuenta que en cada sesión se asume que se entienden bien los conceptos de las sesiones previas, por lo que seguirás teniendo que usar variables, expresiones y entrada/salida, que aprendiste en la sesión anterior.

Si quieres aprender sobre los temas de esta sesión, te proponemos algo de lectura:

Los envíos que hagas a Acepta el reto a los problemas propuestos para la sesión aparecerán reflejados aquí. Pincha en el número o nombre del problema para ver su enunciado.

Esta sesión de entramiento ya ha terminado. Si te quedaste con dudas, puedes consultar la explicación de las soluciones de los problemas.

#3

Tercera sesión de la serie de entrenamiento.

En esta sesión vamos a practicar los bucles (for, while y do-while). También vamos a aprovechar para introducir el concepto de función. Ambas cosas, en conjunto, deberían permitirte comprender las plantillas que has estado utilizando en las dos sesiones anteriores para resolver los problemas.

Ten en cuenta que en cada sesión se asume que se entienden bien los conceptos de las sesiones previas, por lo que seguirás teniendo que usar variables, expresiones, condicionales y entrada/salida, que aprendiste en las sesiones anteriores.

Si quieres aprender sobre los temas de esta sesión, te proponemos algo de lectura:

  • Transparencias de Fundamentos de la programación de Luis Hernández Yañez, de la Universidad Complutense de Madrid:
    • Tipos e instrucciones I:
      • Bucles while's: transparencias 186-189 (páginas 139-142 del PDF)
      • Funciones: transparencias 199-210 (páginas 152-163 del PDF)
    • Tipos e instrucciones II:
      • Repetición: más sobre while's, for, do-while: transparencias 313-330 (páginas 89-106 del PDF)
      • Ámbito y visibilidad; secuencias: transparencias 339-373 (páginas 115-149 del PDF)
    • Abstracción prodecimental: más sobre funciones
  • Material de la OIE
    • Bucles while
    • Funciones
    • Bucles for: se mencionan ejemplos donde se usan vectores y arrays que todavía no hemos aprendido; no te preocupes si no entiendes esa parte.
  • Material de la OIFem

Los envíos que hagas a Acepta el reto a los problemas propuestos para la sesión aparecerán reflejados aquí. Pincha en el número o nombre del problema para ver su enunciado.

Esta sesión de entramiento ya ha terminado. Si te quedaste con dudas, puedes consultar la explicación de las soluciones de los problemas.

#4

Cuarta sesión de la serie de entrenamiento.

En esta sesión vamos a seguir practicando bucles y aparecerán algunos problemas de bucles anidados, donde será necesario poner un bucle dentro de otro

Ten en cuenta que en cada sesión se asume que se entienden bien los conceptos de las sesiones previas.

Si quieres aprender sobre los temas de esta sesión, te proponemos algo de lectura:

  • Transparencias de Fundamentos de la programación de Luis Hernández Yañez, de la Universidad Complutense de Madrid:
    • Tipos e instrucciones II:
      • Bucles anidados: transparencias 331-338 (páginas 107-114 del PDF)
      • Ámbito y visibilidad: transparencias 339-348 (páginas 115-124 del PDF)
  • Material de la OIFem

Los envíos que hagas a Acepta el reto a los problemas propuestos para la sesión aparecerán reflejados aquí. Pincha en el número o nombre del problema para ver su enunciado.

Esta sesión de entramiento ya ha terminado. Si te quedaste con dudas, puedes consultar la explicación de las soluciones de los problemas.

#5

Quinta sesión de la serie de entrenamiento.

En esta sesión introducimos el concepto de arrays (conocidos también como arreglos en algunos lugares), que nos permiten guardar múltiples valores bajo el mismo nombre de variable, y acceder a cada uno utilizando un índice.

En el uso de arrays es muy habitual que surja la necesidad de recorrerlos, para lo que necesitarás utilizar los bucles que ya has practicado en sesiones previas.

Si quieres aprender sobre los temas de esta sesión, te proponemos algo de lectura. En algunos de los documentos se habla también de los vectores que son un tipo de datos disponible en C++ que pueden ser utilizados en lugar de los arrays clásicos. Los vectores proporcionan capacidades adicionales a los de los arrays, aunque ninguna de ellas son necesarias para resolver los problemas de esta serie.

  • Transparencias de Fundamentos de la programación de Luis Hernández Yañez, de la Universidad Complutense de Madrid:
    • Tipos e instrucciones II:
      • Arrays simples: transparencias 374-392 (páginas 150-168 del PDF)
    • Tipos estructurados:
      • Arrays de nuevo: transparencias 517-521 (páginas 6-10 del PDF)
      • Más sobre arrays: transparencias 522-530 (páginas 11-19 del PDF)
      • Cadenas de caracteres y tipo string: transparencias 531-542 (páginas 20-31 del PDF)
    • Recorrido y búsqueda en arrays:
      • Recorrido de arrays: 590-603 (páginas 3-16 del PDF)
      • Búsqueda en arrays: 604-613 (páginas 17-26 del PDF)
      • Cadenas : 614-629 (páginas 27-42 del PDF)
  • Material de la OIE
  • Material de la OIFem
    • Vectores: hasta la mitad de la página 4.

Los envíos que hagas a Acepta el reto a los problemas propuestos para la sesión aparecerán reflejados aquí. Pincha en el número o nombre del problema para ver su enunciado.

#6

Sexta sesión de la serie de entrenamiento.

Tras haber practicado en la sesión anterior el uso de arrays, en esta profundizaremos usando arrays bidimensionales, es decir arrays de arrays, o arrays con dos dimensiones.

Si al usar arrays es habitual que surja la necesidad de recorrerlos con un bucle, al tener arrays bidimensionales esos recorridos necesitan bucles anidados. Además, algunos de los problemas de la sesión pueden necesitar bucles adicionales o arrays auxiliares para guardar información más allá del array bidimensional que aparece de forma natural en el enunciado.

Si quieres aprender sobre los temas de esta sesión, te proponemos algo de lectura.

  • Transparencias de Fundamentos de la programación de Luis Hernández Yañez, de la Universidad Complutense de Madrid:
  • Material de la OIE
    • Matrices: en este caso, se implementan con vectores de vectores.

Los envíos que hagas a Acepta el reto a los problemas propuestos para la sesión aparecerán reflejados aquí. Pincha en el número o nombre del problema para ver su enunciado.

#7

Septima sesión de la serie de entrenamiento.

Debido a un error, se han mostrado en esta sesión los problemas de la primera sesión, en lugar de los correctos. Perdonad la confusión.

Ahora que ya sabemos utilizar arrays una operación muy habitual sobre ellos es ordenarlos. La ordenación de datos es algo habitual antes de mostrarlos al usuario, pero es también algo increíblemente común como paso previo a operaciones posteriores que se ven beneficiadas de que los datos estén ordenados. En ese caso es posible que los usuarios no lleguen a ver el resultado de la ordenación pero, internamente, el programa la habrá hecho en su propio beneficio.

En esta sesión vamos a practicar la ordenación, primero con problemas muy sencillos que pueden programarse haciendo la ordenación manualmente, y luego con problemas más exigentes que requieren algoritmos de ordenación eficientes. Si quieres aprender sobre los temas de esta sesión, te proponemos algo de lectura.

Los envíos que hagas a Acepta el reto a los problemas propuestos para la sesión aparecerán reflejados aquí. Pincha en el número o nombre del problema para ver su enunciado.

#8

Octava sesión de la serie de entrenamiento.

En la sesión 3 introducimos las funciones, trozos de código que se envuelven bajo un nombre y al que se puede enviar parámetros para aumentar las posibilidades de reutilización.

Existen un tipo particular de funciones llamadas funciones recursivas que son aquellas que se llaman a sí mismas con parámetros "más pequeños". El significado de "más pequeño" dependerá de la función concreta, pero lo importante es que en cada llamada los parámetros se acercan cada vez más a lo que se conoce como caso base en el que la función deja de llamarse a sí misma y devuelve un valor directamente.

En esta sesión vamos a practicar el uso de funciones recursivas. Ten en cuenta que algunas veces la recursión se puede evitar utilizando bucles. Para practicar, si te encuentras algún problema que puedas resolver usando bucles evita la tentación y utiliza recursión.

Si no habías oído hablar nunca sobre recursión, te proponemos algo de lectura.

  • Transparencias de Fundamentos de la programación de Luis Hernández Yañez, de la Universidad Complutense de Madrid:
  • Material de la OIE
  • Material de la OIFem

Los envíos que hagas a Acepta el reto a los problemas propuestos para la sesión aparecerán reflejados aquí. Pincha en el número o nombre del problema para ver su enunciado.