Definir o tipo complexo, para representar números complexos da forma a + bi, onde a e b são valores inteiros. Escrever as funções que completam o seguinte programa:
int main()
{
complexo x,y,z;
x = lerComplexo("x");
y = lerComplexo("y");
z = somarComplexos (x,y);
mostrarComplexo("z",z);
return 0;
}
int main()
{
complexo x,y,z;
x = lerComplexo("x");
y = lerComplexo("y");
z = somarComplexos (x,y);
mostrarComplexo("z",z);
return 0;
}
Passo 1
O enunciado pede para a gente criar um tipo em C chamado complexo que represente números da forma
, onde
e
são inteiros, e implementar três funções: lerComplexo (para ler um complexo do teclado), somarComplexos (para somar dois complexos) e mostrarComplexo (para exibir um complexo formatado). Vamos precisar de structs em C e de funções que retornem structs.
Passo 2
Primeiro, vamos definir o tipo complexo usando um typedef de struct. Assim conseguimos agrupar as partes real e imaginária num único objeto e passar isso entre funções sem complicação.
Passo 3
Para ler um complexo, a função lerComplexo vai receber o nome do complexo (uma string) para usar no prompt. A gente declara uma variável do tipo complexo, pede a parte real e imaginária com scanf e retorna essa variável.
Passo 4
Para somar dois complexos, a função somarComplexos deve simplesmente criar um novo complexo cujos campos real e imaginária são a soma dos respectivos campos dos operandos e então retornar esse resultado.
Passo 5
Para mostrar um complexo, a função mostrarComplexo recebe o nome e o struct. Ela verifica se a parte imaginária é não negativa para decidir exibir o sinal ‘+’ ou ‘-’ e imprime no formato “nome = a + bi” ou “nome = a - bi”.
Passo 6
Juntando tudo, incluímos <stdio.h>, definimos o struct, implementamos as três funções e usamos o main fornecido para ler x, ler y, somar e mostrar z.
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
typedef struct {
int real;
int imag;
} complexo;
int real;
int imag;
} complexo;
complexo lerComplexo(const char *nome) {
complexo c;
printf(“Entre com o número complexo %s (parte real e imaginária): “, nome);
scanf(”%d %d”, &c.real, &c.imag);
return c;
}
complexo c;
printf(“Entre com o número complexo %s (parte real e imaginária): “, nome);
scanf(”%d %d”, &c.real, &c.imag);
return c;
}
complexo somarComplexos(complexo a, complexo b) {
complexo s;
s.real = a.real + b.real;
s.imag = a.imag + b.imag;
return s;
}
complexo s;
s.real = a.real + b.real;
s.imag = a.imag + b.imag;
return s;
}
void mostrarComplexo(const char *nome, complexo c) {
if (c.imag >= 0)
printf("%s = %d + %di\n", nome, c.real, c.imag);
else
printf("%s = %d - %di\n", nome, c.real, -c.imag);
}
if (c.imag >= 0)
printf("%s = %d + %di\n", nome, c.real, c.imag);
else
printf("%s = %d - %di\n", nome, c.real, -c.imag);
}
int main() {
complexo x, y, z;
x = lerComplexo(“x”);
y = lerComplexo(“y”);
z = somarComplexos(x, y);
mostrarComplexo(“z”, z);
return 0;
}
complexo x, y, z;
x = lerComplexo(“x”);
y = lerComplexo(“y”);
z = somarComplexos(x, y);
mostrarComplexo(“z”, z);
return 0;
}