Показать сообщение отдельно
  #2  
Старый 14.10.2012, 19:18
Аватар для Пермский котяра
Пермский котяра Пермский котяра вне форума
гость
 
Регистрация: 14.04.2012
Адрес: Пермский район
Сообщений: 361
Пермский котяра на пути к лучшему
По умолчанию Ответ: основы программирования на калькуляторе

Программирование

Для перехода в режим программирования нужно нажать [F] [ВП]. На дисплее появятся 00. Это означает номер текущей команды. Вообще, программа в МК-61 представляет собой последовательность команд, необходимых для решения задачи. Обычно это арифметические операции, цифры, иногда специальные коды циклов и ветвлений. Всего программа может состоять не более чем из 105 команд, которые нумеруются от 00 до 99. Для ввода команды необходимо нажать соответствующую ей клавишу. Вот таблица соответствия кодов и клавиш калькулятора:


В режиме программирования видно 3 последних введенных операции. Например
02 01 0E 06 на дисплее означает:
06 — адрес следующей вводимой команды
0E, 01, 02 — три последовательные команды, расположенные соответственно по адресам 03, 04, 05.

Основы

Разберем простейшую задачу нахождения площади круга по формуле πr2. Для того, чтобы калькулятор решил эту задачу, введем следующие команды в режиме программирования ([F] [ВП]) (будем считать что радиус окружности находится в регистре RG1):

// Первые две цифры — адрес команды, потом нажимаемые клавиши 00 [П→X] [1] // Вызываем значение регистра RG1 в регистр X (61) 01 [F][*] // Возводим в квадрат радиус (22) 02 [F] [+] // Вызываем в X пи (20) 03[*] // Перемножаем содержимое X и Y (12) 04 [С/П] // Специальная команда для останова (без нее программа не остановится) (50)

Вот и все. Теперь мы должны перейти в режим вычислений с помощью команды [F] [/-/], а затем нужно нажать клавишу [В/О] для перехода к началу программы. Занесем число 5 в регистр RG1 ([5] [X→П] [1]) и нажмем [С/П] для начала выполнения. После того, как калькулятор пройдет все шаги, на экране должно появиться число 78,539815 — площадь круга с радиусом 5.

Безусловный и условный переходы


С помощью команды [БП] (51) можно осуществить безусловный перезод (goto) по нужному адресу. Для этого в режиме программирования нужно нажать [БП] а затем две цифры адреса, по которому мы хотим перейти. Когда калькулятор при выполнении программы дойдет до этого оператора, он продолжит выполнение уже с команды по указанному адресу. Например:
... 10 [F] [-] // 21 11 [БП] // 51 12 [4] [2] // Адрес перехода (42) ... 42 [+] // 10
В данном случае после шага 12 калькулятор перейдет сразу к шагу 42.

Условный переход гораздо полезнее. Для осуществления условного перехода существует 4 команды: [X >= 0], [X < 0], [X = 0] и [X != 0]. С помощью этих команд проверяют содержимое регистра X на выполнения условия. В случае, если условие не выполняется, управление переходит к адресу, указанному после оператора, иначе (если условие выполняется) адрес игнорируется и программа продолжает нормально выполняться далее. Например:
... 09 [F][*] // 22 10 [F] [ШГ←] // "if (X == 0)" (5E) 11 [4] [2] // В случае, если условие ложно, переходим по адресу 42 (42) 12 [+] // В случае, если X = 0 (10) ... 42 [4] // 04

Циклы

Циклы можно реализовать с помощью команд условного перехода, но, кроме того, для организации циклов в МК-61 используются команды L0-L3 ([F] [П→X], [F] [X→П], [F] [БП] и [F] [ПП]). Эти команды оперируют с содержимым регистров RG0-RG3 соответственно. При каждом выполнении команды цикла из содержимого соответствующего регистра вычитается 1 и производится сравнение с нулём. Если содержимое регистра не равно нулю, происходит переход по адресу, записанному после команды цикла, если равно, то происходит переход к команде, следующей за адресом перехода цикла. Чтобы было понятнее, посмотрим на примере. Будем считать факториал числа, находящегося в регистре X.

// В RG0 будем хранить счетчик цикла, в RG1 произведение. 00 [X→П] [0] // Заносим значение X в RG0 - инициализируем счетчик цикла (40) 01 [1] // Заносим 1 в X (01) 02 [X→П] [1] // Инициализируем единицей значение RG1 - произведение (41) 03 [П→X] [1] // Заносим в стек текущее значение произведения (61) 04 [П→X] [0] // Заносим в стек текущее значение счетчика цикла (60) 05[*] // Перемножаем их (12) 06 [X→П] [1] // Заносим результат в произведение (41) 07 [F] [П→X] // L0 - уменьшаем счетчик на единицу и проверяем на равенство нулю. Если не равен... (5Г) 08 [0] [3] // ...переходим к команде по адресу 03... (03) 09 [С/П] // ...иначе - останов (50)
Ответить с цитированием