Vocareum - Introducción

Vocareum es una plataforma online para trabajar, someter y corregir asignaciones de programación. Vamos a usarla este semestre para someter la mayoría de las asignaciones y laboratorios.

Si es la primera vez que utilizas Vocareum para un curso, recibirás un email de parte de Vocareum para crear una cuenta. Tendrás que establecer tu contraseña.

Para loguearte en Vocareum: Usando tu navegador visita http://vocareum.com y pulsas el link de Access Labs en la esquina superior derecha. Provees tus credenciales y llegarás a una pantalla como la siguiente:

https://i.imgur.com/792O0dz.png

La lista a mano izquierda son las asignaciones del curso. Cada vez que pulsas el nombre de una asignación obtendrás a mano derecha su descripción, detalles de entrega (fecha límite, etc) y puntuación máxima. Si deseas comenzar a trabajar en la asignación debes pulsar el botón anaranjado My Work.

Cuando comienzas a trabajar en una asignación, Vocareum crea un área de trabajo donde te copia los archivos esqueleto para la asignación (startcode). El área de trabajo funciona como una máquina virtual linux en la nube personalizada para el estudiante. Veras algo parecido a esto:

https://i.imgur.com/IgdroN9.png

La ventana está divida en cuatro partes principales:

  1. el file explorer que te muestra los archivos de la asignación. Si deseas editar alguno de ellos das click sobre él y su contenido te aparecera en el editor.
  2. el editor tiene autosave. También tiene color highlighting para los programas en C++

  3. el terminal: te permite ejecutar comandos de línea de linux. Por ejemplo si ejecutas ls -al debes ver un listado detallado de los mismo archivos que ves en el file explorer.

  4. área de botones

    • Submit: cuando hayas implementado, probado y depurado tu asignación usarás el botón de Submitpara someterla. En ocasiones el profesor habrá programado unas pruebas para que se le corran a tu programa sometido y en base a sus resultados asignarte puntos.

    • Actions: el menu de Actions permite descargar el startercode por si quieres trabajar en la asignación offline (usando tu herramienta de desarrollo favorita). También permite regresar la asignación a su estado inicial (perderías todos los cambios que has realizado).

Compilando desde la línea de comando

El compilador disponible en la máquina virtual de Vocareum es g++. Para compilar un programa llamado suma.cpp y generar un ejecutable llamado suma damos el siguiente comando:

g++ -o suma suma.cpp -std=c++11

El -std=c++11 es necesario para que el compilador reconozca funcionalidades de la versión 2011 de C++.

Makefiles

Algunas asignaciones proveen un archivo llamado Makefile en el startercode. Un Makefile sirve, entre otras cosas, para automatizar el proceso de compilación. Dentro del Makefile se especifican los comandos que normalmente tendrías que escribir en la línea de comando cada vez que deseas compilar un proyecto. En las asignaciones que contengan Makefile solo tienes que dar el siguiente comando para compilar.

make

Probando tu programa

Una vez compilado adecuadamente un programa, el ejecutable que genera g++ se puede ejecutar en linux así (asumiendo que el ejecutable se llama suma)

./suma

El ==./== es bien importante. Si no lo provees, linux es incapaz de adivinar el directorio adonde debe encontrar tu programa (en serio :monkey:).

El startercode de las asignaciones proveerá archivos con inputs de prueba para tu programa. La intención es librarte de tener que typear inputs cada vez que corres el programa. Digamos que tu programa espera recibir tres enteros del standard input. Si tienes un archivo input1.txt que contiene esos tres enteros (separados por espacios o nuevas líneas) puedes darselos de input al programa así:

./suma < input1.txt

Digamos que tienes un archivo llamado output1.txt que contiene lo que debería ser el output de tu programa para un input como el que contiene input1.txt. Si deseas comparar el output del programa con el output esperado puedes usar un comando como este:

./suma < input1.txt | diff - output1.txt -y

Si al ejecutar el comando no obtienes ==nada== eso significa que el output de tu programa es exactamente igual al de output1.txt (good news! :smile: ). Por otro lado, si hubo diferencias podrás observarlas en el terminal. Por ejemplo, si el programa suma está tirando un output (12) que es distinto a lo que contiene el file output1 (7) verás:

~$ ./suma < input1 | diff -B -w -b - output1 -y                                          
12                                                            | 7