#include "complexo.h" #include /* para malloc, NULL */ #include /* para sqrt */ complexo soma (complexo x, complexo y) { complexo r; r = (complexo)malloc(sizeof(struct compl)); if (r == NULL) { return NULL; } else { r->a = x->a + y->a; r->b = x->b + y->b; } return r; } complexo diferenca (complexo x, complexo y) { complexo r; r = (complexo)malloc(sizeof(struct compl)); if (r == NULL) { return NULL; } else { r->a = x->a - y->a; r->b = x->b - y->b; } return r; } complexo produto (complexo x, complexo y) { complexo r; r = (complexo)malloc(sizeof(struct compl)); if (r == NULL) { return NULL; } else { r->a = x->a * y->a - x->b * y->b; r->b = x->b * y->a + x->a * y->b; } return r; } /*---------------------------------------- Na funcao abaixo, deveria haver um modo melhor de indicar que o divisor e' zero (no momento retorna-se NULL). ----------------------------------------*/ complexo quociente (complexo x, complexo y) { complexo r; double m; r = (complexo)malloc(sizeof(struct compl)); if (r == NULL) { return NULL; } else { m = modulo(x); if (m == 0) { return NULL; } else { r->a = (x->a * y->a + x->b * y->b)/m; r->b = (x->b * y->a - x->a * y->b)/m; } } return r; } double modulo (complexo x) { return sqrt(x->a * x->a + x->b * x->b); }