Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
В предыдущем разделе приведен пример линейной программы на языке машинных команд УК "Нейман". Теперь рассмотрим задачу, решение которой требует составления циклической программы. Задача. Сколько различных N-буквенных слов можно составить путем перестановок данных N букв ? Из комбинаторики известно, что количество различных комбинаций из N предметов, получаемых изменением их порядка, называется числом перестановок. Это число выражается функцией от N, которая называется факториалом и записывается так: N! Читается : "N факториал". Для любого натурального N значение N! вычисляется как произведение последовательности натуральных чисел от 1 до N. Например:
1! = 1
2! = 1*2 = 2
3! = 1*2*3 = 6
4! = 1*2*3*4 = 24
5! = 1*2*3*4*5 = 120
и т.д.
Теперь вернемся к формулировке задачи. Если N обозначает количество букв, а F - количество слов из этих букв, то постановка задачи выглядит так:
Дано: N Расчетная формула:
Найти: F F = N!
Рассмотрим два варианта алгоритма решения этой задачи: первый вариант с циклом-пока, второй вариант с циклом-до. Запрограммируем оба алгоритма.
Опишем на алгоритмическом языке первый вариант алгоритма:
алг ЗАДАЧА
цел F,N,R
нач ввод N
F:=1
R:=1
пока R<=N
нц
F:=F*R
R:=R+1
кц
вывод F
кон
Распределение памяти. Составление программы начинается с распределения памяти под данные. Поскольку команды программы всегда располагаются, начиная с 0-й ячейки, то данные можно располагать только после окончания программы. Обычно вначале помещаются константы, затем – переменные. В программе будут использованы одна константа (1), три переменные (N,F,R) и еще одна дополнительная переменная (Q), которая в алгоритме не отражена.
Величина 1 N F R Q
Ячейка 28 2C 30 34 38
В этой программе кроме уже знакомых команд используются две команды управления. Команда безусловного перехода имеет вид: Эта команда производит передачу управления к команде программы по адресу А3. Содержимое A1 и А2 значения не имеют. В нашей программе команда безусловного перехода стоит в ячейке 1C. Ее выполнение приводит к тому, что следующей будет выполняться команда в ячейке 0C. Таким образом происходит возврат управления к началу цикла. Команда условного перехода: Эта команда передает управление к ячейке программы А3, если значение регистра-признака W равно 1. Если W=0, то управление перейдет к следующей команде.
Второй вариант алгоритма с циклом с постусловием:
алг ЗАДАЧА 3
цел F,N
нач ввод N
F:=1
повторять
F:=F*N
N:=N-1
до N=0
вывод F
кон
В программе будут использоваться всего две переменные и константа 1. Выделим под них память:
Величина 1 F N
Ячейка 1С 20 24
Запишем программу на ЯМК.
Обратите внимание на то, что в этой программе не понадобилась команда безусловного перехода. Не понадобилось также дополнительной переменной Q. Управлением цикла занимается команда условного перехода в 10-й ячейке. Пока значение N>0 эта команда передает управление на ячейку 08. Когда в результате выполнения команды в ячейке 0С получится нуль, признак W станет равным нулю и цикл закончит работу. Управление передастся в ячейку 14. Второй вариант программы вместе с данными занимает 10 ячеек, тогда как первый вариант - 15 ячеек. © И.Г.Семакин, 2001 Полный текст статьи в виде документа MS Word можно загрузить здесь. © Оформление Web-страницы Е.А.Еремин, 2001 |