Квадратное уравнение в Factor
Слово quadratic-equation
принимает на вход коэффициенты квадратного уравнения и выводит результаты его решения на печать, ничего не возвращая. Обратим внимание на то, что это слово определено не через токен :
, как обычные слова, а через ::
— это означает, что в нем будут использоваться именованные переменные с лексической областью видимости, в данном случае именованные параметры a
, b
и c
и локальные переменные d
, x0
и sd
(определенные оператором :>
). Такие переменные можно загружать на стек по их имени. Слова для работы с именованными переменными доступны в словаре locals
.
В Factor есть встроенный тип данных для комплексных чисел; если дискриминант отрицателен, корень из него sd
автоматически примет тип complex
. В этом случае для вывода корней на печать используются слова real-part
и imaginary-part
, извлекающие действительную и мнимую части комплексного числа, соответственно.
readln
читает строку из потока ввода, а string>number
(словарь math.parser
) преобразует строку в действительное число.
USING: formatting io kernel locals math math.functions math.parser ;
IN: quadratic-example
:: quadratic-equation ( a b c -- )
a 0 =
[ "Not a quadratic equation." printf ]
[ b sq a c * 4 * - :> d
b neg a 2 * / :> x0
d sqrt a 2 * / :> sd
d 0 =
[ x0 "x = %f\n" printf ]
[ d 0 >
[ x0 sd + x0 sd - "x1 = %f\nx2 = %f\n" printf ]
[ x0 sd + [ real-part ] [ imaginary-part ] bi "x1 = (%f, %f)\n" printf
x0 sd - [ real-part ] [ imaginary-part ] bi "x2 = (%f, %f)\n" printf ]
if
]
if
]
if ;
readln string>number
readln string>number
readln string>number
quadratic-equation
Комментарии
]]>blog comments powered by Disqus
]]>