new struct for polynom
This commit is contained in:
@@ -61,8 +61,8 @@ static void terms_fill_null(s_term *terms, size_t terms_count_prediction)
|
||||
{
|
||||
terms[i].coefficient = 0.0;
|
||||
terms[i].exponent = 0;
|
||||
terms[i].position = TERM_END;
|
||||
terms[i].sign = TERM_NULL;
|
||||
terms[i].position = TERM_POS_END;
|
||||
terms[i].sign = TERM_SIGN_END;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@@ -74,7 +74,7 @@ static int get_max_exponent(s_term *terms)
|
||||
|
||||
i = 0;
|
||||
max_exponent = 0;
|
||||
while (terms[i].position != TERM_END)
|
||||
while (terms[i].position != TERM_POS_END)
|
||||
{
|
||||
if (terms[i].exponent > max_exponent)
|
||||
{
|
||||
@@ -86,14 +86,45 @@ static int get_max_exponent(s_term *terms)
|
||||
return max_exponent;
|
||||
}
|
||||
|
||||
static void polynom_fill_null(double *polynom, int len)
|
||||
static int get_number_of_exponents(s_term *terms, int max_exponent)
|
||||
{
|
||||
int i;
|
||||
int nbr_of_exponent;
|
||||
|
||||
int exponent_present[max_exponent];
|
||||
ft_bzero(exponent_present, sizeof(exponent_present));
|
||||
|
||||
// mark exponents as present
|
||||
i = 0;
|
||||
while (terms[i].position != TERM_POS_END)
|
||||
{
|
||||
exponent_present[terms[i].exponent] = 1;
|
||||
i++;
|
||||
}
|
||||
|
||||
// Count unique exponents
|
||||
nbr_of_exponent = 0;
|
||||
i = 0;
|
||||
while (i < max_exponent)
|
||||
{
|
||||
if (exponent_present[i] == 1)
|
||||
nbr_of_exponent++;
|
||||
i++;
|
||||
}
|
||||
|
||||
return nbr_of_exponent;
|
||||
}
|
||||
|
||||
static void polynom_fill_null(s_polynom *polynom, int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i <= len)
|
||||
while (i < len)
|
||||
{
|
||||
polynom[i] = 0.0;
|
||||
polynom[i].coefficient = 0.0;
|
||||
polynom[i].exponent = 0;
|
||||
polynom[i].sign = TERM_SIGN_END;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@@ -101,6 +132,8 @@ static void polynom_fill_null(double *polynom, int len)
|
||||
void launch_computorv1(char *input)
|
||||
{
|
||||
int max_exponent;
|
||||
int nbr_of_exponents;
|
||||
int degree;
|
||||
size_t arg_len;
|
||||
size_t terms_count_prediction;
|
||||
|
||||
@@ -127,20 +160,22 @@ void launch_computorv1(char *input)
|
||||
// reduce
|
||||
max_exponent = get_max_exponent(terms);
|
||||
print_debug("-> max_exponent: %i\n\n", max_exponent);
|
||||
double polynom[max_exponent + 1];
|
||||
nbr_of_exponents = get_number_of_exponents(terms, max_exponent);
|
||||
print_debug("-> nbr_of_exponents: %i\n\n", nbr_of_exponents);
|
||||
s_polynom polynom[nbr_of_exponents + 2]; // +1 for last term, +1 for the degree (eg. degree 2 means 3 terms)
|
||||
polynom_g_err = polynom;
|
||||
polynom_len_g_err = max_exponent;
|
||||
polynom_fill_null(polynom, max_exponent);
|
||||
reduce(terms, polynom);
|
||||
polynom_fill_null(polynom, nbr_of_exponents + 2);
|
||||
degree = reduce(terms, polynom, max_exponent);
|
||||
print_debug("-> degree: %i\n\n", degree);
|
||||
|
||||
// print before solution
|
||||
print_reduced_form(polynom, max_exponent);
|
||||
print_degree(polynom, max_exponent);
|
||||
print_reduced_form(polynom);
|
||||
// print_degree(polynom, degree);
|
||||
|
||||
// solve
|
||||
s_solution solution[1];
|
||||
solution_g_err = solution;
|
||||
solve(polynom, solution);
|
||||
// // solve
|
||||
// s_solution solution[1];
|
||||
// solution_g_err = solution;
|
||||
// solve(polynom, solution);
|
||||
|
||||
// print solution
|
||||
|
||||
|
||||
Reference in New Issue
Block a user