# Ejercicio: proyecto "P0"

Para terminar, vamos a realizar un **ejercicio que ponga en práctica todas las herramientas que hemos visto**: terminal Bash, programación en C++, compilador g++, y editor de texto vim. Deberéis realizarlo <mark style="background-color:green;">**de forma individual**</mark>.&#x20;

{% hint style="info" %}
Es muy importante que realicéis esta actividad usando las herramientas presentadas, tal y como se indica en cada paso. De hecho, el propósito principal de este actividad es que practiquéis con ellas y que aprendais a utilizarlas.&#x20;
{% endhint %}

{% hint style="success" %}
Para realizar este ejercicio, es posible que necesites consultar las trasparencias del tema 0 de teoría (en poliformaT) para ver detalles sobre el uso del compilador `g++`, el uso del objeto `std::cout` para imprimir texto por pantalla, etc.
{% endhint %}

1. Abre una terminal, sitúate en un directorio donde quieras guardar tus prácticas de la asignatura, y crea una estructura de directorios `"PRG/Lab/P0"`.  Sitúate en ese directorio `P0`.
2. Crea, con vim, un fichero de cabeceras **`utils.h`**, que defina el perfil de estas 4 funciones (solo la definición!):
   * `void saludar()`: muestra un mensaje amistoso por pantalla.&#x20;
   * `int maximo(int a, int b)`: devuelve el máximo valor entre `a` y `b`.
   * `int factorial(int x)`: calcula y devuelve el factorial de `x`, siguiendo una aproximación iterativa.
   * `void printArray(int* arr, int size)`: imprime en una línia todos los elementos de un array `arr` con `size` elementos.
3. Implementa las cuatro funciones anteriores en un fichero **`utils.cpp`** con vim. Deberás importar la cabecera `<iostream>` para poder hacer uso del objeto `std::cout` y el operador de inserción `<<` sobre él.&#x20;
4. Valida que la implementación es correcta sintácticamente, compilando (sin enlazar, obviamente) con `g++` la librería utils.
5. Crea, con vim, un fichero **`main.cpp`**, que incluya/importe el fichero de cabeceras `utils.h`, e implementa en él una función de código principal `main()` que&#x20;
   1. Invoque la función `saludar()`.
   2. Imprima por pantalla el máximo de dos números enteros cualquiera (usando `maximo(int, int)`).
   3. Imprima por pantalla el valor de 5! (usando `factorial(int)`).
   4. Cree un array de 4 enteros con los elementos \[1,2,3,4].
   5. Imprima los contenidos de dicho array (usando `printArray(int*, int)`).
6. Valida que la implementación del código principal es correcta sintácticamente, compilando (sin enlazar) con `g++` el código fuente de `main.cpp`.
7. Crea un fichero ejecutable denominado **`app`**, enlazando con `g++` el código objeto de la librería `utils.o` y el código objeto del código principal `main.o`.
8. Ejecuta la aplicación (`./app`) y comprueba que el resultado obtenido es correcto. Si no, depura tu implementación.
