// Biblioteca simples de números complexos :-) // Carlos Maziero, DINF/UFPR 2020 #include #include #include #include "cpx.h" // conversão de coordenadas polares em retangulares. // Obs: esta é uma função interna; com o modificador "static", // ela só pode ser acessada por código deste arquivo. static void polar_to_rect (float r, float a, float *x, float *y) { // implementação da função // ... } // define os valores de um número complexo cpx_t cpx (float r, float i) { cpx_t new = {r, i} ; return (new) ; } // gera uma string representando um número complexo char* cpx_str (cpx_t c) { char *str ; // um dia, consertar este "memory leak"... str = malloc (128) ; // área suficiente para dois floats if (!str) { perror ("malloc") ; return (NULL) ; } sprintf (str, "%f%+fi", c.r, c.i) ; return (str) ; } // soma de dois complexos cpx_t cpx_sum (cpx_t a, cpx_t b) { cpx_t sum ; sum.r = a.r + b.r ; sum.i = a.i + b.i ; return (sum) ; } // diferença de dois complexos cpx_t cpx_sub (cpx_t a, cpx_t b) { cpx_t sum ; sum.r = a.r - b.r ; sum.i = a.i - b.i ; return (sum) ; } // produto de dois complexos cpx_t cpx_mul (cpx_t a, cpx_t b) { cpx_t prod ; prod.r = a.r * b.r - a.i * b.i ; prod.i = a.r * b.i + a.i * b.r ; return (prod) ; } // ... (demais funções)