Home RecentChanges

Complexos

Ficheiro complexos.c:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
  float real, img;
} complexo;

complexo soma(complexo a, complexo b);
complexo le_complexo();
void escreve_complexo(complexo a);

int
main()
{
  complexo x, y, z;

  x = le_complexo();
  y = le_complexo();

  z = soma(x, y);

  escreve_complexo(x);
  printf(" + ");
  escreve_complexo(y);
  printf(" = ");
  escreve_complexo(z);
  printf("\n");

  return EXIT_SUCCESS;
}

complexo
soma(complexo a, complexo b)
{
  a.real += b.real;
  a.img += b.img;

  return a;
}

complexo
le_complexo()
{
  complexo a;
  char sign;

  scanf("%f%c%fi", &a.real, &sign, &a.img);

  if (sign == '-')
    a.img *= -1;

  return a;
}

void
escreve_complexo(complexo a)
{
  if (a.img >= 0)
    printf("%f+%fi", a.real, a.img);
  else
    printf("%f%fi", a.real, a.img);
}

Compilação e execução:

[aplf@darkstar ~]$ gcc -Wall -ansi -pedantic -o complexos complexos.c
[aplf@darkstar ~]$ ./complexos 
5-4i
-3+3i
5.000000-4.000000i + -3.000000+3.000000i = 2.000000-1.000000i
[aplf@darkstar ~]$ ./complexos 
4.3-0.5i
2.2+3.4i
4.300000-0.500000i + 2.200000+3.400000i = 6.500000+2.900000i
[aplf@darkstar ~]$