You are here
Решение квадратного уравнения (hp-35s)
Поскольку в этом калькуляторе нет автоматического решателя квадратных и кубических уравнений, а то что есть - позволяет решать их только численными методами по одному корню за раз, то я решил немного восполнить этот пробел. Может кому-либо пригодится.
Входные данные - уравнение вида ax2+bx+c=0
Коэффициенты вводятся по запросу калькулятора c нажатием клавиши R/S
Выходные данные - корни (вещественные или комплексные) находятся в двух нижних регистрах стека x2->Y, x1->X
B001 LBL B B002 RPN B003 SF 10 B004 AX2+BX+C=0 B005 PSE B006 INPUT A B007 INPUT B B008 INPUT C B009 RCL B // дискриминант B010 x2 B011 4 B012 RCL A B013 * B014 RCL C B015 * B016 – B017 STO D B018 X<0? B019 GTO B040 B020 RCL B // вещественные корни B021 +/- B022 RCL D B023 SQRT x B024 + B025 2 B026 / B027 RCL A B028 / B029 RCL B B030 +/- B031 RCL D B032 SQRT x B033 – B034 2 B035 / B036 RCL A B037 / B038 STOP B039 GTO B001 B040 +/- // комплексные корни B041 2 B042 / B043 RCL A B044 / B045 STO X B046 RCL D B047 +/- B048 SQRT x B049 2 B050 / B051 RCL A B052 / B053 i B054 * B055 STO Y B056 + B057 RCL X B058 RCL Y B059 – B060 STOP B061 GTO B001
Символы отличные от изображённых на клавиатуре калькулятора
/ - деление
* - умножение
SQRT x - квадратный корень
Ну и оптимизированный вариант этой-же программы, созданный под влиянием бесед в теме о КВУР:
B001 LBL B B002 RPN B003 SF 10 B004 AX^2+BX+C=0 B005 PSE B006 INPUT A B007 INPUT B B008 INPUT C B009 RCL B // расчёт -b/(2a)->e B010 RCL A B011 / B012 2 B013 / B014 +/- B015 STO E B016 x2 // расчёт D/4 B017 RCL C B018 RCL A B019 / B020 – B021 x<0? B022 GTO B025 B023 SQRT x // извлечение вещественного корня из D/4 B024 GTO B029 B025 +/- // извлечение мнимого корня из D/4 B026 SQRT x B027 i B028 * B029 STO D // вычисление 1-го корня уравнения B030 RCL E B031 + B032 RCL E // вычисление 2-го корня уравнения B033 RCL D B034 – B035 STOP B036 GTO B001
Благодаря способности калькулятора работать с комплексными числами окончательное вычисление корней происходит в одном и том же участке кода.
При желании, слегка урезав функциональность можно ещё сократить длину этой программы, а именно можно удалить 2 (если вcегда стартовать из RPN), 3, 4, 5 команды (чтобы удалить сообщение, напоминающее, что программа решает), а команды 35 и 36 можно заменить одной RTN (чтобы программа не возвращалась на начало, а завершалась), тем самым сократив программу до 31 команды. Но мне так нравится больше.
- basvic's blog
- Log in or register to post comments
- 5976 reads
Comments
Удобства
Попробовал вводить программу на своем HP35s, должен сказать, что по сравнению с МК61/52 преимущества программирования на самом устройстве значительны (сдвиги меток, вставка и удаление команд и т.д.). Контрольная сумма - сколько часов она бы сэкономила при вводе длинных программ на МК...
С другой стороны, конечно, не зная принципов работы с МКхх невозможно было бы работать с HP35s без предварительного изучения толстого руководства.