Universidad Carlos III de Madrid

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2012 - Enero 2013

7. Ejercicios

  1. Un programador con poca experiencia nos manda la siguiente función que dice que intercambia el valor de sus dos parámetros. Si se llama como swap(x, y), al terminar la ejecución, las variables x e y han intercambiado sus valores. ¿Es eso cierto? Comprueba tu respuesta creando un programa en tu entorno de desarrollo y ejecutándolo. Puedes imprimir la variable entera x con la línea printf("%d\n", x);.

    1
    2
    3
    4
    5
    6
    7
    8
    void swap(int a, int b) 
    {
        int tmp;
        tmp = a;
        a = b;
        b = tmp;
        return;
    }
  2. De nuevo este mismo programador nos manda una segunda función que dada una tabla de números enteros incrementa en uno cada uno de sus elementos. ¿Crees que esta función hace realmente esto? (Pista: la definición de la función es correcta, no tiene error alguno de sintaxis).

    1
    2
    3
    4
    5
    6
    7
    8
    void increase(int table[], int size) 
    {
        int i;
        for (i = 0; i < size; i++) 
        {
            table[i]++;
        }
    }
  3. Una aplicación manipula datos obtenidos de un sistema de posicionamiento global a través de la siguiente estructura:

    1
    2
    3
    4
    5
    6
    7
    
    struct gps_information 
    {
        int is_3D;
        float latitude;
        float longitude;
        float height;
    };
    

    Escribe el prototipo de una función que recibe dos estructuras de este tipo y un float. La función devuelve un entero con valor 1 si latitud y longitud de ambas estructuras están separadas por no más del valor del tercer parámetro y cero en caso contrario. Debes utilizar el sinónimo de tipo de datos que se define.

    Escribe la función con su definición completa (quizás te sea de ayuda la función de librería fabsf).

  4. Escribe una función que recibe como parámetros dos tablas de estructuras como las del ejercicio anterior, un entero con su longitud (que es la misma para ambas), y un float. La función procesa las dos tablas a la vez (primero con primero, segundo con segundo, etc.) y devuelve el índice del primer par de elementos que están cerca tal y como se calcula con la función del apartado anterior utilizando el último parámetro como distancia. Si la condición no se cumple para ningún par de elementos, devuelve el valor -1.

    Esta función que has implementado es la que se necesita en la aplicación, y no la anterior, que es una función auxiliar y de ámbito reducido. ¿Qué cambio harías en la definición del ejercicio anterior?