Техника - молодёжи 1985-06, страница 42трудно. Скажем, появление на индикаторе нуля означает: «Корней нет», появление единицы — «Имеется один корень» и т. д. Часто так и поступают. Однако у этого метода есть существенный недостаток: можно спутать шифрованное сообщение с результатом вычислений. К счастью, есть и другой путь. Мы уже знаем, что в микрокалькуляторе используются и такие символы для записи шестнадцатиричных чисел, которые не спутаешь ни с одной десятичной цифрой. Оказывается, есть возможность, формально выполняя некоторые «противозаконные» операции, получать на индикаторе и запоминать в адресуемых регистрах комбинации этих символов с обычными цифровыми. Их-то и удобно использовать в качестве сообщений; как их получать, скажем позже, а пока договоримся использовать следующие шифры: Е00 — «Корней нет», Е01 — «Один корень», Е02 — «Два действительных корня» И Г. — «Корни комплексные». Для хранения шифров тоже нужны регистры. Поэтому в дополнение к предварительному распределению памяти запишем: Е00->0, Е02-^4, E0W3, Г. (Цифрами 0, 3, 4, 5, как и раньше, обозначены номера адресуемых регистров.) Далее нужно продумать организацию ввода и вывода информации Можно, конечно, вводить значения коэффициентов сразу в соответствующие адресуемые регистры в режиме вычислений, а результаты читать, вызывая на индикатор содержимое нужных регистров после останова, Однако большое число требуемых для этого ручных операций и необходимость постоянно помнить, что куда вводить и что откуда выводить, резко увеличат общее время получения результата, да и возможность ошибок возрастет. Лучше организовать ввод и вывод так, чтобы введенные числа автоматически рассылались по нужным регистрам и чтобы для прочтения результатов приходилось бы нажимать как можно меньше клавиш. Остановимся на такой структуре ввода-вывода: коэффициенты вводятся в естественной последовательности — а, Ь, с; окончанием каждого ввода является нажатие клавиши С/П; после останова на индикаторе появляется шифрованное сообщение о характере результата, затем, после нажима С/П и следующего останова, высвечивается один корень, а после нажима клавиши ХУ — второй (если он есть). ч- Все технические требования к программе изложены, можно приступать непосредственно к ее составлению. Рекомендуем записывать программу так, как показано на рисунке, — указывать, кроме самих команд, их адресов и кодов, еще и содержимое регистров стека, хотя бы тех, которые могут понадобиться в дальнейшем Желательно оставить еще одну колонку для кратких примечаний. Они помогут ориентироваться в программе — иной раз легче написать новую, чем разобраться в старой. Мы же в первом примере используем подробные примечания. «Ввод а». Эта операция выполняется перед пуском программы. Величина а набирается на клавиатуре. Набор заканчивается нажимом клавиши С/П. 00. Запись а в адресуемый регистр А. 01. Останов для ввода Ь. Набираем значение коэффициента на клавиатуре и снова нажимаем С/П. 02. Подготовка стека для приема значения с. 03. Введен третий параметр уравнения, коэффициент с. Ввод закончен. Теперь клавиша С/П запускает программу на счет. 04. Вычисляем Ci = —с. (Внимание: задавать с в экспоненциальном виде нельзя; в этом случае команда 04 изменит знак не мантиссы, а показателя.) 05. Проще всего вызвать а из «собственного» регистра А. 06—07. В стеке ничего не меняется. Мы лишь проверили, равно ли нулю содержимое регистра X. Если да, то есть если уравнение вырожденное, будем выполнять команду по адресу 08 (ветвь Ai—Bj). Если нет — перейдем к команде, записанной по адресу 23 (ветвь А2—В2). 08—09. Две команды использованы только для того, чтобы вернуть в регистр X значение Ь. Казалось бы, можно обойтись и одной — ИП В. Но нужно «помнить о будущем» — скоро придется делить Ci на Ь, а при таком распределении чисел в стеке, как теперь, для этого все подготовлено. 10—11. Если Ь=0, то перейдем к команде по адресу 19 (на ветвь 5— 6), иначе — по адресу 12. 12—18. Вычисления по ветви 3—4.
40 |