Как создавать программы на калькуляторе

Напомню, что на прошлом занятии мы сделали калькулятор, который выполняет простейшие арифметические действия и на данный момент у него три поля ввода, а нам необходимо его усовершенствовать и сделать одно поле, которое будет называться «Табло».

Откроем форму обработки и удалим все поля ввода и добавим новое поле «Табло» (Рисунок 1).

Когда начнете удалять все поля, то платформа будет выдавать уведомления, что эти поля привязаны к коду! Вы игнорируйте их и просто удаляйте, так как код будет совершенно иным и с другими полями.

И теперь нужно добавить кнопку равенства, по нажатию на которую будем получать результат в табло (Рисунок 2).

Прежде чем переходить к выполнению действий, давайте запрограммируем нажатие цифр, то есть чтобы каждое число выводилось в поле «Табло».

Откроем форму и начнем с цифры «Ноль». Выделим эту кнопку в командах и создадим процедуру для свойства «Действие» (Рисунок 3).

В самой процедуре пропишем программный код (Рисунок 4).

Уроки Python / Делаем калькулятор первый вводный урок для начинающих, с нуля

Эта процедуры выполняет такое действие, при котором табло становится равным значению, в данном случае цифре ноль.

И таким же образом необходимо создать процедуру (через свойство «Действие») для всех остальных цифр.

Мой программный код выглядит следующим образом (Рисунок 5).

Проверим изменения (Рисунок 6).

Дальше калькулятор должен работать следующим образом:

1. Вводится число.

2. Нажимается действие (например, сложение), происходит обнуление табло и это значение должно записаться в буфер.

3. Вводится еще одно число.

4. Нажимается знак равенства.

5. Результат действия выводится в табло( результат = буфер + значение).

Для дальнейшего программирования калькулятора, сначала необходимо подготовить два дополнительных реквизита:

1. Один для хранения значений, то есть буфер.

2. Второй для выполнения операций, а точнее переменная, которой будет присваиваться значение (имя) операции.

Нужно добавить реквизиты, но перетаскивать их на форму ненужно!

Открываем форму и добавляем реквизит «Буфер» с произвольным типом (Рисунок 7).

Добавляем реквизит «Операция» с произвольным типом (Рисунок 8).

На форму их добавлять не обязательно, потому что они добавлены в обработку и платформа не будет выдавать ошибки, а учитывать, что они присутствуют.

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

На этом статья урока подходит к концу. Попробуйте выполнить все действия, которые описаны в этом уроке. Если что-то не получается, то вы всегда сможете написать вопрос о том, что вам непонятно или вернуться к предыдущим урокам и посмотреть их — ссылки внизу!

Задать вопросы, которые у вас возникли вы можете, написав комментарий или вступить в группу и задать там свой вопрос, а так же можно на канале нажать кнопку «Написать сообщение».

Запустил Minecraft на КАЛЬКУЛЯТОРЕ

Ссылка для вступления телеграм-канал — t.me.Apiscourses

Подписаться в группу ВКонтакте

Прошлые уроки:

На этом все. Жду Вас на следующем занятии.

P.S. Подписывайтесь на мой канал 🙂

программирование программирование 1с 1с предприятие обучение онлайн обучение 1с

Источник: dzen.ru

Программирование на калькуляторе

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

Некоторое время назад я нашел у себя в кладовке старый «Электроника МК-61», принадлежавший моему папе. Естественно, я не мог упустить такой шанс освоить не совсем «стандартное» программирование на калькуляторе. (В случае, если у вас нет программируемого калькулятора, вы можете скачать эмулятор здесь)

Память

Прежде всего необходимо понять, как устроена память в этом калькуляторе. В распоряжении пользователя имеется 4 стековых регистра: X, Y, Z, T. Содержимое регистра X всегда показывается на экране (в режиме расчетов), ввод чисел тоже идет в него. По сути, стековая память после включения калькулятора выглядит так:

Читайте также:
Студент знает 20 из 25 вопросов программы найти вероятность того что студент знает 2

T 0 Z 0 Y 0 X 0

Для помещения чего-либо в стек используется клавиша [В↑] . Она копирует содержимое регистра X в регистр Y, значение регистра Y в Z, Z в T, а значение, находившееся в T теряется. То есть, если перед нажатием на кнопку [В↑] в регистрах были значения

T 5 Z 8 Y 14,5 X 6

то после значения станут

T 8 Z 14,5 Y 6 X 6

Кроме того существует команда, позволяющая циклически сдвинуть все значения регистров: T в Z, Z в Y, Y в X, X в T. Для этого нужно нажать [F] [.] .

Команда [] меняет содержимое регистров X и Y местами.

Команда [CX] стирает содержимое регистра X.

Помимо стековой памяти, в калькуляторе есть 15 адресуемых регистров (RG0-RGE). Для работы с ними используются клавиши [X→П] и [П→X] . Первая команда помещает содержимое регистра X в соответствующий адресуемый регистр. Например, последовательность команд [4] [X→П] [0] помещает в регистр RG0 число 4. Вторая команда, как вы уже догадались, копирует содержимое адресуемого регистра в регистр X. То есть [П→X] [0] поместит в X число 4.

Важно помнить, что после выключения калькулятора значения всех регистров стираются.

Расчеты

Главное, что необходимо знать перед началом расчетов — в МК-61 используется обратная польская нотация (ОПН). Если нам нужно совершить какую-либо унарную операцию, она совершается над числом, находящимся в регистре X. При этом значения других регистров не меняются. Бинарные операции осуществляются над содержимыми регистров Y и X (именно в таком порядке). Значение результата помещается в X, Z помещается в Y, T копируется в Z. Предыдущее значение регистра X помещается в служебный регистр X1. Таким образом, если нам нужно посчитать банальное 2 + 3 (в ОПН 2 3 +), то нужно нажать на калькуляторе клавиши: [2] [В↑] [3] [+] . При этом значения регистров меняются следующим образом:

До всех операций:

T 8 Z 14,5 Y 6 X 0

После нажатия клавиш [2] [В↑] [3] :

T 14,5 Z 6 Y 2 X 3
T 14,5 Z 14,5 Y 6 X 5

Попробуем провести чуть более сложные вычисления, например, (15 + 2 / 5) * 7 + 10. В ОПН это выражение можно записать так: 15 2 5 / + 7 * 10 +. Для того, чтобы это посчитать на калькуляторе, мы должны нажать клавиши: [15] [В↑] [2] [В↑] [5] [/] [+] [7] [*] [10] [+] .

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

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

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

  1. 06 — адрес следующей вводимой команды
  2. 0E, 01, 02 — три последовательные команды, расположенные соответственно по адресам 03, 04, 05.
Основы

Разберем простейшую задачу нахождения площади круга по формуле πr 2 . Для того, чтобы калькулятор решил эту задачу, введем следующие команды в режиме программирования ( [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.

. 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)

Заключение

Конечно, эта статья — далеко не полное руководство по программированию на МК-61. Интересующимся в более глубоком освоении этой темы рекомендую почитать инструкцию (pdf, 6 MB) к этому замечательному калькулятору.

Ссылки

  • Отличный эмулятор многих советских калькуляторов
  • Инструкция по эксплуатации МК-61 (pdf, 6 MB)
  • Интересный сайт о программировании микрокалькуляторов
  • Статья в Википедии о МК-61
  • Графические игры на МК-61

Источник: habr.com

Как создать простое приложение-калькулятор — полное руководство с кодом

Продолжая традицию Android Authority по созданию простых приложений (см. приложение галереи изображений и как создать приложение для SMS), мы собираемся создать простое, но функциональное приложение-калькулятор. Если вы новичок в программировании и никогда раньше не создавали приложения, вам следует ознакомиться с нашим предыдущим руководством по написанию своего первого приложения для Android. В этом руководстве предполагается, что у вас есть хотя бы некоторый базовый опыт написания приложений для Android.

Как и при разработке любой нетривиальной программы, есть несколько способов сделать это, и если вы получите десять разных программисты, вы можете получить десять различных способов написания калькулятора (если только они не являются читателями Android Authority * подмигивают *). Полный исходный код для приложения-калькулятора, описанный ниже, доступен на github для использования, повторного использования и модификации сколько угодно.

Создание проекта

Первое, что нужно сделать do — это создать новый проект, нажав «Начать новый проект Android Studio» или «Файл -> Новый -> Новый проект».

Для этого урока по калькулятору мы выбрали опцию EmptyActivity на экране« Добавить действие на мобильный »и оставили имя действия как MainActivity по умолчанию. . На этом этапе ваша иерархия макета должна выглядеть, как показано на рисунке ниже. У вас есть MainActivity в вашем пакете проекта и файл activity_main.xml в каталоге макета.

Включить привязку данных в вашем проекте

Для нашего примера калькулятора мы настроим наш проект на использование привязки данных. Использование привязки данных в этом приложении просто помогает нам напрямую обращаться к нашим виджетам (Buttons, EditText и TextView), а не находить их с помощью методов findViewById (). Чтобы включить привязку данных, необходимо добавить в файл приложения build.gradle следующую строку.

android

Разработка макета калькулятора

Чтобы включить привязку данных в нашем activity_main Файл .xml требует последнего изменения. Оберните сгенерированный корневой тег (в нашем случае это был RelativeLayout) в тег макета, сделав тег макета новым корневым тегом.

Xml version = «1.0» encoding = «utf- 8 «?> .

Читайте также:
Что такое программа ворлд на компьютере

Тег макета — это то, что предупреждает систему сборки о том, что этот файл макета намеревается использовать привязку данных. Затем система сборки автоматически генерирует класс привязки для этого файла макета. Поскольку целевой XML-файл называется activity_main.xml, система сборки сгенерирует класс с именем ActivityMainBinding, на который вы можете ссылаться в своем приложении, как и на любой другой класс Java.. Имя класса создается из имени файла макета путем использования заглавной буквы каждого слова после подчеркивания, удаления всех подчеркиваний и добавления «Привязки» к имени.

На этом этапе переключитесь на ваш файл MainActivity.java. Создайте частный экземпляр ActivityMainBinding в своем классе, а в методе onCreate () удалите строку setContentView () и замените ее строкой DataBindingUtil.setContentView () в фрагменте кода ниже.

public class MainActivity расширяет привязку AppCompatActivity >

Общие сведения о виджетах макета

В нашем приложении-калькуляторе есть четыре основных элемента. Это:

  1. RelativeLayout — этот элемент управляет расположением или отображением других элементов на экране. RelativeLayout используется для позиционирования дочерних элементов относительно друг друга или самого себя.
  2. TextView — этот элемент используется для отображения текста. Ожидается, что пользователи не будут взаимодействовать с этим элементом. Результат вычислений отображается с помощью TextView.
  3. EditText — это вид TextView, который пользователи могут редактировать и изменять текст. Однако, поскольку калькулятор допускает только фиксированный набор входных данных, мы устанавливаем редактируемый текст как недоступный для редактирования. Когда пользователь нажимает на числа, мы отображаем числа в EditText.
  4. Button — этот элемент позволяет пользователю взаимодействовать и, в идеале, должен реагировать на щелчки пользователя. Мы используем кнопки для чисел и операторы в калькуляторе.

Создание макета калькулятора

Макет калькулятора длинноват. Это связано с тем, что мы должны явно определить и тщательно позиционировать каждую из кнопок в калькуляторе. Приведенный ниже фрагмент является сокращенной версией файла макета activity_main

Внутреннее устройство калькулятора

В нашем калькуляторе есть два значения: valueOne и valueTwo. Эти значения содержат числа, над которыми нужно работать. Оба значения относятся к типу double, поэтому они могут содержать числа с десятичными знаками и без них. Мы устанавливаем valueOne на специальное значение типа Double NaN (не число) по причинам, которые будут более понятны ниже.

private double valueOne = Double.NaN; private double valueTwo;

Этот простой калькулятор может выполнять только операции сложения, вычитания, умножения или деления. Итак, мы определяем четыре статических символа для представления этих операций и переменную CURRENT_ACTION, которая содержит следующую операцию, которую мы собираемся выполнить.

private static final char ADDITION = ‘+’; частный статический окончательный символ SUBTRACTION = ‘-‘; частный статический окончательный символ MULTIPLICATION = ‘*’; частный статический окончательный символ DIVISION = ‘/’; private char CURRENT_ACTION;

Наконец, мы используем класс DecimalFormat для форматирования вывода нашего калькулятора. Конструктор десятичного формата позволяет отображать до десяти десятичных знаков.

decimalFormat = new DecimalFormat («#. ########## «);

Обработка нажатий кнопок (чисел)

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

binding.buttonZero.setOnClickListener (new View.OnClickListener () >);

Обработка нажатий кнопок (операторы)

Обработка щелчков по операторам немного отличается. Мы хотели бы сначала выполнить любые ожидающие вычисления. Поэтому мы определяем метод computeCalculation. В computeCalculation, если valueOne является допустимым числом, мы читаем valueTwo из editText и выполнить текущую операцию в очереди. С другой стороны, если valueOne равно NaN, valueOne присвоит номер в editText.

private void co mputeCalculation () else catch (Exception e) <>>>

Для каждого оператора мы сначала вызываем computeCalculation (), затем устанавливаем CURRENT_ACTION для выбранного оператора, а для оператора равенства ‘=’ мы вызываем computeCalculation (), затем очистите содержимое как valueOne, так и CURRENT_ACTION.

Если вы запустите и воспользуетесь указанным выше приложением, вы заметите некоторые возможные области улучшений, например 1) щелкните оператор, когда editText очищен (т.е. без предварительного ввода числа), 2) разрешите пользователю продолжить вычисления после нажатия кнопки равенства.

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

Источник: binarate.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru