Sejam
e
di dois números complexos e i a unidade imaginária. Crie quatro funções (uma para cada operação abaixo) que operem sobre dois números complexos informados pelo usuário e retornam o número complexo resultante da operação escolhida. Utilize struct para representar os números complexos
Adição:
Subtração:
Multiplicação:
Divisão:
Subtração:
Multiplicação:
Divisão:
Passo 1
O enunciado pede pra gente representar números complexos usando um struct em C e criar quatro funções (adição, subtração, multiplicação e divisão) que recebam dois complexos e devolvam o resultado dessas operações.
Passo 2
Primeiro vamos definir o struct que guarda a parte real e a parte imaginária de um número complexo; vamos chamar de Complex.
Em seguida, criamos a função de adição que, dado z=(a+bi) e w=(c+di), retorna (a+c) + (b+d)i.
Depois, montamos a função de subtração que retorna (a−c) + (b−d)i.
Para a multiplicação, usamos a fórmula (ac − bd) + (ad + bc)i.
Por fim, na divisão, calculamos o denominador den = c² + d² e aplicamos real = (ac + bd)/den e imag = (bc − ad)/den.
Em seguida, criamos a função de adição que, dado z=(a+bi) e w=(c+di), retorna (a+c) + (b+d)i.
Depois, montamos a função de subtração que retorna (a−c) + (b−d)i.
Para a multiplicação, usamos a fórmula (ac − bd) + (ad + bc)i.
Por fim, na divisão, calculamos o denominador den = c² + d² e aplicamos real = (ac + bd)/den e imag = (bc − ad)/den.
Resposta
#include <stdio.h>
// Representação de um número complexo
typedef struct {
double real;
double imag;
} Complex;
typedef struct {
double real;
double imag;
} Complex;
// Adição: (a+bi) + (c+di) = (a+c) + (b+d)i
Complex add(Complex z, Complex w) {
Complex result;
result.real = z.real + w.real;
result.imag = z.imag + w.imag;
return result;
}
Complex add(Complex z, Complex w) {
Complex result;
result.real = z.real + w.real;
result.imag = z.imag + w.imag;
return result;
}
// Subtração: (a+bi) - (c+di) = (a-c) + (b-d)i
Complex subtract(Complex z, Complex w) {
Complex result;
result.real = z.real - w.real;
result.imag = z.imag - w.imag;
return result;
}
Complex subtract(Complex z, Complex w) {
Complex result;
result.real = z.real - w.real;
result.imag = z.imag - w.imag;
return result;
}
// Multiplicação: (a+bi)(c+di) = (ac - bd) + (ad + b*c)i
Complex multiply(Complex z, Complex w) {
Complex result;
result.real = z.real * w.real - z.imag * w.imag;
result.imag = z.real * w.imag + z.imag * w.real;
return result;
}
Complex multiply(Complex z, Complex w) {
Complex result;
result.real = z.real * w.real - z.imag * w.imag;
result.imag = z.real * w.imag + z.imag * w.real;
return result;
}
// Divisão: (a+bi)/(c+di) = [(ac + bd) / (c2+d2)] + [(bc - ad) / (c2+d2)]i
Complex divide(Complex z, Complex w) {
Complex result;
double den = w.real * w.real + w.imag * w.imag;
result.real = (z.real * w.real + z.imag * w.imag) / den;
result.imag = (z.imag * w.real - z.real * w.imag) / den;
return result;
}
Complex divide(Complex z, Complex w) {
Complex result;
double den = w.real * w.real + w.imag * w.imag;
result.real = (z.real * w.real + z.imag * w.imag) / den;
result.imag = (z.imag * w.real - z.real * w.imag) / den;
return result;
}
// Exemplo de uso
int main() {
Complex z = {2.0, 3.0};
Complex w = {1.0, -4.0};
int main() {
Complex z = {2.0, 3.0};
Complex w = {1.0, -4.0};
Complex soma = add(z, w);
Complex dif = subtract(z, w);
Complex prod = multiply(z, w);
Complex quo = divide(z, w);
printf("z + w = %.2f + %.2fi\n", soma.real, soma.imag);
printf("z - w = %.2f + %.2fi\n", dif.real, dif.imag);
printf("z * w = %.2f + %.2fi\n", prod.real, prod.imag);
printf("z / w = %.2f + %.2fi\n", quo.real, quo.imag);
return 0;
}