Lectura y escritura

La lectura y escritura en un programa, son probablemente las primeras y más básicas actividades que necesitan aprender antes de enviar los programas al momento de resolver problemas para un concurso como la OMI, pues necesitamos recibir una entrada de datos desde un flujo de entrada (teclado o un archivo) y obviamente desplegar resultados en algún flujo de salida (tradicionalmente la pantalla)

En esta sección exploraremos distintas maneras de realizar estas acciones con las instrucciones mas comunes en lenguaje C y C++.

Consideraciones iniciales

La entrada normalmente se le dará a partir de la entrada estándar (stdin para los usuarios de C) y el resultado se espera en la salida estándar (stdout para los usuarios de C). Esto es lo mismo que escribir un programa que acepta la entrada desde el teclado y muestra los resultados en la pantalla. Estoy seguro de que la mayoría de ustedes ya han estado programando esa manera. Sin embargo, una diferencia importante es que no es necesario solicitar al usuario la entrada, por lo que cosas como:

“Por favor, escriba su nombre: ” – !NO NO!

Debes asumir que el usuario que ingresa los datos en el otro extremo sabe qué introducir y cuándo introducirlo. Del mismo modo, al mostrar los resultados, debes mostrarlo en el formato exacto como se especifica en la redacción del problema.

Para averiguar el formato en el que se introducirán los datos y cómo debes mostrar los resultados, es necesario hacer referencia a la sección “Entrada” y “Salida” de la redacción del problema que estas resolviendo. Asegúrate de que estás siguiendo la especificación de salida en el caso de números con punto decimal por ejemplo. Si tiene un carácter fuera de lugar, tu envío será marcado como incorrecto.

Redacción de un problema de olimpiada

Los problemas de un concurso, como la olimpiada de informática, se redactan de una manera muy especifica, a pesar de que el tipo de problemas son muy variados en el caso de la redacción hay elementos comunes que tienes que tomar en cuenta:

1.- Como primer punto, se contextualiza el problema, en ocasiones se cuenta una historia, en otras se te plantea una situación especifica que tienes que resolver, a veces se vá directamente al grano de lo que tienes que resolver, la etapa de contexto, puede ser muy variada.

2.- Después del contexto, normalmente están las secciones de “entrada” y “salida” es decir el resultado que tu programa debe enviar. Típicamente, se te pedirá que ejecutes tu programa contra varios casos de prueba. El número de casos de prueba y el formato de cada caso de prueba se mencionará claramente en la sección “Entrada” de la redacción del problema. En la mayoría de los casos, se le pedirá que muestre el resultado de cada caso de prueba, por lo que tendrá tantos resultados como casos de prueba.

3.- Los limites, la ultima sección de un problema normalmente la ocupan los limites a los que se probaran tu código en los distintos casos de prueba.

¿Por qué tantos casos de prueba?

Existen diferentes tipos de prueba a los que se somete un código, antes de decir si “resuelve” o no un problema algunas de ellas son:

  • Prueba de valor límite
  • Pruebas negativas
  • Pruebas de estrés
  • etc..

Cada una de estas pruebas tiene un propósito específico, por lo que el equipo que propone un problema, ha mantenido muchos tipos diferentes de pruebas para probar la efectividad y el rendimiento de tu código para diferentes tipos de entradas.