summaryrefslogtreecommitdiff
path: root/graphs/piscine/handling_complex/complex.c
diff options
context:
space:
mode:
Diffstat (limited to 'graphs/piscine/handling_complex/complex.c')
-rw-r--r--graphs/piscine/handling_complex/complex.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/graphs/piscine/handling_complex/complex.c b/graphs/piscine/handling_complex/complex.c
new file mode 100644
index 0000000..79a10be
--- /dev/null
+++ b/graphs/piscine/handling_complex/complex.c
@@ -0,0 +1,51 @@
+#include "complex.h"
+
+#include <stdio.h>
+
+void print_complex(struct complex a)
+{
+ printf("complex(%.2f ", a.real);
+
+ if (a.img < 0)
+ {
+ printf("- %.2fi", -a.img);
+ }
+ else
+ {
+ printf("+ %.2fi", a.img);
+ }
+ printf(")\n");
+}
+
+struct complex neg_complex(struct complex a)
+{
+ struct complex z = { -a.real, -a.img };
+ return z;
+}
+
+struct complex add_complex(struct complex a, struct complex b)
+{
+ struct complex z = { a.real + b.real, a.img + b.img };
+ return z;
+}
+
+struct complex sub_complex(struct complex a, struct complex b)
+{
+ return add_complex(a, neg_complex(b));
+}
+
+struct complex mul_complex(struct complex a, struct complex b)
+{
+ struct complex z = { a.real * b.real - a.img * b.img,
+ a.real * b.img + a.img * b.real };
+ return z;
+}
+
+struct complex div_complex(struct complex a, struct complex b)
+{
+ struct complex z = {
+ (a.real * b.real + a.img * b.img) / (b.real * b.real + b.img * b.img),
+ (a.img * b.real - a.real * b.img) / (b.real * b.real + b.img * b.img)
+ };
+ return z;
+}