improve printer
This commit is contained in:
69
src/printer_solutions.c
Normal file
69
src/printer_solutions.c
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user