Files
42_EXT_05_computorv1/README.md
2026-05-06 22:34:16 +02:00

1.9 KiB

42_EXT_05_computorv1

ressources

install

this project uses submodules (maybe recursively), so either :

  • git clone --recurse-submodules <repo-url>
  • or, after cloning : git submodule update --init --recursive

steps

  1. 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
  2. parser -> terms :
    • POSITION // left or righ from =
    • SIGN // + or -
    • COEFFICIENT // double
    • EXPONENT // double
  3. reduce -> polynom :
    • 0
    • 1
    • 2
    • 3
    • ...
  4. print reduced form
  5. find degree
  6. print degree
  7. solve -> discriminant : Δ = b² - 4ac -> Δ > 0 -> 2 solutions : x = ( -b / 2a ) +- ( √|Δ| / 2a ) -> Δ == 0 -> : x = ( -b / 2a ) -> Δ < 0 -> 2 solutions : x = ( -b / 2a ) +- i( √|Δ| / 2a ) -> solution :
    • delta_sign; // + or -
    • delta_absolute; // |Δ|
    • first_term_pgcd; // pgcd(b, 2a)
    • first_term_numerator; // -b / pgcd
    • first_term_denominator; // 2a / pgcd
    • first_term; // double (-b / 2a)
    • second_term_pgcd; // pgcd(√|Δ|, 2a)
    • second_term_numerator; // √|Δ| / pgcd
    • second_term_denominator; // 2a / pgcd
    • second_term; // double (√|Δ| / 2a)
    • double solution1; // first_term + second_term
    • double solution2; // first_term - second_term
  8. print solution