Техника - молодёжи 1986-09, страница 38

Техника - молодёжи 1986-09, страница 38

чения аргумента по предыдущему. Теперь, начав работать, программа вычислит первое значение выражения (при начальном значении аргумента) и найдет следующее значение независимой переменной. И все? Пока все, ведь чтобы определить значение выражения во второй точке, надо вернуться в то место программы, где стоят команды вычисления функции. Это можно сделать с помощью передачи управления. Тогда программа найдет второе значение выражения и вычислит следующее значение аргумента. Затем управление опять передается на вычисление функции и т. д. Но что же получилось? Программа «бегает» по кругу и никак не может из него выйти, ведь «у кольца начала нет и нет конца». Как говорят специалисты, программа «зациклилась». Собственно, другого и быть не могло — мы не указали, сколько раз надо выполнить наш цикл вычислений. Как же найти, где кольцо кончается?

Для этого используют так называемый счетчик. В памяти машины выделяется ячейка, в которой записывается число проделанных повторений цикла, а в программу вставляется команда, прибавляющая к содержимому счетчика единицу после каждого выполнения тела цикла (так называются многократно повторяемые команды). Как только число в счетчике становится равным заданному, программа выходит из цикла и выполняет следующие команды. Возможен и счетчик, работающий на вычитание, когда после каждого повтора его содержимое уменьшается на единицу.

Но это, можно сказать, «ручное» программирование цикла, так как мы сами выписываем команды передачи управления, организуем счетчик В языках высокого уровня, как уже говорилось, есть специальные операторы цикла, облегчающие труд программиста, которому надо только после оператора цикла указать число повторений и выписать само тело цикла. Всю структуру программы с необходимыми передачами управления машина создаст себе сама. Есть и более сложные циклы, когда выход из них определяется выполнением того или иного арифметического или логического условия. Однако не следует думать, что операторы цикла — достояние лишь компьютеров.

Даже у нашего помощника БЗ-34 есть команды, задающие цикл: FLO, FL1, FL2, FL3. Любая из них ставится после тела цикла, а сразу за ней указывается адрес первой команды тела цикла. Предварительно в счетчик — соответствующий регистр (0, 1, 2 или 3) — записывается нужное число повторений. Заметим, что здесь счетчик работает на вычитанйе — когда его содержимое равно единице, программа выходит из цикла.

Раз уж мы заговорили о ПМК, пора по традиции обратиться к блок-схеме очередной игры. Она называется «Урожай». О том, как в нее играть, подробно рассказано в статье «Что посеешь, то и пожнешь» (стр. 36).

Достаточно беглого взгляда на рисунок, чтобы сказать: «Что-то мне знакомое, так-так». В самом деле, схема закольцована. Значит, и здесь цикл? Конечно, ведь сама игра, по сути, циклическая. «Полевые работы», «сбор даров природы» и прочие хозяйственные заботы повторяются «из года в год», и если вам повезет, то вы сумеете «пройти» по нашей схеме десятки оборотов. При нерациональном ведении хозяйства игра закончится гораздо раньше.

Вообще, любая игровая программа «по большому счету» — циклическая. Вы вводите управляющее воздействие — ПМК выдает результат, и опять все сначала Может быть, именно поэтому некоторые читатели не нашли конца в алгоритме «Лунолет-2». Так, В. Та-лалаев из Киева пишет: «Данный алгоритм пригоден только для калькулятора! С точки зрения алгоритмических языков он абсолютно неверен. По самой своей сути алгоритм должен иметь два обязательных элемента: начало и конец. Начало у «Лунолета-2» видно: это ввод... А конца-то у него нет! То есть если по такому алгоритму написать программу для ЭВМ, то машина... НИКОГДА НЕ КОНЧИТ ИГРАТЬ».

Ну что ж, в чем-то наш читатель прав. В «Лунолет-2» действительно можно играть очень долго. Ведь ПМК не отличает промежуточных остановов от окончательного, все они реализованы одним и тем же блоком вывода. А право определить момент завершения игры предоставляется самому игроку, он оценивает качество посадки. При перенесении же программы на ма

шину не составит труда поручить роль эксперта компьютеру. С чем, кстати, успешно справились читатели (в том числе и сам В. Талала-ев), приславшие в редакцию версии программы «Лунолет» на языках ФОРТРАН, БЕЙСИК и т. д. Кстати, десятиклассник Андрей Михняк из Челябинска составил программу для игры в реальном масштабе времени.

Но вернемся к программе «Урожай». Не будем подробно останавливаться на ее работе — все понятно из блок-схемы и описания в КЭИ. Отметим только, что внутри программы есть цикл. Работает он следующим образом. После ввода исходных данных и проверок ПМК определяет суммарную посевную площадь, подсчитывает прибыль (естественно, сначала она равна нулю), задает номер поля, с которого начинается ваша хозяйственная деятельность. В связи с особенностями конкретного калькулятора (счетчик работает на вычитание) первым «обрабатывается» третье поле. На индикаторе загораются номер поля и суммарная посевная площадь. Теперь ваш ход: вы вводите площадь, которую отдаете под культуру № 3. После проверок ПМК находит площадь, свободную для посевов двух других культур (поля №1 и № 2), затраты на возделывание третьей культуры, оставшуюся сумму денег и прибыль, которую вы получите, собрав урожай с третьего поля. Обратите внимание: прибыль зависит не холько от затрат (то есть посевной площади), но и от того, какую культуру вы посеяли. Причем это влияние может быть как положительным, так и отрицательным — третья культура может изменить коэффициент, стоящий в скобках, на '/э, вторая — на 1/6 и первая — на 1/з. Затем следует «финансовая» проверка. Если результат положителен, то можно приступать к «возделыванию» следующей культуры. Калькулятор уменьшает номер поля на единицу, и мы вновь оказываемся в начале цикла, но теперь i—2 и пора задавать площадь под вторую культуру. Проделав цикл три раза, программа выходит из него и приступает к дальнейшей работе, а нам остается, следуя пожеланиям читателей, написать последнее слово очередного занятия алгоритмической гимнастикой.

Конец

35