Техника - молодёжи 1985-06, страница 41Да и выполнения неравенства а =/=0 еще недостаточно, чтобы без опаски вести расчеты по выписанным формулам. Ведь если дискриминант уравнения отрицателен, то оно имеет два комплексных корня: нужно вычислять отдельно действительные части (они у обоих корней одинаковы) и мнимые (они отличаются только знаком). Итак, сравнение коэффициента а с нулем разветвляет нашу блок-схему надвое, и каждая из ветвей также разделяется на два направления. На каждой «развилке», подобно стрелке на железнодорожных путях, ставится блок сравнения. Он изображается ромбом, внутри которого записана операция сравнения. Выходят из ромба две линии, два возможных пути. Один помечен словом «Да» (сюда надо свернуть, если условие выполняется), другой — словом «Нет» (если не выполняется). Чтобы не перегружать блок-схему, мы не стали анализировать практически бессмысленную ситуацию, когда все три коэффициента равны нулю; в этом случае уравнению удовлетворяют любые х. Как видим, исчерпывающий анализ даже привычного квадратного уравнения — дело довольно сложное. Зато достоинства представления алгоритма в виде блок-схемы налицо. Предписания, записанные в ее элементах, понятны и просты, они избавляют составителя программы от необходимости хранить в своей собственной памяти излишнюю информацию. Прежде чем приступить к написанию программы по блок-схеме, последнюю нужно детализировать, заменив словесные описания последовательностью формул. Чтобы различать отдельные части блок-схемы, мы пометили некоторые ее узлы цифрами. Детализация той ветви, что лежит между узлами 11 и 12, уже проведена: сюда надо просто вставить формулы из первого варианта блок-схемы. Для ветви 5—6 никаких формул не надо — вся работа на этом этапе заключается в выводе сообщения: «Корней нет». Остались две ветви. Для одной из них, 3—4, требуется всего одна формула: с х,= -Т. А вот формулы для последней ветви 9—10: В= ~ d=|/~B5=Tc; В х г--*, х1ш — а а Здесь хг их im действительная и мнимая части комплексных корней, которые с помощью так называемой мнимой единицы, величины i—V—1, выражаются формулами: xi=xr -f ixim; х2 = хг — ix im Легко видеть, что в формулах для ветвей 9—10 и 11—12 много общего. Это означает, что одни и те же последовательности команд будут написаны дважды. Можно ли обойтись без такого дублирования? Да. Целесообразно выполнять общие для каких-то ветвей вычисления еще до разделения ветвей Заметим также, что во всех формулах коэффициент с используется со знаком минус. Казалось бы, все равно, какую операцию использовать — сложение или вычитание. Но здесь надо учитывать специфику микрокалькулятора. Перед вычитанием пришлось бы правильно расставить по регистрам стека вычитаемое и уменьшаемое: первое — в X, второе — в У. При сложении расстановка слагаемых значения не имеет, поэтому сложение предпочтительнее. Целесообразно заблаговременно сменить знак коэффициента, лучше всего сразу после его ввода. Все эти соображения учтены в новом варианте блок-схемы. Вот теперь можно уже писать программу. Отметим, ЧхЭ наша блок-схема пригодится при составлении программы для любой ЭВМ и на любом языке программирования. Она подобна записи мелодии, которую затем можно аранжировать для любого инструмента с учетом его специфики... Специфика микрокалькулятора проявляется, в частности, в двух моментах. Во-первых, у него разделены области памяти для хранения программ и данных. Во-вторых, IIMK оперирует только цифрами —■ буквенных символов в его языке нет. В силу первой особенности приходится вручную распределять информацию по регистрам, а вторая заставляет шифровать цифрами сообщения об особенностях решения (в нашем случае — о количестве и природе корней). С распределением переменных по регистрам справляемся без труда. Предварительно намечаем такой вариант: а A; b В; с (ci = —с) С; х, (хг) 1 (X); x2(xlm)->2(Y). Почему этот вариант предварительный? Да потому, что в процессе составления программы могут понадобиться дополнительные регистры или, наоборот, какие-либо из запланированных окажутся лишними. Придумать систему шифров для необходимых сообщений тоже не- [НАЧАПО ТГ /ВводаДс/ ВЫЧИСЛЕНИЕ КОРНЯ ЛИНЕЙНОГО УРАВНЕНИЯ И ЕГО ВЫВОД ВЫЧИСЛЕНИЕ ДЕЙСТВИТЕЛЬНОЙ И МНИМОЙ ЧАСТЕЙ КОМПЛЕКСНЫХ КОРНЕЙ и их вывод ВЫЧИСЛЕНИЕ ДВУХ ДЕЙСТВИ ТЕЛЬНЫХ КОРНЕЙ И ИХ ВЫВОД вывод , КОРН /КОМПЛЕКСНЫЕ, 10 12 одГ7 и й/ ,_ 22S/ / вывод: / /Dl , ' / /ДВА ДЕЙСТВИ-/ /Вывод / /тельных корня/ / Ха , X j m / j /Вывод х, Да/ |