Estructuras

  1. Definí las estructuras que se piden en los siguientes incisos:

    1. Una estructura para manejar inventarios que contenga un campo para la descripción del producto (máximo 30 caracteres), un número para el número de parte en el inventario, un punto flotante para el precio, un entero para la cantidad que hay en el almacén y un entero para el lugar donde se almacena.

    2. Una para manejar una dirección física que contiene arreglos para el país (máximo 40 caracteres), la provincia (máximo 30 caracteres), la ciudad (máx. 20), la dirección (máx. 30) y el código postal (10).

    3. Una persona, con un arreglo para el nombre, otro para el apellido y una estructura como la del inciso anterior.

    4. Una estructura, registro, que nos sirva para mantener un registro de los consumos de un vehículo, como en el último ejercicio de la guía 1. Para ello, debe contener un número para almacenar una cantidad de kilómetros, un número real para almacenar el costo del combustible, un número real para almacenar el dinero utilizado en una recarga, un time_t para almacenar la fecha, un booleano para indicar si se llenó el tanque y un arreglo para almacenar algún comentario.

    1. Definí una estructura punto que contenga las coordenadas de un punto en \(\mathbb{R}^2\).

    2. Definí un nuevo tipo utilizando la definición de la estructura punto.

    3. Implementá una función que reciba dos estructuras punto y calcule la distancia euclídea entre ambos puntos. Recuerde que la distancia euclídea es

      \[d(p_1, p_2) = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}\]

      donde \(p_i = (x_i, y_i)\) para \(i \in \{1, 2\}\).

    4. Implementá la función del inciso c ¡pero validá!

  2. Estamos armando nuestra propia página web de bol------------ infinito, decidimos que vamos a permitir que las personas se envíen mensajes que a lo sumo tengan 143 caracteres. Para ello, vamos a utilizar una estructura. La misma tiene que tener un número no signado que identifica al mensaje dentro de los millones y millones de mensajes que nos van a mandar, un time_t para la fecha, un arreglo para almacenar el mensaje y un arreglo para almacenar el nombre de usuario de quien lo publica.

    1. Definí la estructura del enunciado.

    2. Implementá una función que tome un mensaje y lo publique en la terminal, con el siguiente formato:

      YYYY-MM-DD HH:mm:ss
      
      <MENSAJE>
      
                  Sos lo mejor. Besos. <usuario>
      
  3. (menú) Volvamos sobre nuestros pasos y rehagamos los menúes.

    1. Definí una estructura que contenga un valor que el usuario tenga que ingresar (puede ser entero, enum, char, cadena) y una cadena con lo que se debe mostrar como mensaje para la opción.

    2. Implementá una función que reciba un vector con estructuras e imprima un menú.

    3. Como variante del inciso anterior, la función puede imprimir el menú, leer lo que se ingresa y retornar la opción seleccionada.

    4. ¿Cómo se debe definir la estructura para poder utilizarla de la siguiente manera?

      struct nombre_struct vector[] = {
          {1, "Opción primera"}, /* ¡¡ Hardcode !! */
          {6, "Opción segunda"}, /* ¡¡ Hardcode !! */
          {0, "Opción quinta"}   /* ¡¡ Hardcode !! */
      };
      
  4. (estructuras anidadas) Dada las siguientes definiciones

    struct header {
        int secuencia;
        time_t stamp;
        char * frame;
    };
    
    struct pose {
        struct {
            double x, y, z;
        } posicion;
        struct {
            double qx, qy, qz, qw;
        } orientacion;
    };
    
    struct pose_stamped {
        struct header encabezado;
        struct pose pose;
    } robot_pose;
    

    Para acceder a cada uno de los campos de las estructuras, escribí una expresión. Por ejemplo, para acceder al campo stamp:

    robot_pose.encabezado.stamp
    
  5. (estructuras anidadas 2) Dadas las siguientes definiciones

    struct header {
        int secuencia;
        time_t stamp;
        char * frame;
    } header;
    
    struct punto {
        double x, y, z;
    } point;
    
    struct cuaternion {
        double qx, qy, qz, qw;
    } quaternion;
    
    struct pose {
        struct punto * posicion;
        struct cuaternion * orientacion;
    } pose;
    
    struct pose_stamped {
        struct header * encabezado;
        struct pose * pose;
    } robot_pose, * robot_pose_ptr;
    

    Escribí una porción de código para cargar la estructura robot_pose usando las demás estructuras. Luego, para acceder a cada uno de los campos de las estructuras, escribí una expresión. Por ejemplo, cualquiera de las siguientes accede al campo stamp, aunque la primera es la más clara:

    robot_pose_ptr->encabezado->stamp;
    robot_pose.encabezado->stamp;
    *(robot_pose.encabezado).stamp;
    *((*robot_pose_ptr).encabezado).stamp;