Análisis laboratorio 10 - Procedimientos y funciones (complejos)

Asignatura: Fundamentos de Informática
Especialidad: Electrónica - UPV/EHU
Curso académico: 2013-2014
Profesor: Ismael Etxeberria Agiriano

Este laboratorio no tiene complejidad algorítmica. Se trata de trabajar con el paso de parámetros de entrada y de salida, así como en el valor devuelto por las funciones.

Un aspecto de reflexión es que vamos a utilizar dos variables (x e y en forma binómica o r y a en forma polar) para representar un número. Utilizando elementos más avanzados (por ejemplo, vectores, estructuras o clases) podríamos hacer más compacto este concepto y ser tratado con una sola variable.

Siguiendo esta idea tendrían sentido dos funciones:

      double bParteReal (double x, double y);
      double bParteImag (double x, double y);

Si fuéramos a codificarlas nos daríamos cuenta de que en un caso se devuelve directamente la x y en el otro la y. Esto no debe ser considerado un defecto sino simplemente una abstracción para quien quiera utilizar las funciones sin conocer las propiedades de los números complejos.

  1. 10-001: Especificación
    Prototipo:
          double bModulo (double x, double y);
    

  2. 10-002: Especificación
    Prototipo:
          void bConjugado (double *x, double *y);
    

    Es de señalar que la parte real no sufre cambios. El compilador se suele dar cuenta de esto y nos envía un aviso (warning).

    Se podría haber diseñado esta función para recibir sólo la parte imaginaria, pero eso implicaría que el que utiliza las funciones no vería con la misma transparencia el "número complejo". Véase la nota al principio de este apartado.


  3. 10-003: Especificación
    Prototipo:
          void bOpuesto (double *x, double *y);
    

  4. 10-004: Especificación
    Prototipo:
          void bSuma (double x1, double y1,
                      double x2, double y2,
                      double *x, double *y);
    

  5. 10-005: Especificación
    Prototipo:
          void bResta (double x1, double y1,
                       double x2, double y2,
                       double *x, double *y);
    

  6. 10-006: Especificación
    Prototipo:
          void bApolar (double x, double y,
                        double *r, double *a);
    

  7. 10-007: Especificación
    Prototipo:
          void pAbinomica (double r, double a,
                           double *x, double *y);
    

  8. 10-008: Especificación
    Prototipo:
          void pMulti (double r1, double a1,
                       double r2, double a2,
                       double *r, double *a);
    

  9. 10-009: Especificación
    Prototipo:
          void bMulti (double x1, double y1,
                       double x2, double y2,
                       double *x, double *y);
    

  10. 10-010: Especificación
    Prototipo:
          void pDivision (double r1, double a1,
                          double r2, double a2,
                          double *r, double *a);