Как программировать калькулятор
Ввод чисел, операций и команд в микрокалькулятор осуществляется нажатием соответствующих клавиш. Многие клавиши имеют двойную и тройную символику. Цвет символов, изображённых над клавишами, соответствует цвету клавиш f и k . Ввод функции, символ которой изображён на клавишной панели, осуществляется следующим образом: сначала нажимают клавишу f или k , затем клавишу, над которой изображён символ вводимой функции. Назначение клавиш приведено в табл. Назначение функциональных клавиш и Назначение клавиш, используемых при программировании.
k -функции имеются только в МК-52/МК-61.
| Клавиши | Назначение | Код |
|---|---|---|
| f | Переход на вторую символику | |
| k | Переход на вторую символику. Косвенный переход и косвенное обращение к адресуемым регистрам | |
| 0 — 9 |
Занесение цифр от 0 до 9 в регистр X | 00 — 09 |
| • | Занесение десятичной запятой | 0- |
| BA | Разделение водимых чисел и передвижение информации в стеке | 0E |
| cx | Сброс содержимого регистра X | 0D |
| + | Сложение содержимого регистра Y с содержимым регистра X и передача результата в регистр X | 10 |
| — | Вычитание из содержимого регистра Y содержимого регистра X и передача результата в регистр X | 11 |
| × | Умножение содержимого регистра Y на содержимое регистра X и передача результата в регистр X | 12 |
| ÷ | Деление содержимого регистра Y на содержимое регистра X и передача результата в регистр X | 13 |
| = | Обмен содержимым между регистрами X и Y | 14 |
| /-/ | Смена знака числа и порядка | 0L |
| ВП | Подготовка ввода порядка | 0C |
| f 10 x | Вычисление степенной функции 10 x | 15 |
| f e x | Вычисление показательной функции e x | 16 |
| f lg | Вычисление десятичного логарифма | 17 |
| f ln | Вычисление натурального логарифма | 18 |
| f sin | Вычисление функции синуса | 1C |
| f cos | Вычисление функции косинуса | 1D |
| f tg | Вычисление функции тангенса | 1E |
| f sin -1 | Вычисление обратной функции синуса | 19 |
| f cos -1 | Вычисление обратной функции косинуса | 1- |
| f tg -1 | Вычисление обратной функции тангенса | 1L |
| f ) | Вычисление квадратного корня | 21 |
| f 1/x | Вычисление обратной величины X | 23 |
| f x 2 | Возведение числа X в квадрат | 22 |
| f x y | Возведение числа X в степень Y | 24 |
| f π | Вызов константы π=3,1415926 | 20 |
| f 0 | Кольцевое перемещение информации в стеке | 25 |
| f Bx | Восстановление предыдущего результата | 0 |
| f CF | Сброс перехода на вторую символику | |
| ; r | Запись содержимого регистра X в регистр RGr. Номера и коды регистров см. в таблице Номера и коды регистров | 4r |
| : r | Вызов в регистр X содержимого регистра RGr. Номера и коды регистров см. в таблице Номера и коды регистров | 6r |
| k [x] | Выделение целой части числа | 34 |
| k | Выделение дробной части числа | 35 |
| k max | Определение максимального значения одного из двух чисел, находящихся в регистрах X и Y | 36 |
| k |x| | Определение абсолютного значения числа | 31 |
| k ЗН | Определение знака числа | 32 |
| k →°′″ | Перевод угловых (временных величин), выраженных в градусах (часах), минутах, секундах и долях секунды, в значения, выраженные в градусах (часах) и долях градуса (часа) | 2- |
| k ←°′″ | Перевод угловых (временных величин), выраженных в градусах (часах) и долях градуса (часа) в значения, выраженные в градусах (часах), минутах, секундах и долях секунды | 30 |
| k →°′ | Перевод угловых (временных величин), выраженных в градусах (часах), минутах, и долях минуты, в значения, выраженные в градусах (часах) и долях градуса (часа) | 26 |
| k ←°′ | Перевод угловых (временных величин), выраженных в градусах (часах) и долях градуса (часа) в значения, выраженные в градусах (часах), минутах, и долях минуты | 33 |
| k СЧ | Генерация псевдослучайного числа от 0 до 1 | 3L |
| k ∧ | Поразрядное логическое умножение | 37 |
| k ∨ | Поразрядное логическое сложение | 38 |
| k ⊕ | Логическая операция «Исключающее ИЛИ» | 39 |
| k ИНВ | Логическая операция «Инверсия» | 3- |
Примечание: для команд, работающих с регистрами, вторая цифра кода ( r ) совпадает с номером регистра из таблицы Номера и коды регистров.
Регистры калькулятора
Для хранения исходных данных и промежуточных результатов в микрокалькуляторе предусмотрена регистровая память, состоящая из 15 (14 в Б3-34 и МК-54) адресуемых регистров RG0, RG1-RG9, RGa, RGb, RGc, RGd, RGe (отсутствует в Б3-34 и МК-54).
| Номер регистра | Код |
|---|---|
| RG0 — RG9 |
0 — 9 |
| RGa | — |
| RGb | L |
| RGc | C |
| RGd | D |
| RGe | E |
Запись числа в адресуемые регистры осуществляется из регистра X после нажатия клавиши x→п и одной из клавиш 0 — 9 , a , b , c , d , e , совпадающих с индексом адресуемого регистра. При этом число, переданное в адресуемый регистр, сохраняется в регистре X
Вызов числа адресуемого регистра в регистр X осуществляется после нажатия клавиши п→х и клавиш с индексом адресуемого регистра.
Кроме адресуемых регистров в микрокалькуляторе имеется стековая память, состоящая из четырёх регистров: X, У, Z и Т. Регистры X и У — операционные.
В микрокалькуляторе имеется регистр предыдущего результата XI, который предназначен для записи числа, находящегося в регистре X до выполнения операции.
Работа калькулятора в автоматическом режиме
Вычисления на микрокалькуляторе производятся в режиме «Автоматическая работа». Этот режим автоматически устанавливается после включения питания микрокалькулятора или после нажатия клавиш f АВТ , если до этого микрокалькулятор находился в режиме «Программирование».
Выполнение операций
Одноместные операции выполняются с числом, находящимся в регистре X. Результат одноместной операции записывается в регистр X, при этом содержимое остальных регистров не изменяется.
Ввод аргумента при вычислении прямых тригонометрических функций и вычисление аргумента для обратных тригонометрических функций могут осуществляться в радианах, градах или градусах в зависимости от положения переключателя «Р/ГРД/Г» (радиан/град/градус).
Примечание: градусы, грады и радианы находятся в следующей зависимости: 360° = 400 град = 2π радиан.
Для выполнения двухместных операций используется обратная польская запись при которой сначала вводятся оба операнда, а затем — операция. Ввод чисел в микрокалькулятор осуществляется обычным способом. Чтобы отделить первое число от второго, нажмите клавишу BA .
Если на индикаторе высвечивается результат предыдущих вычислений, то набор на клавиатуре нового числа автоматически передвигает информацию из регистра X в регистр У. Таким образом, результат вычисления предыдущей операции может участвовать в качестве второго числа при выполнении последующих зачислений.
При выполнении некорректной операции на индикаторе высвечивается сигнал ошибки EDD0D
Использование стековой памяти
В стековую память входят четыре регистра X, У, Z и T, которые организованы по принципу магазинной памяти, когда последовательно записанная информация может быть считана только в последовательности, обратной последовательности записи (последнее записанное число является первым).
После включения микрокалькулятора регистры стека находятся в нулевом состоянии:
| Р-р | Состояние | Примечание |
|---|---|---|
| T | 0 | |
| Z | 0 | |
| Y | 0 | |
| X | 0 | Всегда индицируется |
Ввод чисел всегда производится в регистр X. Информация в регистрах стека смещается вверх: T — теряется, Z→T, Y→Z, X→Y, X — введённое значение.
| Р-р | Состояние | Клавиша | Состояние |
|---|---|---|---|
| T | 1 | 5 | 2 |
| Z | 2 | 3 | |
| Y | 3 | 4 | |
| X | 4 | 5 |
Нажатие клавиши BA передаёт копию числа из регистра X в регистр У, а также содержимое регистра У в регистр Z и содержимое регистра Z в регистр Т. При этом содержимое регистра X сохраняется, а регистра Т исчезает.
| Р-р | Состояние | Клавиша | Состояние |
|---|---|---|---|
| T | 1 | BA | 2 |
| Z | 2 | 3 | |
| Y | 3 | 4 | |
| X | 4 | 4 |
Нажатие клавиши = меняет местами содержимое регистров X и Y, не затрагивая Z и T.
| Р-р | Состояние | Клавиша | Состояние |
|---|---|---|---|
| T | 1 | = | 1 |
| Z | 2 | 2 | |
| Y | 3 | 4 | |
| X | 4 | 3 |
Нажатие клавиши f 0 вызывает циклическое перемещение информации в стеке T→Z, Z→Y, Y→X, X→T.
| Р-р | Состояние | Клавиша | Состояние |
|---|---|---|---|
| T | 1 | f 0 | 4 |
| Z | 2 | 1 | |
| Y | 3 | 2 | |
| X | 4 | 3 |
При выполнении одноместных операций микрокалькулятор оперирует с числом, находящимся в регистре X, при этом содержимое регистров У, Z и Т сохраняется, а число, находившееся до выполнения операции в регистре X, передаётся в регистр предыдущего результата (регистр XI). Результат одноместной операции передаётся в регистр X.
При выполнении двухместных операций микрокалькулятор оперирует с числами, находящимися в регистрах X и У. При этом информация в регистрах стека передвигается (опускается) следующим образом: T→Z, Z→Y, X→XI, результат операции→X.
| Р-р | Состояние | Клавиша | Состояние |
|---|---|---|---|
| T | 1 | × | 1 |
| Z | 2 | 1 | |
| Y | 3 | 2 | |
| X | 4 | 12 |
Работа калькулятора в режиме «Программирование»
В режиме «Программирование» микрокалькулятор устанавливается после нажатия клавиш f ПРГ .
Общие сведения
Для записи программ в микрокалькуляторе имеется специальная программная память, состоящая из 105 (98 в Б3-34/МК-54) ячеек, и стек возврата, состоящий из пяти разрядов.
При нажатии клавиш в режиме «Программирование» двузначный код операций, команд и цифр, присвоенный данной клавише или ее комбинации с клавишами f , k , X→П , П→x , записывается в специальную память программы. Коды операций см. в табл. Назначение функциональных клавиш и Назначение клавиш, используемых при программировании.
Последовательность вводимых операций и команд, необходимых для решения задачи, представляет собой программу.
Первой ячейке программной памяти присвоен номер 00, последней — 104 (97 в Б3-34/МК-54). При записи программы в микрокалькулятор двузначный код (шаг программы) в программной памяти занимает одну ячейку. Местонахождение кода в программной памяти определяется адресом. Для обозначения адресов от 00 до 99 используются соответствующие числа, а для адресов от 100 до 104 старшие две цифры обозначаются знаком минус (например, адрес 100 обозначается как «-0»).
Для управления последовательностью записи и для выполнения команд в микрокалькуляторе имеется счётчик адреса. Этот счётчик может быть установлен на любой начальный адрес (от 00 до 104). При записи программы введение в программную память команд (операций) увеличивает содержимое счётчика на 1. Для того, чтобы последовательность выполнения команд отличалась от последовательности записи команд в программе, чтобы отдельные части программы повторились, чтобы изменение последовательности исполнения происходило в зависимости от промежуточных результатов вычисления, в микрокалькуляторе имеются команды, с помощью которых изменяется содержимое счётчика адреса. Эти команды называются командами переходов. Изменение содержимого счётчика адреса происходит по адресу перехода, записанному либо в программной памяти, либо в адресуемых регистрах, либо в пятиразрядном стеке возврата — специальной области памяти. Если адрес перехода записан в адресуемом регистре, то такая адресация называется «косвенной». Косвенная адресация используется также при обращении к адресуемым регистрам. В этом случае в программе вместо прямого указания номера адресуемого регистра записывается косвенный номер, т.е. номер того адресуемого регистра, в котором хранится номер вызываемого.
В режиме «Программирование» индикатор используется для отображения кодов трёх последовательных команд из программной памяти и текущего состояния счётчика команд, т.е. адреса, по которому будет записана следующая команда. Например, на индикаторе отображено
- код 06 — текущее состояние счётчика адреса;
- коды 0E , 01 , 02 — три последовательные команды, расположенные соответственно по адресам 03, 04, 05.
Этапы вычислений по программам
- программирование задачи;
- ввод программы в память и редактирование программы;
- отладка программы;
- занесение исходных данных и выполнение программы.
Для составления разветвляющихся программ и многократного прохождения отдельных частей программ (подпрограмм) используются команды переходов (прямые и косвенные), команды косвенной индикации вызова и записи, команды организации циклов. После команд переходов (прямых) и команд организации циклов в составляемой программе должен стоять адрес перехода. Адрес перехода для косвенной команды содержится в самой команде. Для прямых и косвенных команд адреса переходов 00-99 записываются с помощью соответствующих цифровых клавиш 0 — 9 . Адреса переходов 100 — 104 используются только для прямых команд и записываются с помощью клавиши • , которая соответствует цифре 10 и одной из клавиш 0 — 4 .
Наличие в микрокалькуляторе стека возврата предусматривает создание подпрограмм внутри программ. Глубина подпрограмм определяется разрядностью стека и равна пяти. Регистр стека работает по системе: первым зашёл, последним вышел.
Для автоматического останова и индикации результата вычислений программа обязательно должна содержать команду останова С/П .
Программа решения задачи может начинаться с адреса 00 или с любого произвольного адреса. Для занесения программы с нулевого адреса необходимо в режиме «Автоматическая работа» нажать клавишу очистки программного счётчика В/О и перейти в режим «Программирование», нажав клавиши f ПРГ . На индикаторе в этом случае индицируется адрес счётчика 00, с которого будет вводиться программа. Вводят программу, нажимая клавиши, записанные в программе. Для занесения программы с произвольного адреса необходимо в режиме «Автоматическая работа» нажать клавишу БП , а затем клавиши, которые обеспечат переход на требуемый адрес. После перехода в режим «Программирование» на счётчике адресов команд установится адрес, с которого должна вводиться программа.
Если при вводе программы допущена ошибка, то для ее исправления необходимо перейти на адрес, по которому записана ошибочная команда. Для этого можно воспользоваться клавишей > или < , если адрес ошибочной команды находится недалеко от текущего. При каждом нажатии этих клавиш содержимое счётчика адресов команд соответственно увеличивается или уменьшается на единицу. Причём, если ошибка допущена в адресе перехода, то для её исправления необходимо сдвинуть информацию на два шага и повторить ввод команды и следующий за ней адрес перехода. При большой разнице адресов ошибочной и текущей команд нужно воспользоваться командой безусловного перехода. Для этого необходимо перейти в режим «Автоматическая работа», нажать клавишу БП , а затем клавиши, которые обеспечат переход на нужный адрес. После установки режима «Программирование» на индикаторе появится адрес ошибочной команды. Исправьте ошибку, нажав клавишу требуемой операции либо команды.
Если необходимо исключить какую-либо команду из программы, перейдите на адрес исключаемой команды, а затем нажмите клавиши k НОП . В программную память запишется команда «Нет операции», по которой при вычислении ничего не выполняется.
Отладка программы производится в режиме «Автоматическая работа» путём анализа выполнения отдельного шага программы. Выполнение программы по отдельной команде осуществляется нажатием клавиши ПП в режиме «Автоматическая работа». Для отладки программы перейдите в режим «Автоматическая работа», нажав клавиши f АВТ , занесите исходные данные для работы программы, установите начальный адрес записанной программы, нажмите клавишу ПП и проанализируйте выполнение каждого шага программы. При пошаговом просмотре выполнения программы следует учитывать, что выполнение команды перехода и установка адреса перехода осуществляются за один шаг программы.
Для выполнения программы в режиме «Автоматическая работа» наберите на клавиатуре исходные данные и занесите их в необходимый адресуемый регистр памяти (RG0 — RGe) либо в регистр стека (X, У, Z, T). Установите адрес начала программы и пустите программу на счёт, нажав клавишу ПП для пошагового прохождения команд программы либо клавишу С/П для автоматического выполнения последовательности шагов программы.
Нажатие клавиши С/П сопровождается подсветкой индикатора, что свидетельствует о выполнении программы. Время выполнения программы зависит от её длины и характера вычислений. В случае зацикливания, т.е. бесконечного повторения некоторого участка программы, необходимо остановить её, нажав клавишу С/П , а затем проверить программу и устранить причину зацикливания.
После выполнения программы прочитайте результат на индикаторе.
Команды переходов
Команда безусловного перехода реализуется клавишей БП . Эта команда прерывает естественный порядок выполнения команд программы и осуществляет переход к выполнению команды, указанной в адресе перехода.
Команды перехода по условию (Х≥0, Х f и клавишей условия ( Х≥0 , Х , X=0 , X≠0 ). С помощью этих команд проверяют содержимое регистра X на выполнение заданного условия. Если условие не выполняется, то следующей по программе будет исполнена команда, адрес которой указан непосредственно за командой условного перехода. Если условие выполняется, то следующей по программе будет исполнена команда, записанная в программе после адреса перехода. При этом адрес перехода не воспринимается.
Команда перехода на подпрограмму реализуется клавишей ПП . С помощью этой команды реализуется переход на подпрограмму по адресу, указанному непосредственно после команды перехода, и запоминается адрес следующей команды в стеке возврата.
Команда возврата из подпрограммы реализуется клавишей В/О . С помощью этой команды из стека возврата производится вызов адреса, записанного по команде перехода на подпрограмму ПП , и осуществляется переход по этому адресу к выполнению шагов основной программы.
Команда косвенного безусловного перехода по модифицированному адресу реализуется клавишами k , БП и клавишей адресуемого регистра ( 0 — 9 , a , b , c , d , e ). При исполнении этой команды производится модификация адреса, хранящегося в адресуемом регистре, индекс которого входит в команду, и переход к исполнению команды, записанной по новому (модифицированному) адресу.
Команды косвенных переходов по условию реализуются клавишей k , клавишей условия ( Х≥0 , Х , X=0 , X≠0 ) и клавишей адресуемого регистра ( 0 — 9 , a , b , c , d , e ). С помощью этой команды проверяют содержимое регистра X на выполнение заданного условия. Если условие не выполняется, то происходит модификация адреса, хранящегося в адресуемом регистре, индекс которого входит в команду, и осуществляется переход к выполнению команды, записанной по модифицированному адресу. Если условие выполняется, то осуществляется переход к выполнению следующей команды. При этом адрес, записанный в адресуемом регистре, не модифицируется.
Команда косвенного перехода на подпрограмму реализуется клавишами k , ПП и клавишей адресуемого регистра ( 0 — 9 , a , b , c , d , e ). С помощью этой команды производится модификация адреса, хранящегося в адресуемом регистре, индекс которого входит в команду, запись следующей команды в стек возврата и переход к исполнению команды, записанной по модифицированному адресу.
Организация циклов
Команды организации циклов реализуются клавишами f , L0 (либо L1 , L2 , L3 ). При нажатии клавиши L0 (либо L1 , L2 , L3 ), происходит обращение к регистру RG0 (RG1, RG2, RG3). При каждом обращении к регистру из содержимого этого регистра вычитается 1 и производится анализ его содержимого на нуль. Если содержимое регистра не равно нулю, то осуществляется переход к выполнению команды, записанной по адресу перехода, следующему за командой цикла, если равно нулю, то выполняется команда, записанная в программе за адресом перехода.
Косвенное обращение к регистрам
Команда косвенной записи в регистр реализуется клавишами k , x→П и клавишей адресуемого регистра ( 0 — 9 , a , b , c , d , e ). С помощью этой команды производится модификация содержимого адресуемого регистра, индекс которого входят в команду, и запись содержимого регистра X в регистр, соответствующий полученному модифицированному коду.
Команда косвенной индикации вызова реализуется клавишами k , П→x и клавишей адресуемого регистра. С помощью этой команды производится модификация содержимого адресуемого регистра и вызов в регистр X содержимого того регистра, который соответствует модифицированному коду
Программа решения квадратных уравнений
Рассмотрим программу для решения квадратных уравнений вида ax 2 + bx + c = 0
Выполнение вычислений
Перед выполнением вычислений необходимо коэффициенты a, b, c занести в регистры a , b , c соответственно. После останова в регистре X находится один корень, в регистре Y — второй. Если уравнение не имеет действительных корней, на экране высветится
Как написать калькулятор на C, C++, Java и Python
Написать программу «Калькулятор» на четырех языках программирования. Готовый код представлен ниже, компилируйте, дорабатывайте, если есть желание и развивайтесь в сфере программирования.
Как написать калькулятор на C++
Чтобы сделать простой калькулятор в программировании на C++, который выполняет четыре основных математических операции ( сложение, вычитание, умножение и деление ) в зависимости от выбора пользователя, используйте регистр переключения, чтобы определить оператор ввода для выполнения требуемого вычисления, а затем отобразить результат, как показано здесь в следующей программе.
Программный код C++ для создания простого калькулятора
Ниже приводится простая программа на C++, которая представляет собой программу на основе меню, основанную на простых вычислениях, таких как сложение, вычитание, умножение и деление по выбору пользователя:
/ * Программа на C ++ — Создать простой калькулятор * /
Когда вышеупомянутая программа C++ компилируется и выполняется, она даст следующий результат:

Сделать простой калькулятор на C
Для создания простого калькулятора в C-программировании, который выполняет четыре основные математические операции, используйте регистр переключателя, чтобы определить оператор ввода для выполнения необходимых вычислений, а затем отобразить результат.
Код программирования на С, чтобы сделать простой расчет
Ниже приводится простая программа на языке C, которая представляет собой программу на основе меню, основанную на простых вычислениях, таких как сложение, вычитание, умножение и деление по выбору пользователя:

Когда вышеупомянутая программа c скомпилирована и выполнена, она выдаст следующий результат:
Создать-программу калькулятор в консоли на Java
Для создания простого калькулятора в Java Programming, который выполняет четыре основных математических операции: сложение, вычитание, умножение и деление, используйте регистр переключения, чтобы определить оператор ввода для выполнения необходимых вычислений, а затем отобразить результат на экране, как показано на следующая программа.
Программный код Java для вычисления
Ниже приводится простая Java-программа, которая представляет собой программу на основе меню, основанную на простых вычислениях, таких как сложение, вычитание, умножение и деление по выбору пользователя:
Когда вышеуказанная Java-программа компилируется и выполняется, она выдаст следующий вывод:

Написание калькулятора на Python
Сделать простой калькулятор в Python для выполнения основных математических операций, таких как сложение, вычитание, умножение и деление двух чисел, введенных пользователем. Чтобы сделать калькулятор на python, сначала предоставьте 5 вариантов пользователю, пятый вариант для выхода. После предоставления всех пяти опций пользователю, попросите пользователя ввести его / ее выбор и выполнить желаемую операцию, как показано в программе, приведенной ниже.
Код программирования Python для создания калькулятора
Следующая программа на Python предоставляет пользователю опции и просит ввести его / ее выбор для выполнения и показать желаемый результат в качестве вывода:
# Программа Python — создайте простой калькулятор
Вот несколько примеров запуска вышеприведенной программы на Python, чтобы показать, как сделать простой калькулятор.
Это начальный вывод, дающий пользователям некоторое количество вариантов (5 вариантов), чтобы выбрать любой из этих 5 вариантов.

Теперь давайте сначала попробуем выполнить задачу сложения, выбрав или введя 1 в качестве ввода, а затем введите любые два числа, скажем 1 и 2, а затем нажмите клавишу ввода, чтобы проверить это:

Теперь давайте снова запустим программу калькулятора, чтобы проверить это время на вычитание двух чисел, скажем, 2 и 1, как показано в следующем примере:

Снова повторно запустите ту же программу, и на этот раз предоставьте 4 в качестве ввода для проверки задачи деления и введите два числа, то есть первое число как 20 и второе число как 3, затем нажмите клавишу ввода, как показано здесь в следующем примере выполнения:
Вот та же самая программа, написанная и работающая на оболочке Python. Это первый снимок: 
Ниже приведен второй снимок:

Вот третий снимок:
Создание консольного приложения «Калькулятор» на C++
Обычно программист C++ начинает с создания приложения «Hello, world!», которое запускается из командной строки. Вот что вы создадите в Visual Studio в этой статье, и затем мы перейдем к более сложной задаче: приложению калькулятора.
Предварительные требования
- Установите и запустите на своем компьютере Visual Studio с рабочей нагрузкой Разработка классических приложений на C++ . Если установка еще не выполнена, см. статью Установка поддержки C++ в Visual Studio.
Создание проекта приложения
Visual Studio использует проекты, чтобы упорядочить код для приложения, и решения, чтобы упорядочить проекты. Проект содержит все параметры, конфигурации и правила, используемые для сборки приложения. Кроме того, он управляет связью между всеми файлами проекта и любыми внешними файлами. Чтобы создать приложение, сначала создайте проект и решение.
Если вы только что запустили Visual Studio, вы увидите диалоговое окно запуска. Выберите Создать проект, чтобы приступить к работе.

Или в строке меню Visual Studio последовательно выберите Файл>Создать>Проект. Откроется окно Создание проекта.
В списке шаблонов проектов выберите Консольное приложение и нажмите Далее.

Убедитесь, что вы выбрали версию C++ для шаблона Консольное приложение. Этот шаблон содержит теги C++ , Windows и Консоль, а в углу значка есть «++».
В диалоговом окне Настроить новый проект выберите поле ввода Имя проекта, назовите новый проект CalculatorTutorial и нажмите Создать.

Будет создано пустое консольное приложение Windows на C++. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема данных, вводимых пользователем. В Visual Studio откроется окно редактора с созданным кодом.
Проверка сборки и выполнения нового приложения
Шаблон для нового консольного приложения Windows создает простое приложение Hello World на C++. На этом этапе вы можете видеть, как Visual Studio создает и запускает созданные вами приложения прямо из интегрированной среды разработки.
Для сборки проекта выберите в меню Сборка пункт Собрать решение. Окно Вывод отображает результаты процесса сборки.

Чтобы запустить этот код, в строке меню выберите Отладка и Запуск без отладки.

Открывается окно консоли, и запускается ваше приложение. При запуске консольного приложения в Visual Studio система выполняет код, а затем выводит сообщение «Нажмите любую клавишу, чтобы закрыть это окно. . .», чтобы вы могли просмотреть выходные данные. Поздравляем! Вы создали свое первое консольное приложение «Hello, world!» в Visual Studio!
Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio.
Теперь у вас есть средства для сборки и запуска приложения после каждого изменения, чтобы убедиться, что код по-прежнему работает должным образом. Позже мы покажем, как выполнить его отладку при неправильной работе.
Изменение кода
Теперь давайте превратим код в этом шаблоне в приложение калькулятора.
В файле CalculatorTutorial.cpp измените код таким образом, чтобы он соответствовал этому примеру:
- Операторы #include позволяют ссылаться на код, расположенный в других файлах. Иногда отображается имя файла, заключенное в угловые скобки (<>), а в других случаях — в кавычки (» «). В общем случае угловые скобки используются при ссылке на стандартную библиотеку C++, а кавычки — для других файлов.
- Строка using namespace std; сообщает компилятору ожидать данные от стандартной библиотеки C++ для использования в этом файле. Без нее каждое ключевое слово из этой библиотеки пришлось бы предварять элементом std:: , чтобы обозначить его область. Например, без этой строки каждую ссылку на cout потребовалось бы записывать в виде std::cout . Оператор using добавляется, чтобы сделать код более чистым и понятным.
- Ключевое слово cout используется для вывода сведений в стандартный поток вывода в C++. Оператор << указывает компилятору отправить все содержимое справа от него в стандартный поток вывода.
- Ключевое слово endl аналогично клавише ВВОД — оно завершает строку и переводит курсор на следующую строку. Для выполнения той же задачи рекомендуется помещать \n внутрь строки (заключенной в «»), так как endl всегда освобождает буфер и может негативно повлиять на производительность программы, но из-за того, что это очень небольшое приложение, в нем используется endl для улучшения удобочитаемости.
- Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ — содержать функцию main() . Именно ее программа выполняет при запуске. Для использования весь код должен быть доступен из main() .
Чтобы сохранить файл, нажмите клавиши CTRL+S или выберите элемент Сохранить в верхней части интегрированной среды разработки, выглядящий как значок гибкого диска на панели инструментов в строке меню.
Чтобы запустить приложение, нажмите клавиши CTRL+F5 или перейдите в меню Отладка и выберите Запуск без отладки. Должно отобразится окно консоли с текстом, указанным в коде.
По завершении закройте окно консоли.
Добавление кода для выполнения математических операций
Пора добавить математическую логику.
Добавление класса Calculator
В меню Проект выберите команду Добавить класс. В поле ввода Имя класса введите Calculator. Нажмите кнопку ОК. В проект будут добавлены два новых файла. Чтобы сохранить сразу все измененные файлы, нажмите клавиши CTRL+SHIFT+S. Это сочетание клавиш для команды Файл>Сохранить все. Кроме того, есть кнопка Сохранить все на панели инструментов. Она имеет вид значка с двумя дискетами рядом с кнопкой Сохранить. В общем случае рекомендуется регулярно нажимать кнопку Сохранить все, чтобы не пропустить никакие файлы при сохранении.

Класс подобен схеме для объекта, который выполняет какие-либо действия. В этом случае мы определяем калькулятор и особенности его работы. Использованный ранее мастер Добавить класс создал файлы H и CPP, имя которых совпадает с именем класса. Вы можете просмотреть полный список файлов проекта в окне обозревателя решений, отображаемом в боковой части окна IDE. Если окно не отображается, его можно открыть из строки меню, выбрав Вид>Обозреватель решений.

Теперь у вас в редакторе должно быть открыто три вкладки: CalculatorTutorial.cpp, Calculator.h и Calculator.cpp. Если вы случайно закроете одну из них, то можете повторно открыть эту вкладку, дважды щелкнув ее в окне обозревателя решений.
На вкладке Calculator.h удалите созданные строки Calculator(); и
Calculator(); , так как здесь они вам не понадобятся. Затем добавьте следующую строку кода, чтобы файл выглядел следующим образом:
- Добавленная строка объявляет новую функцию Calculate , которую мы используем для выполнения математических операций, таких как сложение, вычитание, умножение и деление.
- Код C++ упорядочен по файлам заголовка (H) и исходным файлам (CPP). Различные компиляторы поддерживают несколько других расширений имени файла, но это основные, о которых вам нужно знать. Функции и переменные обычно объявляются, то есть получают имя и тип, в файлах заголовка, и реализуются, то есть получают определение, в исходных файлах. Чтобы обратиться к коду, определенному в другом файле, вы можете использовать #include "filename.h" , где «filename.h» — это имя файла, объявляющего переменные или функции, которые требуется использовать.
- Две удаленные строки объявляли конструктор и деструктор для класса. Для такого простого класса компилятор создает их автоматически, а их использование выходит за рамки данного руководства.
- Рекомендуется упорядочивать код по различным файлам в зависимости от его назначения, чтобы позднее было проще найти нужный код. В данном случае мы определяем класс Calculator отдельно от файла, содержащего функцию main() , но планируем ссылаться на класс Calculator в main() .
Под Calculate появится зеленая волнистая линия. Это вызвано тем, что мы еще не определили функцию Calculate в CPP-файле. Наведите указатель на это слово, щелкните по появившейся лампочке (в данном случае отвертке) и выберите Создать определение «Calculate» в Calculator.cpp.

Отображается всплывающее окно, сообщающее об изменении кода, внесенном в другом файле. Код был добавлен в Calculator.cpp.

Сейчас он возвращает просто 0.0. Давайте изменим это. Нажмите клавишу ESC, чтобы закрыть всплывающее окно.
Переключитесь на файл Calculator.cpp в окне редактора. Удалите разделы Calculator() и
Calculator() (как сделали в H-файле) и добавьте в Calculate() следующий код:
- Функция Calculate использует число, оператор и второе число, а затем выполняет запрошенную операцию над этими числами.
- Оператор switch проверяет, какой оператор был предоставлен, и выполняет только вариант (case), соответствующий этой операции. Вариант default: является резервным на тот случай, если пользователь вводит неприемлемый оператор, чтобы программа не прервала работу. В общем случае лучше обрабатывать некорректный ввод данных пользователем более элегантным способом, но это выходит за рамки данного руководства.
- Ключевое слово double обозначает тип числа, который поддерживает десятичные числа. Таким образом, калькулятор может выполнять математические операции с десятичными и целыми числами. Функция Calculate должна всегда возвращать такое число из-за элемента double в самом начале кода (обозначает тип возвращаемого значения функции), поэтому возвращается 0.0 даже в случае default.
- H-файл объявляет функцию prototype, которая заранее сообщает компилятору, какой параметр требуется и какой тип возвращаемого значения следует ожидать. CPP-файл содержит все сведения о реализации этой функции.
Если построить и запустить код еще раз на этом этапе, он по-прежнему завершит работу после запроса операции для выполнения. Далее вам нужно изменить функцию main для выполнения вычислений.
Вызов функций-членов класса Calculator
Теперь давайте изменим функцию main в CalculatorTutorial.cpp:
- Так как программы C++ всегда запускаются с функции main() , нам нужно вызвать из нее другой, для чего нужен оператор #include .
- Объявлены начальные переменные x , y , oper и result для хранения, соответственно, первого числа, второго числа, оператора и окончательного результата. Рекомендуется всегда присваивать им некоторые начальные значения, чтобы избежать неопределенного поведения. Это мы здесь и делаем.
- Строка Calculator c; объявляет объект «c» в качестве экземпляра класса Calculator . Сам класс является лишь схемой для описания работы калькуляторов, а объект — это конкретный калькулятор, который выполняет вычисления.
- Оператор while (true) является циклом. Код внутри этого цикла продолжает выполняться снова и снова, пока выполняется условие в () . Так как условие просто указано как true , оно всегда выполняется, поэтому цикл выполняется бесконечно. Чтобы закрыть программу, пользователю нужно вручную закрыть окно консоли. В противном случае программа будет постоянно ожидать новые входные данные.
- Ключевое слово cin используется для получения входных данных от пользователя. Этот входной поток способен обработать строку текста, введенного в окне консоли, и поместить ее внутрь каждой из перечисленных переменных в указанном порядке, при условии, что введенные пользователем данные соответствуют требуемой спецификации. Вы можете изменить эту строку, чтобы принять другие типы входных данных, например, больше двух чисел, однако для этого также потребуется изменить функцию Calculate() .
- Выражение c.Calculate(x, oper, y); вызывает определенную ранее функцию Calculate и предоставляет введенные входные значения. Затем она возвращает число, сохраняемое в result .
- Наконец, в консоль выводится result , благодаря чему пользователь видит результат вычисления.
Повторная сборка и проверка кода
Пришло время снова протестировать программу еще раз, чтобы убедиться в ее правильной работе.
Нажмите клавиши CTRL+F5, чтобы перестроить и запустить приложение.
Введите 5 + 5 и нажмите клавишу ВВОД. Убедитесь, что выводится результат 10.

Отладка приложения
Так как пользователь может ввести в окне консоли что угодно, нужно убедиться, что калькулятор обрабатывает некоторые входные данные правильно. Вместо запуска программы давайте выполним ее отладку, чтобы можно было проверить ее выполнение шаг за шагом.
Запуск приложения в отладчике
Установите точку останова на строке result = c.Calculate(x, oper, y); , сразу после запроса входных данных у пользователя. Чтобы задать точку останова, щелкните рядом со строкой серую вертикальную панель, идущую вдоль левой части окна редактора. Появится красная точка.

Теперь при отладке программа всегда приостанавливает выполнение на этой строке. Мы уже имеем примерное представление о том, что в простых случаях программа работает. Так как нам не нужно приостанавливать выполнение при каждом запуске, создадим условную точку останова.
Щелкните правой кнопкой мыши красную точку, обозначающую точку останова, и выберите команду Условия. В поле ввода для условия введите (y == 0) && (oper == ‘/’) . По завершении операции нажмите кнопку Закрыть. Условия сохранятся автоматически.

Теперь выполнение приостанавливается в точке останова, в частности при попытке деления на 0.
Чтобы отладить программу, нажмите клавишу F5 или выберите Локальный отладчик Windows — кнопку панели инструментов со значком зеленой стрелки. Если ввести в консольном приложении нечто вроде «5 — 0», программа работает как обычно и продолжает выполнение. Но если ввести «10 / 0», она приостанавливает выполнение в точке останова. Вы можете ввести любое число пробелов между оператором и числами; функция cin достаточно интеллектуальна для того, чтобы правильно проанализировать входные данные.

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

Кроме того, вы можете просто навести указатель на переменные в самом коде, чтобы просмотреть их текущие значения на участке, где приостановлено выполнение. Сначала щелкните окно редактора, чтобы сделать его активным.

Продолжение отладки
Желтая линия слева показывает текущую точку выполнения. Текущая строка вызывает Calculate , поэтому нажмите клавишу F11, чтобы выполнить Шаг с заходом для этой функции. Вы переходите в тело функции Calculate . Обдуманно применяйте функцию Шаг с заходом, чтобы не терять время из-за чрезмерного ее использования. С помощью функции анализируется любой код, используемый в текущей строке, включая стандартные функции библиотеки.
Теперь, когда точка выполнения находится в начале функции Calculate , нажмите клавишу F10 для перехода на следующую строку в рамках выполнения программы. При нажатии клавиши F10 активируется функция Шаг с обходом. Шаг с обходом можно использовать для перемещения по строкам, не вдаваясь в подробности того, что происходит в каждой части строки. В общем случае следует использовать Шаг с обходом, а не Шаг с заходом, если только вы не хотите подробно изучить код, вызываемый из другого расположения (как в случае с переходом к телу функции Calculate ).
Продолжайте использовать клавишу F10, чтобы выполнять Шаг с обходом для каждой строки, пока не вернетесь к функции main() в другом файле, и остановитесь на строке cout .
Похоже, программа работает правильно — принимает первое число и делит его на второе. В строке cout наведите указатель мыши на переменную result или взгляните на result в окне Видимые. Соответствующее значение отображается как inf. Это неправильное поведение, и нужно его скорректировать. В строке cout просто выводится любое значение, хранящееся в result . Поэтому при продвижении еще на один шаг с помощью клавиши F10 в окне консоли отображается следующее:

Причина такого результата в том, что деление на ноль является неопределенным, поэтому у программы нет числового ответа на запрошенную операцию.
Исправление ошибки деления на ноль
Давайте обеспечим корректную обработку деления на ноль, чтобы пользователь мог осознать проблему.
Внесите следующие изменения в CalculatorTutorial.cpp. (Прерывать выполнение программы при редактировании не требуется благодаря функции отладчика Изменить и продолжить):
Теперь нажмите клавишу F5 один раз. При этом выполнение программы продолжается вплоть до приостановки для запроса данных, вводимых пользователем. Снова введите 10 / 0 . Теперь выводится более информативное сообщение. У пользователя запрашиваются дополнительные входные данные, и программа продолжает выполнение в обычном режиме.

При редактировании кода в режиме отладки существует риск того, что код устареет. Это происходит, когда отладчик продолжает выполнять старый код, не учитывающий внесенные вами изменения. В подобной ситуации отладчик выводит диалоговое окно с соответствующим сообщением. В некоторых случаях может потребоваться нажать клавишу F5, чтобы обновить выполняемый код. В частности, если вы вносите изменения внутри функции, когда точка выполнения находится внутри этой же функции, вам потребуется выполнить шаг с выходом из функции, а затем вернуться в нее, чтобы получить обновленный код. Если по какой-либо причине это не работает и вы видите сообщение об ошибке, можно остановить отладку, щелкнув красный квадрат на панели инструментов под меню в верхней части интегрированной среды разработки, а затем перезапустить отладку, нажав клавишу F5 или выбрав зеленую стрелку «воспроизведения» рядом с кнопкой остановки на панели инструментов.
- Клавиша F5 (или команда Отладка>Запустить отладку) запускает сеанс отладки, если он еще не активен, и выполняет программу до тех пор, пока не будет встречена точка останова либо программе не потребуются вводимые пользователем данные. Если вводимые пользователем данные не требуются и точка останова отсутствует, программа завершает работу, а окно консоли автоматически закрывается после завершения выполнения программы. Если вы выполняете программу уровня «Hello World», используйте сочетание клавиш CTRL+F5 или задайте точку останова перед нажатием клавиши F5, чтобы окно оставалось открытым.
- Сочетание клавиш CTRL+F5 (или команда Отладка>Запуск без отладки) запускает приложение без перехода в режим отладки. Это немного быстрее отладки, а окно консоли остается открытым после завершения выполнения программы.
- Клавиша F10 (соответствующая возможности Шаг с обходом) позволяет выполнять построчную итерацию по коду, а также визуализировать выполнение кода и значения переменных на каждом шаге выполнения.
- Клавиша F11 (соответствующая возможности Шаг с заходом) работает аналогично возможности Шаг с обходом, за исключением того, что заходит в любые функции, вызываемые в строке выполнения. Например, если в выполняемой строке вызывается функция, при нажатии клавиши F11 указатель перемещается в тело функции, чтобы вы могли проследить выполнение кода функции, прежде чем вернуться на исходную строку. При нажатии клавиши F10 выполняется шаг с обходом по вызову функции и простой переход на следующую строку. Вызов функции все равно выполняется, но программа не приостанавливается, чтобы показать вам, что именно она делает.
Закрытие приложения
- Если оно все еще выполняется, закройте окно консоли для приложения калькулятора.
Добавление системы управления исходным кодом Git
Теперь, когда вы создали приложение, вы можете добавить его в репозиторий Git. Мы их предоставим. Visual Studio упрощает этот процесс с помощью инструментов Git, которые вы можете использовать непосредственно из IDE.
Git — это наиболее широко используемая современная система контроля версий, поэтому, независимо от того, являетесь ли вы профессиональным разработчиком или учитесь программировать, Git может быть для вас весьма полезным. Если вы новичок в Git, вы можете начать с сайта https://git-scm.com/. Там вы найдете памятки, популярную электронную книгу и видеоматериалы по основам GIT.
Чтобы связать свой код с Git, вы начинаете с создания нового репозитория Git, в котором находится ваш код. Вот как это сделать.
В строке состояния в правом нижнем углу Visual Studio нажмите Добавить в систему управления версиями и выберите Git.

В диалоговом окне Создать репозиторий Git войдите в GitHub.

Имя репозитория заполняется автоматически в зависимости от расположения вашей папки. По умолчанию ваш новый репозиторий является частным. Это означает, что только вы можете получить к нему доступ.
Независимо от того, является ли ваш репозиторий общедоступным или частным, лучше всего иметь удаленную резервную копию кода, надежно хранящуюся на GitHub. Даже если вы не работаете с командой, удаленный репозиторий позволит получать доступ к коду с любого компьютера.
Щелкните Создать и отправить.
После того как вы создали свой репозиторий, вы увидите информацию о статусе в строке состояния.

Первый значок со стрелками показывает, сколько исходящих и входящих фиксаций в вашей текущей ветке. Вы можете использовать этот значок, чтобы получать любые входящие или исходящие фиксации. Вы также можете выбрать отображение этих фиксаций в первую очередь. Для этого щелкните значок и выберите Просмотреть исходящие/входящие.
Второй значок с карандашом показывает количество незафиксированных изменений в вашем коде. Щелкните этот значок, чтобы просмотреть эти изменения в окне Git Changes.
Чтобы узнать больше о том, как использовать Git с вашим приложением, см. документацию по управлению версиями Visual Studio.
Готовое приложение
Поздравляем! Вы завершили написание кода для приложения калькулятора, а также выполнили его сборку и отладку и добавили его в репозиторий — и все это в Visual Studio.
Следующие шаги
Обычно программист C++ начинает с создания приложения «Hello, world!», которое запускается из командной строки. Вот что вы создадите в Visual Studio в этой статье, и затем мы перейдем к более сложной задаче: приложению калькулятора.
Предварительные требования
- Установите и запустите на своем компьютере Visual Studio с рабочей нагрузкой Разработка классических приложений на C++ . Если установка еще не выполнена, см. статью Установка поддержки C++ в Visual Studio.
Создание проекта приложения
Visual Studio использует проекты, чтобы упорядочить код для приложения, и решения, чтобы упорядочить проекты. Проект содержит все параметры, конфигурации и правила, используемые для сборки приложения. Кроме того, он управляет связью между всеми файлами проекта и любыми внешними файлами. Чтобы создать приложение, сначала создайте проект и решение.
В строке меню Visual Studio последовательно выберите Файл>Создать>Проект. Открывается окно Новый проект.
На боковой панели слева выберите Visual C++ . В центральной области выберите Консольное приложение Windows.
В поле ввода Имя внизу введите имя нового проекта CalculatorTutorial, а затем нажмите кнопку ОК.

Будет создано пустое консольное приложение Windows на C++. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема данных, вводимых пользователем. В Visual Studio откроется окно редактора с созданным кодом.
Проверка сборки и выполнения нового приложения
Шаблон для нового консольного приложения Windows создает простое приложение «Hello World» на C++. На этом этапе вы можете видеть, как Visual Studio создает и запускает созданные вами приложения прямо из интегрированной среды разработки.
Для сборки проекта выберите в меню Сборка пункт Собрать решение. Окно Вывод отображает результаты процесса сборки.

Чтобы запустить этот код, в строке меню выберите Отладка и Запуск без отладки.

Открывается окно консоли, и запускается ваше приложение. При запуске консольного приложения в Visual Studio система выполняет код, а затем выводит сообщение «Нажмите любую клавишу, чтобы продолжить. . .», чтобы вы могли просмотреть выходные данные. Поздравляем! Вы создали свое первое консольное приложение «Hello, world!» в Visual Studio!
Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio.
Теперь у вас есть средства для сборки и запуска приложения после каждого изменения, чтобы убедиться, что код по-прежнему работает должным образом. Позже мы покажем, как выполнить его отладку при неправильной работе.
Изменение кода
Теперь давайте превратим код в этом шаблоне в приложение калькулятора.
В файле CalculatorTutorial.cpp измените код таким образом, чтобы он соответствовал этому примеру:
- Операторы #include позволяют ссылаться на код, расположенный в других файлах. Иногда отображается имя файла, заключенное в угловые скобки (<>), а в других случаях — в кавычки (» «). В общем случае угловые скобки используются при ссылке на стандартную библиотеку C++, а кавычки — для других файлов.
- Строка #include "pch.h" (или файл #include "stdafx.h" в версиях, предшествующих Visual Studio 2017) ссылается на некий объект, известный как предкомпилированный заголовок. Они части используются профессиональными программистами для улучшения времени компиляции, однако выходят за рамки материала, обсуждаемого в этом руководстве.
- Строка using namespace std; сообщает компилятору ожидать данные от стандартной библиотеки C++ для использования в этом файле. Без нее каждое ключевое слово из этой библиотеки пришлось бы предварять элементом std:: , чтобы обозначить его область. Например, без этой строки каждую ссылку на cout потребовалось бы записывать в виде std::cout . Оператор using добавляется, чтобы сделать код более чистым и понятным.
- Ключевое слово cout используется для вывода сведений в стандартный поток вывода в C++. Оператор << указывает компилятору отправить все содержимое справа от него в стандартный поток вывода.
- Ключевое слово endl аналогично клавише ВВОД — оно завершает строку и переводит курсор на следующую строку. Для выполнения той же задачи рекомендуется помещать \n внутрь строки (заключенной в «»), так как endl всегда освобождает буфер и может негативно повлиять на производительность программы, но из-за того, что это очень небольшое приложение, в нем используется endl для улучшения удобочитаемости.
- Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ — содержать функцию main() . Именно ее программа выполняет при запуске. Для использования весь код должен быть доступен из main() .
Чтобы сохранить файл, нажмите клавиши CTRL+S или выберите элемент Сохранить в верхней части интегрированной среды разработки, выглядящий как значок гибкого диска на панели инструментов в строке меню.
Чтобы запустить приложение, нажмите клавиши CTRL+F5 или перейдите в меню Отладка и выберите Запуск без отладки. Если отображается всплывающее окно This project is out of date (Этот проект устарел), можно выбрать Больше не показывать это диалоговое окно, а затем — Да, чтобы создать приложение. Должно отобразится окно консоли с текстом, указанным в коде.
По завершении закройте окно консоли.
Добавление кода для выполнения математических операций
Пора добавить математическую логику.
Добавление класса Calculator
В меню Проект выберите команду Добавить класс. В поле ввода Имя класса введите Calculator. Нажмите кнопку ОК. В проект будут добавлены два новых файла. Чтобы сохранить сразу все измененные файлы, нажмите клавиши CTRL+SHIFT+S. Это сочетание клавиш для команды Файл>Сохранить все. Кроме того, есть кнопка Сохранить все на панели инструментов. Она имеет вид значка с двумя дискетами рядом с кнопкой Сохранить. В общем случае рекомендуется регулярно нажимать кнопку Сохранить все, чтобы не пропустить никакие файлы при сохранении.
Класс подобен схеме для объекта, который выполняет какие-либо действия. В этом случае мы определяем калькулятор и особенности его работы. Использованный ранее мастер Добавить класс создал файлы H и CPP, имя которых совпадает с именем класса. Вы можете просмотреть полный список файлов проекта в окне обозревателя решений, отображаемом в боковой части окна IDE. Если окно не отображается, его можно открыть из строки меню, выбрав Вид>Обозреватель решений.

Теперь у вас в редакторе должно быть открыто три вкладки: CalculatorTutorial.cpp, Calculator.h и Calculator.cpp. Если вы случайно закроете одну из них, то можете повторно открыть эту вкладку, дважды щелкнув ее в окне обозревателя решений.
На вкладке Calculator.h удалите созданные строки Calculator(); и
Calculator(); , так как здесь они вам не понадобятся. Затем добавьте следующую строку кода, чтобы файл выглядел следующим образом:
- Добавленная строка объявляет новую функцию Calculate , которую мы используем для выполнения математических операций, таких как сложение, вычитание, умножение и деление.
- Код C++ упорядочен по файлам заголовка (H) и исходным файлам (CPP). Различные компиляторы поддерживают несколько других расширений имени файла, но это основные, о которых вам нужно знать. Функции и переменные обычно объявляются, то есть получают имя и тип, в файлах заголовка, и реализуются, то есть получают определение, в исходных файлах. Чтобы обратиться к коду, определенному в другом файле, вы можете использовать #include "filename.h" , где «filename.h» — это имя файла, объявляющего переменные или функции, которые требуется использовать.
- Две удаленные строки объявляли конструктор и деструктор для класса. Для такого простого класса компилятор создает их автоматически, а их использование выходит за рамки данного руководства.
- Рекомендуется упорядочивать код по различным файлам в зависимости от его назначения, чтобы позднее было проще найти нужный код. В данном случае мы определяем класс Calculator отдельно от файла, содержащего функцию main() , но планируем ссылаться на класс Calculator в main() .
Под Calculate появится зеленая волнистая линия. Это вызвано тем, что мы еще не определили функцию Calculate в CPP-файле. Наведите указатель на это слово, щелкните появившуюся лампочку и выберите Создать определение «Calculate» в Calculator.cpp. Отображается всплывающее окно, сообщающее об изменении кода, внесенном в другом файле. Код был добавлен в Calculator.cpp.
Сейчас он возвращает просто 0.0. Давайте изменим это. Нажмите клавишу ESC, чтобы закрыть всплывающее окно.
Переключитесь на файл Calculator.cpp в окне редактора. Удалите разделы Calculator() и
Calculator() (как сделали в H-файле) и добавьте в Calculate() следующий код:
- Функция Calculate использует число, оператор и второе число, а затем выполняет запрошенную операцию над этими числами.
- Оператор switch проверяет, какой оператор был предоставлен, и выполняет только вариант (case), соответствующий этой операции. Вариант default: является резервным на тот случай, если пользователь вводит неприемлемый оператор, чтобы программа не прервала работу. В общем случае лучше обрабатывать некорректный ввод данных пользователем более элегантным способом, но это выходит за рамки данного руководства.
- Ключевое слово double обозначает тип числа, который поддерживает десятичные числа. Таким образом, калькулятор может выполнять математические операции с десятичными и целыми числами. Функция Calculate должна всегда возвращать такое число из-за элемента double в самом начале кода (обозначает тип возвращаемого значения функции), поэтому возвращается 0.0 даже в случае default.
- H-файл объявляет функцию prototype, которая заранее сообщает компилятору, какой параметр требуется и какой тип возвращаемого значения следует ожидать. CPP-файл содержит все сведения о реализации этой функции.
Если построить и запустить код еще раз на этом этапе, он по-прежнему завершит работу после запроса операции для выполнения. Далее вам нужно изменить функцию main для выполнения вычислений.
Вызов функций-членов класса Calculator
Теперь давайте изменим функцию main в CalculatorTutorial.cpp:
- Так как программы C++ всегда запускаются с функции main() , нам нужно вызвать из нее другой, для чего нужен оператор #include .
- Объявлены начальные переменные x , y , oper и result для хранения, соответственно, первого числа, второго числа, оператора и окончательного результата. Рекомендуется всегда присваивать им некоторые начальные значения, чтобы избежать неопределенного поведения. Это мы здесь и делаем.
- Строка Calculator c; объявляет объект «c» в качестве экземпляра класса Calculator . Сам класс является лишь схемой для описания работы калькуляторов, а объект — это конкретный калькулятор, который выполняет вычисления.
- Оператор while (true) является циклом. Код внутри этого цикла продолжает выполняться снова и снова, пока выполняется условие в () . Так как условие просто указано как true , оно всегда выполняется, поэтому цикл выполняется бесконечно. Чтобы закрыть программу, пользователю нужно вручную закрыть окно консоли. В противном случае программа будет постоянно ожидать новые входные данные.
- Ключевое слово cin используется для получения входных данных от пользователя. Этот входной поток способен обработать строку текста, введенного в окне консоли, и поместить ее внутрь каждой из перечисленных переменных в указанном порядке, при условии, что введенные пользователем данные соответствуют требуемой спецификации. Вы можете изменить эту строку, чтобы принять другие типы входных данных, например, больше двух чисел, однако для этого также потребуется изменить функцию Calculate() .
- Выражение c.Calculate(x, oper, y); вызывает определенную ранее функцию Calculate и предоставляет введенные входные значения. Затем она возвращает число, сохраняемое в result .
- Наконец, в консоль выводится result , благодаря чему пользователь видит результат вычисления.
Повторная сборка и проверка кода
Пришло время снова протестировать программу еще раз, чтобы убедиться в ее правильной работе.
Нажмите клавиши CTRL+F5, чтобы перестроить и запустить приложение.
Введите 5 + 5 и нажмите клавишу ВВОД. Убедитесь, что выводится результат 10.

Отладка приложения
Так как пользователь может ввести в окне консоли что угодно, нужно убедиться, что калькулятор обрабатывает некоторые входные данные правильно. Вместо запуска программы давайте выполним ее отладку, чтобы можно было проверить ее выполнение шаг за шагом.
Запуск приложения в отладчике
Установите точку останова на строке result = c.Calculate(x, oper, y); , сразу после запроса входных данных у пользователя. Чтобы задать точку останова, щелкните рядом со строкой серую вертикальную панель, идущую вдоль левой части окна редактора. Появится красная точка.
Теперь при отладке программа всегда приостанавливает выполнение на этой строке. Мы уже имеем примерное представление о том, что в простых случаях программа работает. Так как нам не нужно приостанавливать выполнение при каждом запуске, создадим условную точку останова.
Щелкните правой кнопкой мыши красную точку, обозначающую точку останова, и выберите команду Условия. В поле ввода для условия введите (y == 0) && (oper == ‘/’) . По завершении операции нажмите кнопку Закрыть. Условия сохранятся автоматически.
Теперь выполнение приостанавливается в точке останова, в частности при попытке деления на 0.
Чтобы отладить программу, нажмите клавишу F5 или выберите Локальный отладчик Windows — кнопку панели инструментов со значком зеленой стрелки. Если ввести в консольном приложении нечто вроде «5 — 0», программа работает как обычно и продолжает выполнение. Но если ввести «10 / 0», она приостанавливает выполнение в точке останова. Вы можете ввести любое число пробелов между оператором и числами; функция cin достаточно интеллектуальна для того, чтобы правильно проанализировать входные данные.
Полезные окна в отладчике
Каждый раз при отладке кода вы можете заметить, что появляется несколько новых окон. Они могут оказаться полезными в процессе отладки. Давайте рассмотрим окно Видимые. Окно Видимые содержит текущие значения переменных, используемых по меньшей мере за три строки перед текущей строкой.

Чтобы просмотреть все переменные из этой функции, переключитесь в окно Локальные. Вы можете изменять значения этих переменных во время отладки, чтобы оценить их влияние на программу. В данном случае мы оставим их без изменений.

Кроме того, вы можете просто навести указатель на переменные в самом коде, чтобы просмотреть их текущие значения на участке, где приостановлено выполнение. Сначала щелкните окно редактора, чтобы сделать его активным.
Продолжение отладки
Желтая линия слева показывает текущую точку выполнения. Текущая строка вызывает Calculate , поэтому нажмите клавишу F11, чтобы выполнить Шаг с заходом для этой функции. Вы переходите в тело функции Calculate . Обдуманно применяйте функцию Шаг с заходом, чтобы не терять время из-за чрезмерного ее использования. С помощью функции анализируется любой код, используемый в текущей строке, включая стандартные функции библиотеки.
Теперь, когда точка выполнения находится в начале функции Calculate , нажмите клавишу F10 для перехода на следующую строку в рамках выполнения программы. При нажатии клавиши F10 активируется функция Шаг с обходом. Шаг с обходом можно использовать для перемещения по строкам, не вдаваясь в подробности того, что происходит в каждой части строки. В общем случае следует использовать Шаг с обходом, а не Шаг с заходом, если только вы не хотите подробно изучить код, вызываемый из другого расположения (как в случае с переходом к телу функции Calculate ).
Продолжайте использовать клавишу F10, чтобы выполнять Шаг с обходом для каждой строки, пока не вернетесь к функции main() в другом файле, и остановитесь на строке cout .
Похоже, программа работает правильно — принимает первое число и делит его на второе. В строке cout наведите указатель мыши на переменную result или взгляните на result в окне Видимые. Соответствующее значение отображается как inf. Это неправильное поведение, и нужно его скорректировать. В строке cout просто выводится любое значение, хранящееся в result . Поэтому при продвижении еще на один шаг с помощью клавиши F10 в окне консоли отображается следующее:

Причина такого результата в том, что деление на ноль является неопределенным, поэтому у программы нет числового ответа на запрошенную операцию.
Исправление ошибки деления на ноль
Давайте обеспечим корректную обработку деления на ноль, чтобы пользователь мог осознать проблему.
Внесите следующие изменения в CalculatorTutorial.cpp. (Прерывать выполнение программы при редактировании не требуется благодаря функции отладчика Изменить и продолжить):
Теперь нажмите клавишу F5 один раз. При этом выполнение программы продолжается вплоть до приостановки для запроса данных, вводимых пользователем. Снова введите 10 / 0 . Теперь выводится более информативное сообщение. У пользователя запрашиваются дополнительные входные данные, и программа продолжает выполнение в обычном режиме.
При редактировании кода в режиме отладки существует риск того, что код устареет. Это происходит, когда отладчик продолжает выполнять старый код, не учитывающий внесенные вами изменения. В подобной ситуации отладчик выводит диалоговое окно с соответствующим сообщением. В некоторых случаях может потребоваться нажать клавишу F5, чтобы обновить выполняемый код. В частности, если вы вносите изменения внутри функции, когда точка выполнения находится внутри этой же функции, вам потребуется выполнить шаг с выходом из функции, а затем вернуться в нее, чтобы получить обновленный код. Если по какой-либо причине это не работает и вы видите сообщение об ошибке, можно остановить отладку, щелкнув красный квадрат на панели инструментов под меню в верхней части интегрированной среды разработки, а затем перезапустить отладку, нажав клавишу F5 или выбрав зеленую стрелку «воспроизведения» рядом с кнопкой остановки на панели инструментов.
- Клавиша F5 (или команда Отладка>Запустить отладку) запускает сеанс отладки, если он еще не активен, и выполняет программу до тех пор, пока не будет встречена точка останова либо программе не потребуются вводимые пользователем данные. Если вводимые пользователем данные не требуются и точка останова отсутствует, программа завершает работу, а окно консоли автоматически закрывается после завершения выполнения программы. Если вы выполняете программу уровня «Hello World», используйте сочетание клавиш CTRL+F5 или задайте точку останова перед нажатием клавиши F5, чтобы окно оставалось открытым.
- Сочетание клавиш CTRL+F5 (или команда Отладка>Запуск без отладки) запускает приложение без перехода в режим отладки. Это немного быстрее отладки, а окно консоли остается открытым после завершения выполнения программы.
- Клавиша F10 (соответствующая возможности Шаг с обходом) позволяет выполнять построчную итерацию по коду, а также визуализировать выполнение кода и значения переменных на каждом шаге выполнения.
- Клавиша F11 (соответствующая возможности Шаг с заходом) работает аналогично возможности Шаг с обходом, за исключением того, что заходит в любые функции, вызываемые в строке выполнения. Например, если в выполняемой строке вызывается функция, при нажатии клавиши F11 указатель перемещается в тело функции, чтобы вы могли проследить выполнение кода функции, прежде чем вернуться на исходную строку. При нажатии клавиши F10 выполняется шаг с обходом по вызову функции и простой переход на следующую строку. Вызов функции все равно выполняется, но программа не приостанавливается, чтобы показать вам, что именно она делает.
Закрытие приложения
- Если оно все еще выполняется, закройте окно консоли для приложения калькулятора.
Поздравляем! Вы завершили написание кода для приложения калькулятора, а также выполнили его сборку и отладку в Visual Studio.