Prácticas
Información general sobre las prácticas:
-
Presta mucha atención a este artículo: Cómo no realizar una práctica de programación.
-
Para trabajar las prácticas en casa, puedes se recomienda utilizar una partición de Linux en tu ordenador o disponer de una máquina virtual que pueda emular el entorno Linux. Se puede crear una máquina virtual VDI con la herramienta VirtualBox, que es un software libre y gratuito. Hay gran cantidad de documentación respecto a esta herramienta como por ejemplo cómo instalar ubuntu en VirtualBox.
-
Si finalmente te decides a usar este S.O. para las prácticas de la asignatura en este enlace tienes acceso a la Guía de escritorio de Ubuntu. La versión actual de los ordenadores del laboratorio es Ubuntu 24.04.
-
En la asignatura trabajamos en prácticas con GNU/Linux y el compilador de C++ del proyecto GCC, para ello empleamos la versión que hay instalada en los laboratorios de la EPS. Para conocer la versión, escribe en la terminal de Linux lo siguiente:
g++ --version
.Ten en cuenta lo siguiente ya que es MUY IMPORTANTE:
-
La corrección de las prácticas se realiza con esta versión del compilador de C++.
Tenlo en cuenta ya que C++ es un lenguaje diferente a C y puede haber cambios entre una y otra versión del estándar del mismo.
En la asignatura empleamos
la versión de C++ de 2017, más conocida comoC++17
. -
Es aconsejable que si utilizas tu ordenador personal para realizar las prácticas, antes de entregarlas, las compiles y pruebes con esa versión del compilador.
-
2 Consejos
Para la entrega de prácticas
Debes poner tu nombre y DNI en un comentario al principio de cada archivo de código que escribas y entregues
. Es obligatorio, no ponerlo implica una nota de 0 en esa práctica.- Puedes entregar tantas veces como quieras una práctica mientras su plazo de entrega esté abierto, esto implica que no se admitirán entregas fuera de plazo o por otro cauce que no sea el indicado en el enunciado. Si esto ocurriera esa entrega será ignorada.
- La publicación de notas se realiza en la web del DLSI.. Tendrás que iniciar sesión con tu cuenta de UACloud para acceder.
- Asegúrate de que el archivo que vas a entregar para las prácticas cumple los requisitos que se piden. En todas las prácticas, entregarás un archivo comprimido en formato tgz (las instrucciones para obtenerlo las tienes en el enunciado de cada práctica), y dentro de él una carpeta con un nombre específico que contendrá los archivos de código que debes entregar. Si no cumples estos requisitos, tu práctica no compilará.
- Si necesitas revisar cualquier práctica de la asignatura debes reservar una tutoría presencial desde la aplicación de UA Cloud.
Para escribir el código de las prácticas
-
Puedes trabajar con cualquier editor de código con el que te sientas cómodo. Algunos editores tienen integradas funciones para depurar código que internamente utilizan herramientas como gdb. Un ejemplo es Visual Studio Code, disponible en los laboratorios de la EPS. Aunque puedes usar el editor que prefieras, ten en cuenta que en el examen de prácticas tendrás que utilizar un ordenador del laboratorio, por lo que es recomendable que utilices un editor que esté instalado en el laboratorio para no tener que enfrentarte en el examen a una herramienta nueva con la que no has trabajado durante el curso.
-
Recuerda:
- No modifiques los archivos de cabecera entregados con el código de partida.
- Comprobar si tu código compila y ejecuta de manera correcta con la versión del compilador instalada en los laboratorios de la EPS. Los errores de compilación impiden que se pueda comprobar si tu código funciona correctamente.
- Inicializar todas las variables que declares a un valor que tenga sentido, así como realizar una primera implementación vacía o sencilla de las funciones o métodos pedidos en las prácticas, p.e.:
- Si nos piden una función que no devuelve nada:
void mi_funcion() {}
- Si nos piden una función que devuelve un dato del tipo que sea,
p.e.
double
double mi_funcion() { return 0.0; } - Si implementas una función recursiva, asegúrate que has tenido en cuenta el o los casos base que tenga.
-
Algunas funciones producen salida por pantalla cuando no se pide.
Repasa tu código pues esto puede interferir en la corrección de la práctica.
Devolver un resultado por parte de una función es algo totalmente distinto a imprimirlo. En los enunciados de las prácticas se indica claramente cuando se debe hacer una cosa o la otra.
Ampliación de conocimientos
- Se llevará a cabo al principio de determinadas sesiones de prácticas.
- En estas sesiones de ampliación de conocimientos explicaremos de manera muy breve algunas herramientas que se salen de los contenidos de la asignatura pero que os serán muy útiles y completarán vuestra formación informática.
Construcción de proyectos con Make. El depurador gdb. La herramienta de análisis en tiempo de ejecución valgrind.
Veremos cómo funcionan estas herramientas que emplearemos a lo largo de todo el curso.
Trabajo con el S.O. desde un terminal: Bash shell script
En este apartado explicaremos el funcionamiento básico del intérprete de
órdenes bash
.
Hablaremos de:
- Diferencia entre shell y terminal.
- Gestión de ficheros y directorios (
ls, cd, rm, mkdir, pwd
). - Sistema de ficheros, rutas relativas y absolutas.
- Concepto de usuario (
id
), grupo,HOME
. - Trabajos en primer y segundo plano (
&, fg, bg, ^Z, ^C
). - Gestión de procesos (
kill, pidof, pkill, killall, ps, top, htop, etc...
) - Uso básico de permisos (
chmod, chown, chgrp
).
Documentación del código: Doxygen
Debemos acostumbrarnos a documentar nuestro código y si, además, podemos generar documentación a partir de estos comentarios mucho mejor.
Existen diferentes herramientas que permiten llevar a cabo esta
tarea. Para C++
nosotros emplearemos Doxygen y haremos uso de este
código de ejemplo.
Control de versiones: Git
Hoy en día es obligatorio saber usar una herramienta de control de
versiones, concretamente git
, para gestionar los cambios en nuestro
código y facilitar el trabajo en grupo.
Aprenderemos a usar git
para el trabajo local con el código que
escribamos.
Hablaremos de:
- Qué es el control de versiones en general.
- Qué es un repositorio y una copia de trabajo.
- Cómo crear un repositorio y poner los archivos de un proyecto bajo control de versiones.
- Cómo ir creando commits que contengan los cambios que vayamos haciendo al código.
Aplicaciones con interface de usuario gráfico: Dear ImGui, NappGui
Una vez conozcamos los elementos básicos de la Programación Orientada a Objetos veremos cómo construir aplicaciones que proporcionen un interfaz gráfico de usuario y que, por tanto, permitan mostrar Información de manera gráfica.
-
Para ello emplearemos el toolkit Dear ImGui:
Hablaremos de:
- Cómo crear una copia local de Dear ImGui.
- Cómo compilar una aplicación sencilla que haga uso de esta biblioteca.
-
Y si prefieres probar una biblioteca para trabajar desde
C
puedes echar un vistazo a NappGui. Desarrollada por un alumno de Ingeniería informática de la Universidad de Alicante y para la que dispones de su manual en castellano. -
Dado que en el tema 6 hablamos de la implementación de programación dirigida por eventos de la biblioteca Qt, aquí puedes ver un vídeo de introducción a la creación de aplicaciones con interfaz gráfico haciendo uso de Qt, en concreto de la versión 6 de esta biblioteca.
Enunciados de prácticas
Práctica 0
-
Objetivos:
- Comprobación de nuestro usuario en el sistema de entregas.
- Entender y practicar con el sistema de entrega de prácticas y con el formato de entrega de las prácticas.
- Repaso de conceptos de Programación I.
- Uso de herramientas como
make
,gdb
yvalgrind
. - Conocer y aprender a usar tipos de datos numéricos enteros de tamaño fijo.
- Conocer algunas de las nuevas características que nos ofrece
C++
.
-
Aquí tienes el enunciado y los archivos de partida para la misma.
Práctica 1
-
Objetivos:
- Adquirir práctica y destreza con las características de C++ que lo hacen un mejor C.
- Profundizar en los conocimientos aprendidos en Programación I.
- Hacer uso de las herramientas estudiadas en la práctica 0.
-
Aquí tienes el enunciado y los archivos de partida para la misma.