improve printer

This commit is contained in:
hugogogo
2026-05-13 23:27:50 +02:00
parent b0e6483a68
commit 7978f0d706
8 changed files with 103 additions and 87 deletions

69
src/printer_solutions.c Normal file
View File

@@ -0,0 +1,69 @@
/* printer.c */
#include "computorv1.h"
static void print_solution_degree_1(s_solution_degree_1 solution)
{
ft_printf("The solution is:\n");
printf("%g\n", solution.solution);
}
static void print_solution_delta_zero(s_solution_degree_2 solution)
{
ft_printf("Discriminant is equal to zero, the solution is:\n");
printf("%g\n", solution.first_term);
}
static void print_solution_delta_positiv(s_solution_degree_2 solution)
{
ft_printf("Discriminant is strictly positive, the two solutions are:\n");
printf("%g\n", solution.first_term + solution.second_term);
printf("%g\n", solution.first_term - solution.second_term);
}
static void print_solution_delta_negativ(s_solution_degree_2 solution)
{
ft_printf("Discriminant is strictly negative, the two complex solutions are:\n");
// solution 1
if (solution.b)
printf("%g/%g + ", solution.b * -1, solution.a * 2);
printf("%gi/%g\n", solution.delta_sqrt, solution.a * 2);
// solution 2
if (solution.b)
printf("%g/%g - ", solution.b * -1, solution.a * 2);
else
printf("-");
printf("%gi/%g\n", solution.delta_sqrt, solution.a * 2);
}
void print_solution(s_solution *solution)
{
s_solution_degree_2 solution_d2;
e_delta_sign delta_sign;
// degree 1
if (solution->degree == 1)
{
return print_solution_degree_1(solution->solution_degree_1);
}
else if (solution->degree == 2)
{
solution_d2 = solution->solution_degree_2;
delta_sign = solution_d2.delta_sign;
if (delta_sign == 0)
print_solution_delta_zero(solution_d2);
else if (delta_sign > 0)
print_solution_delta_positiv(solution_d2);
else if (delta_sign < 0)
print_solution_delta_negativ(solution_d2);
else
stop_errors("delta sign is wrong : '%i' , delta : '%g'", solution_d2.delta_sign, solution_d2.delta);
}
else
{
stop_errors("The degree is '%i', it should already have been handled.", solution->degree);
}
}