43b4def6ce4b30af57c7a02ec9a97252b4922c94
42_EXT_05_computorv1
ressources
- project intra : https://projects.intra.42.fr/projects/42cursus-computorv1
- project luke : https://github.com/LuckyLaszlo/computorv1
install
this project uses submodules (maybe recursively), so either :
git clone --recurse-submodules <repo-url>- or, after cloning :
git submodule update --init --recursive
steps
- lexer
-> tokens types :
- TOKEN_VARIABLE // x, y, etc.
- TOKEN_NUMBER_INT // int
- TOKEN_NUMBER_DOUBLE // double
- TOKEN_POWER // ^ or **
- TOKEN_SIGN_PLUS // +
- TOKEN_SIGN_MINUS // -
- TOKEN_FACTOR_MULT // *
- TOKEN_FACTOR_DIV // / or :
- TOKEN_EQUAL // =
- END // null
- parser
-> terms :
- POSITION // left or righ from =
- SIGN // + or -
- COEFFICIENT // double
- EXPONENT // double
- reduce
-> polynom :
- sign
- coefficient
- exponent
- print reduced form
-> print reduced form
-> if degree 1 :
- if c = 0 -> print "any real is a solution"
- if c != 0 -> print "no solution" -> if degree 2 :
- print degree -> if degree 3 :
- print degree
- solve -> degree 1 : -> ax + b = 0 <=> ax = -b <=> x = -b / a -> solution : - a; // double - b; // double - solution_gcd; // gcd(b, a) - solution_numerator; // -b / gcd - solution_denominator; // a / gcd - solution; // double (-b / a) -> degree 2 : -> discriminant : Δ = b² - 4ac -> Δ > 0 -> 2 solutions : x = ( -b / 2a ) +- ( √|Δ| / 2a ) -> Δ == 0 -> 1 solution : x = ( -b / 2a ) -> Δ < 0 -> 2 solutions : x = ( -b / 2a ) +- i( √|Δ| / 2a ) -> solution : - a; // double - b; // double - c; // double - delta_sign; // + or - - delta_absolute; // |Δ| - first_term_gcd; // gcd(b, 2a) - first_term_numerator; // -b / gcd - first_term_denominator; // 2a / gcd - first_term; // double (-b / 2a) - second_term_gcd; // gcd(√|Δ|, 2a) - second_term_numerator; // √|Δ| / gcd - second_term_denominator; // 2a / gcd - second_term; // double (√|Δ| / 2a) - double solution1; // first_term + second_term - double solution2; // first_term - second_term
- print solution
Description
Languages
C
59.2%
Shell
37.5%
Makefile
3.3%