Как создать калькулятор c#
В данном уроке мы разработаем с вами калькулятор на C#. Программа будет написана согласно принципам объектно-ориентированного программирования (ООП): будет определен интерфейс для методов, реализующих функционал клавиш математических операций калькулятора, от интерфейса выполним наследование и напишем соответствующий класс и методы. Калькулятор, помимо базовых операций сложения, вычитания, умножения и деления, будет предоставлять возможность выполнять операции: извлечения квадратного корня, извлечения корня произвольной степени, возведения в квадрат, возведения в произвольную степень, вычисления факториала, а также работу с регистром памяти (MRC).
336 показов
2.3K открытий
Создание интерфейса.
Создадим в Visual Studio проект на Visual C# Windows Forms. Добавим на форму элемент GroupBox, в который поместим Label. В свойстве Dock, элемента Label, необходимо указать Right, чтобы Label был привязан к правому краю. Связка данных элементов управления будет реализовывать дисплей калькулятора.
Калькулятор также содержит кнопки. Всего их 28 штук.
Программирование калькулятора на C#Реализация интерфейса класса.
Поскольку наш калькулятор будет написан в рамках парадигмы ООП (объектно-ориентированного программирования), то начнем кодирование с описания структуры интерфейса для класса, реализующего математические операции программы.
Добавим в проект класс InterfaceCalc.cs и определим в созданном файле интерфейс InterfaceCalc.
//интерфейс
public interface InterfaceCalc
//а — первый аргумент, b — второй
void Put_A(double a); //сохранить а
void Clear_A();
double Multiplication(double b);
double Division(double b);
double Sum(double b);
double Subtraction(double b); //вычитание
double SqrtX(double b);
double DegreeY(double b);
double Sqrt();
double Square();
double Factorial();
double MemoryShow(); //показать содержимое регистра памяти
void Memory_Clear(); //стереть содержимое регистра памяти
//* / + — к регистру памяти
void M_Multiplication(double b);
void M_Division(double b);
void M_Sum(double b);
void M_Subtraction(double b); //вычитание
>
Для выполнения математических операций понадобится два операнда: a и b (например, a + b). Операнд a придется хранить в памяти калькулятора, пока пользователь будет вводить второй аргумент операции. Для сохранения числа a объявим прототип метода void Put_A(double a), для очистки — void Clear_A(). Для умножения, деления, сложения и вычитания чисел a и b соответственно понадобятся методы: double Multiplication(double b), double Division(double b), double Sum(double b), double Subtraction(double b). Вычисление корня степени b из a: double SqrtX(double b). Возведение числа a в степень b: double DegreeY(double b). Вычисление квадратного корня: double Sqrt(). Возведение числа a в квадрат: double Square(). Вычисление факториала a!: double Factorial(). Теперь объявления методов для работы с регистром памяти (MRC) калькулятора. Показать содержимое памяти и очистить его: double MemoryShow(), void Memory_Clear(). M×, M÷, M+ и M- к регистру соответственно: void M_Multiplication(double b), void M_Division(double b), void M_Sum(double b), void M_Subtraction(double b).
Создание класса, реализующего интерфейс InterfaceCalc
Теперь добавим в калькулятор класс, который будет реализовывать написанный ранее интерфейс. Для этого в проекте создадим класс Calc : InterfaceCalc. Как вы видите, здесь используется наследование (оператор «двоеточие»). В данном классе напишем реализацию всех методов, требуемых спецификацией нашего интерфейса.
public class Calc : InterfaceCalc
private double a = 0;
private double memory = 0;
public void Put_A(double a)
this.a = a;
>
public void Clear_A()
a = 0;
>
public double Multiplication(double b)
return a * b;
>
public double Division(double b)
return a / b;
>
public double Sum(double b)
return a + b;
>
public double Subtraction(double b) //вычитание
return a — b;
>
public double SqrtX(double b)
return Math.Pow(a, 1 / b);
>
public double DegreeY(double b)
return Math.Pow(a, b);
>
public double Sqrt()
return Math.Sqrt(a);
>
public double Square()
return Math.Pow(a, 2.0);
>
public double Factorial()
double f = 1;
for (int i = 1; i
f *= (double)i;
return f;
>
//показать содержимое регистра мамяти
public double MemoryShow()
return memory;
>
//стереть содержимое регистра мамяти
public void Memory_Clear()
memory = 0.0;
>
//* / + — к регистру памяти
public void M_Multiplication(double b)
memory *= b;
>
public void M_Division(double b)
memory /= b;
>
public void M_Sum(double b)
memory += b;
>
public void M_Subtraction(double b)
memory -= b;
>
>
Реализация работы калькулятора
Перейдем к написанию кода в классе Form1.
Создание консольного приложения «Калькулятор» на C++
Обычно программист C++ начинает с создания приложения «Hello, world!», которое запускается из командной строки. Это то, что вы сначала создадите в Visual Studio в этой статье, а затем мы перейдем к чему-то более сложному: приложению калькулятора.
Предварительные требования
- Установите и запустите на своем компьютере Visual Studio с рабочей нагрузкой Разработка классических приложений на C++ . Если установка еще не выполнена, см. статью Установка поддержки C++ в Visual Studio.
- В этом руководстве демонстрируется функция «Изменить и продолжить», которая позволяет вносить изменения в код во время работы приложения. Чтобы убедиться, что функция «Изменить и продолжить» может работать в этой статье, в меню main выберите Сервис>Параметры>Отладка>Общие и убедитесь, что установлен флажок Требовать точное соответствие исходных файлов исходной версии.
Создание проекта приложения
Visual Studio использует проекты, чтобы упорядочить код для приложения, и решения, чтобы упорядочить проекты. Проект содержит все параметры, конфигурации и правила, используемые для сборки приложения. Кроме того, он управляет связью между всеми файлами проекта и любыми внешними файлами. Чтобы создать приложение, сначала создайте новый проект и решение.
- Если вы запустили Visual Studio, откроется диалоговое окно Запуск Visual Studio. Выберите Создать проект, чтобы приступить к работе. Или в строке меню Visual Studio последовательно выберите Файл>Создать>Проект. Откроется окно Создание проекта.
- В списке шаблонов проектов выберите Консольное приложение и нажмите Далее.
Важно! Убедитесь, что вы выбрали версию C++ для шаблона Консольное приложение. Этот шаблон содержит теги C++ , Windows и Консоль, а в углу значка есть «++».

В диалоговом окне Настроить новый проект выберите поле ввода Имя проекта, назовите новый проект CalculatorTutorial и нажмите Создать. Будет создано пустое консольное приложение Windows на C++. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема данных, вводимых пользователем. В Visual Studio откроется окно редактора с созданным кодом.
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include int main() < std::cout // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
Проверка сборки и выполнения нового приложения
Шаблон для нового консольного приложения Windows создает простое приложение Hello World на C++. На этом этапе вы можете видеть, как Visual Studio создает и запускает созданные вами приложения прямо из интегрированной среды разработки.
- Для сборки проекта выберите в меню Сборка пункт Собрать решение. Окно Вывод отображает результаты процесса сборки.

- Чтобы запустить этот код, в строке меню выберите Отладка и Запуск без отладки.
Открывается окно консоли, и запускается ваше приложение. При запуске консольного приложения в Visual Studio система выполняет код, а затем выводит сообщение «Нажмите любую клавишу, чтобы закрыть это окно. . .», чтобы вы могли просмотреть выходные данные. Поздравляем! Вы создали свое первое консольное приложение «Hello, world!» в Visual Studio! - Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio.
Теперь у вас есть средства для сборки и запуска приложения после каждого изменения, чтобы убедиться, что код по-прежнему работает должным образом. Позже мы покажем, как выполнить отладку, если это не так.
Изменение кода
Теперь давайте превратим код в этом шаблоне в приложение калькулятора.
-
Замените содержимое CalculatorTutorial.cpp файла следующим кодом, чтобы оно соответствовало этому примеру:
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include using namespace std; int main() < cout // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
- Операторы #include позволяют ссылаться на код, расположенный в других файлах. Иногда отображается имя файла, заключенное в угловые скобки (<>), а в других случаях — в кавычки (» «). В общем случае угловые скобки используются при ссылке на стандартную библиотеку C++, а кавычки — для других файлов.
- Строка using namespace std; сообщает компилятору ожидать данные от стандартной библиотеки C++ для использования в этом файле. Без этой строки каждой ключевое слово из библиотеки необходимо было бы указать std:: , чтобы обозначить ее область. Например, без этой строки каждую ссылку на cout потребовалось бы записывать в виде std::cout . Оператор using добавляется, чтобы сделать код более чистым и понятным.
- Ключевое слово cout используется для вывода сведений в стандартный поток вывода в C++. Оператор указывает компилятору отправить все содержимое справа от него в стандартный поток вывода.
- Ключевое слово endl похожа на клавишу ВВОД; она заканчивает строку и перемещает курсор в следующую строку. Рекомендуется поместить \n внутри строки (содержащейся в «» ), чтобы сделать то же самое, так как endl всегда очищает буфер, что может повредить производительности программы. Но так как это очень маленькое приложение, endl вместо него используется для улучшения удобочитаемости.
- Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ — содержать функцию main() . Именно ее программа выполняет при запуске. Для использования весь код должен быть доступен из main() .
Добавление кода для выполнения математических операций
Пора добавить математическую логику.
Добавление класса Calculator
- В меню Проект выберите команду Добавить класс. В поле ввода Имя класса введите Calculator. Нажмите кнопку ОК. В проект будут добавлены два новых файла. Чтобы сохранить сразу все измененные файлы, нажмите клавиши CTRL+SHIFT+S. Это сочетание клавиш для команды Файл>Сохранить все. Кроме того, есть кнопка Сохранить все на панели инструментов. Она имеет вид значка с двумя дискетами рядом с кнопкой Сохранить. В общем случае рекомендуется регулярно нажимать кнопку Сохранить все, чтобы не пропустить никакие файлы при сохранении.
Класс подобен схеме для объекта, который выполняет какие-либо действия. В этом случае мы определяем калькулятор и особенности его работы. Мастер добавления класса , который вы использовали ранее, создал .h файлы и .cpp с тем же именем, что и класс. Вы можете просмотреть полный список файлов проекта в окне обозревателя решений, отображаемом в боковой части окна IDE. Если окно не отображается, его можно открыть из строки меню, выбрав Вид>Обозреватель решений.
Теперь у вас в редакторе должно быть открыто три вкладки: CalculatorTutorial.cpp , Calculator.h и Calculator.cpp . Если вы случайно закроете одну из них, то можете повторно открыть эту вкладку, дважды щелкнув ее в окне обозревателя решений. - Замените содержимое Calculator.h следующим кодом, чтобы файл выглядел следующим образом:
#pragma once class Calculator < public: double Calculate(double x, char oper, double y); >;
- Этот код объявляет новую функцию с именем Calculate , которая используется для выполнения математических операций сложения, вычитания, умножения и деления.
- Код C++ упорядочен по файлам заголовков ( .h ) и исходным файлам ( .cpp ). Различные компиляторы поддерживают несколько других расширений имени файла, но это основные, о которых вам нужно знать. Функции и переменные обычно объявляются, то есть получают имя и тип, в файлах заголовка, и реализуются, то есть получают определение, в исходных файлах. Для доступа к коду, определенному в другом файле, можно использовать #include «filename.h» , где filename.h — это имя файла, объявляющего переменные или функции, которые вы хотите использовать.
- Рекомендуется упорядочивать код по различным файлам в зависимости от его назначения, чтобы позднее было проще найти нужный код. В данном случае мы определяем класс Calculator отдельно от файла, содержащего функцию main() , но планируем ссылаться на класс Calculator в main() .
Отображается всплывающее окно, сообщающее об изменении кода, внесенном в другом файле. Код был добавлен в Calculator.cpp .
Сейчас он возвращает просто 0.0. Давайте изменим это. Нажмите клавишу ESC, чтобы закрыть всплывающее окно.#include "Calculator.h" double Calculator::Calculate(double x, char oper, double y) < switch(oper) < case '+': return x + y; case '-': return x - y; case '*': return x * y; case '/': return x / y; default: return 0.0; >>
- Функция Calculate использует число, оператор и второе число, а затем выполняет запрошенную операцию над этими числами.
- Оператор switch проверяет, какой оператор был предоставлен, и выполняет только вариант (case), соответствующий этой операции. Вариант default: является резервным на тот случай, если пользователь вводит неприемлемый оператор, чтобы программа не прервала работу. В общем случае лучше обрабатывать некорректный ввод данных пользователем более элегантным способом, но это выходит за рамки данного руководства.
- Ключевое слово double обозначает тип числа, который поддерживает десятичные числа. Таким образом, калькулятор может выполнять математические операции с десятичными и целыми числами. Функция Calculate должна всегда возвращать такое число из-за элемента double в самом начале кода (обозначает тип возвращаемого значения функции), поэтому возвращается 0.0 даже в случае default.
- Файл .h объявляет прототип функции, который заранее сообщает компилятору, какие параметры ему требуются и какой тип возвращаемого значения следует ожидать от него. Файл .cpp содержит все сведения о реализации функции.
Если построить и запустить код еще раз на этом этапе, он по-прежнему завершит работу после запроса операции для выполнения. Затем измените функцию main для выполнения некоторых вычислений.
Вызов Calculator функций-членов класса
- Теперь давайте изменим функцию main в CalculatorTutorial.cpp :
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include #include "Calculator.h" using namespace std; int main() < double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout > x >> oper >> y; result = c.Calculate(x, oper, y); cout return 0; >
- Так как программы 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 активируется функция Шаг с обходом. Шаг с обходом можно использовать для перемещения по строкам, не вдаваясь в подробности того, что происходит в каждой части строки. Как правило, вместо step Into следует использовать шаг с обходом, если вы не хотите более глубоко изучить код, который вызывается из другого места (как это было для достижения основного Calculate текста ).
- Продолжайте использовать клавишу F10, чтобы выполнять Шаг с обходом для каждой строки, пока не вернетесь к функции main() в другом файле, и остановитесь на строке cout . Похоже, программа работает правильно — принимает первое число и делит его на второе. В строке cout наведите указатель мыши на переменную result или взгляните на result в окне Видимые. Его значение inf , которое выглядит неправильно, поэтому давайте исправим его. В строке cout просто выводится любое значение, хранящееся в result . Поэтому при продвижении еще на один шаг с помощью клавиши F10 в окне консоли отображается следующее: Причина такого результата в том, что деление на ноль является неопределенным, поэтому у программы нет числового ответа на запрошенную операцию.
Исправление ошибки деления на ноль
Давайте обработаем деление на ноль более корректно, чтобы пользователю было проще понять проблему.
-
Внесите следующие изменения в CalculatorTutorial.cpp . (Вы можете оставить программу запущенной во время редактирования благодаря функции отладчика Под названием «Изменить и продолжить«). Изменение заключается в добавлении следующей if cin >> x >> oper >> y; инструкции в проверка деления на ноль и вывода сообщения пользователю, если это произойдет. В противном случае результат выводится.
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include #include "Calculator.h" using namespace std; int main() < double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout > x >> oper >> y; if (oper == '/' && y == 0) < cout else < result = c.Calculate(x, oper, y); >cout return 0; >

Теперь нажмите клавишу F5 один раз. При этом выполнение программы продолжается вплоть до приостановки для запроса данных, вводимых пользователем. Снова введите 10 / 0 . Теперь выводится более информативное сообщение. У пользователя запрашиваются дополнительные входные данные, и программа продолжает выполнение в обычном режиме.
В окне консоли отображаются две строки: «10 / 0 Результат: inf» и «10 / 0 Исключение: деление на 0».
Примечание При редактировании кода в режиме отладки существует риск того, что код устареет. Это происходит, когда отладчик продолжает выполнять старый код, не учитывающий внесенные вами изменения. В отладчике отображается диалоговое окно с уведомлением о том, что это произойдет. В некоторых случаях может потребоваться нажать клавишу F5, чтобы обновить выполняемый код. В частности, если вы вносите изменения внутри функции, когда точка выполнения находится внутри этой функции, необходимо выйти из функции, а затем снова в нее, чтобы получить обновленный код. Если по какой-либо причине это не работает и вы видите сообщение об ошибке, можно остановить отладку, щелкнув красный квадрат на панели инструментов под меню в верхней части интегрированной среды разработки, а затем перезапустить отладку, нажав клавишу F5 или выбрав зеленую стрелку «воспроизведения» рядом с кнопкой остановки на панели инструментов. Еще одна причина, по которой изменение и продолжение могут завершиться ошибкой, заключается в том, что отображается сообщение «Требуется, чтобы исходные файлы точно соответствовали исходной версии в разделе Debug-Options-General>> необходимо включить. » Чтобы устранить эту проблему, в меню main выберите Сервис>Параметры>Отладка>Общие и убедитесь, что установлен флажок Требовать точное соответствие исходных файлов исходной версии.
- Клавиша 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 с вашим приложением, см. документацию по управлению версиями 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 откроется окно редактора с созданным кодом.
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include int main() < std::cout // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
Проверка сборки и выполнения нового приложения
Шаблон для нового консольного приложения Windows создает простое приложение «Hello World» на C++. На этом этапе вы можете видеть, как Visual Studio создает и запускает созданные вами приложения прямо из интегрированной среды разработки.
- Для сборки проекта выберите в меню Сборка пункт Собрать решение. Окно Вывод отображает результаты процесса сборки.

- Чтобы запустить этот код, в строке меню выберите Отладка и Запуск без отладки.
Открывается окно консоли, и запускается ваше приложение. При запуске консольного приложения в Visual Studio система выполняет код, а затем выводит сообщение «Нажмите любую клавишу, чтобы продолжить. . .», чтобы вы могли просмотреть выходные данные. Поздравляем! Вы создали свое первое консольное приложение «Hello, world!» в Visual Studio! - Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio.
Теперь у вас есть средства для сборки и запуска приложения после каждого изменения, чтобы убедиться, что код по-прежнему работает должным образом. Позже мы покажем, как выполнить отладку, если это не так.
Изменение кода
Теперь давайте превратим код в этом шаблоне в приложение калькулятора.
-
Замените содержимое CalculatorTutorial.cpp файла следующим кодом, чтобы оно соответствовало этому примеру:
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include using namespace std; int main() < cout // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
- Операторы #include позволяют ссылаться на код, расположенный в других файлах. Иногда отображается имя файла, заключенное в угловые скобки (<>), а в других случаях — в кавычки (» «). В общем случае угловые скобки используются при ссылке на стандартную библиотеку C++, а кавычки — для других файлов.
- Строка using namespace std; сообщает компилятору ожидать данные от стандартной библиотеки C++ для использования в этом файле. Без этой строки каждому ключевое слово из библиотеки необходимо было бы предварять std:: , чтобы обозначить ее область. Например, без этой строки каждую ссылку на cout потребовалось бы записывать в виде std::cout . Оператор using добавляется, чтобы сделать код более чистым и понятным.
- Ключевое слово cout используется для вывода сведений в стандартный поток вывода в C++. Оператор * указывает компилятору отправить все, что находится справа от него, в стандартные выходные данные.
- Ключевое слово endl похожа на клавишу ВВОД. Она заканчивает строку и перемещает курсор на следующую строку. Рекомендуется поместить \n внутри строки (содержащейся в «» ), чтобы сделать то же самое, так как endl всегда очищает буфер и может повредить производительность программы. Но так как это очень маленькое приложение, endl вместо него используется для повышения удобочитаемости.
- Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ — содержать функцию main() . Именно ее программа выполняет при запуске. Для использования весь код должен быть доступен из main() .
Видео, в котором показано действие «Отладка > Начать без отладки». Появляется диалоговое окно с запросом на сборку, поскольку проект устарел. Установлен флажок «Больше не показывать это окно». Выбран вариант «Да» для запуска сборки проекта, выполняется сборка проекта калькулятора, который затем запускается в окне консоли Windows.
Добавление кода для выполнения математических операций
Пора добавить математическую логику.
Добавление класса Calculator

- В меню Проект выберите команду Добавить класс. В поле ввода Имя класса введите Calculator. Нажмите кнопку ОК. В проект будут добавлены два новых файла. Чтобы сохранить сразу все измененные файлы, нажмите клавиши CTRL+SHIFT+S. Это сочетание клавиш для команды Файл>Сохранить все. Кроме того, есть кнопка Сохранить все на панели инструментов. Она имеет вид значка с двумя дискетами рядом с кнопкой Сохранить. В общем случае рекомендуется регулярно нажимать кнопку Сохранить все, чтобы не пропустить никакие файлы при сохранении. Класс подобен схеме для объекта, который выполняет какие-либо действия. В этом случае мы определяем калькулятор и особенности его работы. Мастер добавления класса , который вы использовали ранее, и .h файлы с тем же именем, что и .cpp класс. Вы можете просмотреть полный список файлов проекта в окне обозревателя решений, отображаемом в боковой части окна IDE. Если окно не отображается, его можно открыть из строки меню, выбрав Вид>Обозреватель решений. Теперь у вас в редакторе должно быть открыто три вкладки: CalculatorTutorial.cpp , Calculator.h и Calculator.cpp . Если вы случайно закроете одну из них, то можете повторно открыть эту вкладку, дважды щелкнув ее в окне обозревателя решений.
- Замените содержимое Calculator.h следующим кодом, чтобы файл выглядел следующим образом:
#pragma once class Calculator < public: double Calculate(double x, char oper, double y); >;
- Этот код объявляет новую функцию с именем Calculate , которая используется для выполнения математических операций сложения, вычитания, умножения и деления.
- Код C++ организован в файлы заголовков ( .h ) и исходные файлы ( .cpp ). Различные компиляторы поддерживают несколько других расширений имени файла, но это основные, о которых вам нужно знать. Функции и переменные обычно объявляются, то есть получают имя и тип, в файлах заголовка, и реализуются, то есть получают определение, в исходных файлах. Для доступа к коду, определенному в другом файле, можно использовать #include «filename.h» , где filename.h — это имя файла, объявляющего переменные или функции, которые вы хотите использовать.
- Рекомендуется упорядочивать код по различным файлам в зависимости от его назначения, чтобы позднее было проще найти нужный код. В данном случае мы определяем класс Calculator отдельно от файла, содержащего функцию main() , но планируем ссылаться на класс Calculator в main() .
#include "Calculator.h" double Calculator::Calculate(double x, char oper, double y) < switch(oper) < case '+': return x + y; case '-': return x - y; case '*': return x * y; case '/': return x / y; default: return 0.0; >>
- Функция Calculate использует число, оператор и второе число, а затем выполняет запрошенную операцию над этими числами.
- Оператор switch проверяет, какой оператор был предоставлен, и выполняет только вариант (case), соответствующий этой операции. Вариант default: является резервным на тот случай, если пользователь вводит неприемлемый оператор, чтобы программа не прервала работу. В общем случае лучше обрабатывать некорректный ввод данных пользователем более элегантным способом, но это выходит за рамки данного руководства.
- Ключевое слово double обозначает тип числа, который поддерживает десятичные числа. Таким образом, калькулятор может выполнять математические операции с десятичными и целыми числами. Функция Calculate должна всегда возвращать такое число из-за элемента double в самом начале кода (обозначает тип возвращаемого значения функции), поэтому возвращается 0.0 даже в случае default.
- Файл .h объявляет прототип функции, который заранее сообщает компилятору, какие параметры ему нужны и какой тип возвращаемого значения следует ожидать от него. Файл .cpp содержит все сведения о реализации функции.
Если построить и запустить код еще раз на этом этапе, он по-прежнему завершит работу после запроса операции для выполнения. Затем измените функцию main , чтобы выполнить некоторые вычисления.
Вызов функций-членов класса Calculator
- Теперь давайте изменим функцию main в CalculatorTutorial.cpp :
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include #include "Calculator.h" using namespace std; int main() < double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout > x >> oper >> y; result = c.Calculate(x, oper, y); cout return 0; >
- Так как программы 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 == ‘/’) . По завершении нажмите кнопку Закрыть , чтобы сохранить условие точки останова.
Видео, в котором показан выбор точки останова правой кнопкой мыши. Точка останова находится в строке кода «result = c.Calculate(x, oper, y)». ‘Условия. ‘ выбран в раскрывающемся списке, в котором открывается окно параметров точки останова. В текстовом поле после раскрывающихся списков «Условное выражение» и «Is true» пользователь вводит условие «y == 0 && oper == ‘/'», а затем нажимает кнопку «Закрыть», чтобы установить условную точку останова.
Полезные окна в отладчике
Каждый раз при отладке кода вы можете заметить, что появляется несколько новых окон. Они могут оказаться полезными в процессе отладки. Давайте рассмотрим окно Видимые. Окно Видимые содержит текущие значения переменных, используемых по меньшей мере за три строки перед текущей строкой.

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

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

- Желтая стрелка слева показывает текущую точку выполнения. Текущая строка вызывает Calculate , поэтому нажмите клавишу F11 , чтобы перейти к функции Step Into , которая перейдет в текст Calculate функции. Будьте осторожны с шагом с переходом , так как он выполняет шаги по всем функциям в строке, в которую вы находитесь, включая стандартные функции библиотеки. Это нормально, чтобы перейти к стандартной библиотеке, но вы можете быть более заинтересованы в том, чтобы сосредоточиться на коде, а не на коде библиотеки.
- Теперь, когда точка выполнения находится в начале функции Calculate , нажмите клавишу F10 для перехода на следующую строку в рамках выполнения программы. При нажатии клавиши F10 активируется функция Шаг с обходом. Шаг с обходом можно использовать для перемещения по строкам, не вдаваясь в подробности того, что происходит в каждой части строки. В общем случае следует использовать Шаг с обходом, а не Шаг с заходом, если только вы не хотите подробно изучить код, вызываемый из другого расположения (как в случае с переходом к телу функции Calculate ).
- Продолжайте использовать клавишу F10, чтобы выполнять Шаг с обходом для каждой строки, пока не вернетесь к функции main() в другом файле, и остановитесь на строке cout . Похоже, программа работает правильно — принимает первое число и делит его на второе. В строке cout наведите указатель мыши на переменную result или взгляните на result в окне Видимые. Его значение равно inf , которое выглядит неправильно, поэтому давайте исправим его. В строке cout просто выводится любое значение, хранящееся в result . Поэтому при продвижении еще на один шаг с помощью клавиши F10 в окне консоли отображается следующее: Причина такого результата в том, что деление на ноль является неопределенным, поэтому у программы нет числового ответа на запрошенную операцию.
Исправление ошибки деления на ноль
Давайте обеспечим корректную обработку деления на ноль, чтобы пользователь мог осознать проблему.
-
Внесите следующие изменения в CalculatorTutorial.cpp . (Вы можете оставить программу запущенной во время редактирования с помощью функции отладчика Под названием «Изменить и продолжить«). Изменение заключается в добавлении следующей if инструкции cin >> x >> oper >> y; для проверка деления на ноль и вывода сообщения пользователю, если это произойдет. В противном случае выводится результат:
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include #include "Calculator.h" using namespace std; int main() < double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout > x >> oper >> y; if (oper == '/' && y == 0) < cout else < result = c.Calculate(x, oper, y); >cout return 0; >
Примечание При редактировании кода в режиме отладки существует риск того, что код устареет. Это происходит, когда отладчик продолжает выполнять старый код, не учитывающий внесенные вами изменения. В подобной ситуации отладчик выводит диалоговое окно с соответствующим сообщением. В некоторых случаях может потребоваться нажать клавишу F5, чтобы обновить выполняемый код. В частности, если вы вносите изменения внутри функции, а точка выполнения находится внутри этой функции, выходите из функции, а затем снова в нее, чтобы получить обновленный код. Если по какой-либо причине это не работает и вы видите сообщение об ошибке, можно остановить отладку, щелкнув красный квадрат на панели инструментов под меню в верхней части интегрированной среды разработки, а затем перезапустить отладку, нажав клавишу F5 или выбрав зеленую стрелку «воспроизведения» рядом с кнопкой остановки на панели инструментов. Еще одна причина, по которой изменение и продолжение могут завершиться сбоем, заключается в том, что необходимо перейти в меню main и выбрать Сервис>Параметры>Отладка>Общие и убедиться, что установлен флажок Требовать исходные файлы в точном соответствии с исходной версией.
- Клавиша F5 (или команда Отладка>Запустить отладку) запускает сеанс отладки, если он еще не активен, и выполняет программу до тех пор, пока не будет встречена точка останова либо программе не потребуются вводимые пользователем данные. Если вводимые пользователем данные не требуются и точка останова отсутствует, программа завершает работу, а окно консоли автоматически закрывается после завершения выполнения программы. Если у вас есть что-то вроде программы Hello World, нажмите клавиши CTRL+F5 или установите точку останова, прежде чем нажать клавишу F5, чтобы окно оставалось открытым.
- Сочетание клавиш CTRL+F5 (или команда Отладка>Запуск без отладки) запускает приложение без перехода в режим отладки. Это немного быстрее отладки, а окно консоли остается открытым после завершения выполнения программы.
- Клавиша F10 (соответствующая возможности Шаг с обходом) позволяет выполнять построчную итерацию по коду, а также визуализировать выполнение кода и значения переменных на каждом шаге выполнения.
- Клавиша F11 (соответствующая возможности Шаг с заходом) работает аналогично возможности Шаг с обходом, за исключением того, что заходит в любые функции, вызываемые в строке выполнения. Например, если в выполняемой строке вызывается функция, при нажатии клавиши F11 указатель перемещается в тело функции, чтобы вы могли проследить выполнение кода функции, прежде чем вернуться на исходную строку. При нажатии клавиши F10 выполняется шаг с обходом по вызову функции и простой переход на следующую строку. Вызов функции все равно выполняется, но программа не приостанавливается, чтобы показать вам, что именно она делает.
Закрытие приложения
- Если оно все еще выполняется, закройте окно консоли для приложения калькулятора.
Поздравляем! Вы завершили написание кода для приложения калькулятора, а также выполнили его сборку и отладку в Visual Studio.
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode
Калькулятор Windows Forms на языке C#
Некогда мы уже создавали подобный калькулятор, но он был довольно простенький и не имел общего TextBox’a для всех чисел.
В данной статье же мы создадим более усовершенствованный калькулятор Windows Forms. Итак, выглядеть у нас он будет вот так:

Здесь у нас 19 кнопок Button, 1 Textbox и ещё 1 пустой Label (на рисунке он выделен). Применение его будет описано ниже.
Итак, создаём такую или похожую форму. Мы увеличили ширину TextBox’a, используя MultiLine:

Также в Свойствах мы увеличили размер шрифта в TextBox’e и Label’e до 12 пт.
![]()
Теперь делаем так, чтобы при нажатии на цифровые кнопки, в TextBox’e появлялась соответствующая цифра.
Для этого дважды кликаем на кнопке «0» и в открывшемся коде пишем:
private void button17_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 0 ;
Проверяем, несколько раз нажав на кнопку «0» у нас в форме.

Работает. Делаем то же самое с остальными цифровыми кнопками:
private void button13_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 1 ;
private void button14_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 2 ;
private void button15_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 3 ;
private void button9_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 4 ;
private void button10_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 5 ;
private void button11_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 6 ;
private void button5_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 7 ;
private void button6_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 8 ;
private void button7_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + 9 ;
Таким же образом кликаем дважды на кнопку «.» в форме. Она будет использоваться для создания десятичной дроби. Пишем следующий код:
private void button18_Click ( object sender , EventArgs e )
textBox1 . Text = textBox1 . Text + «,» ;
Кнопки нажимаются, в TextBox’e отображаются нажатые цифры. Теперь надо научить программу производить с ними какие-либо операции. Как видно из формы, наш калькулятор сможет производить стандартные математические операции: сложение, вычитание, умножение и деление. Для начала мы создадим в самом начале программы несколько переменных, которые нам для этого понадобятся:
float a , b ;
bool znak = true ;
Первым двум переменным будут присваиваться значения, набранные пользователем в калькуляторе. В последствии с ними будут производиться нужные математические операции. Тип float — это тип с плавающей точкой, позволяющий работать с десятичными дробями, что нам, безусловно, нужно при наличии кнопки «.» .
Благодаря второй переменной мы будем давать программе указания, какую именно операцию производить с переменными, описанными выше. Здесь нам не нужна дробь, поэтому обойдёмся целочисленным типом int.
Последняя переменная znak нам понадобится для того, чтобы менять знаки у введённых чисел. Тип bool может иметь два значения — ture и false. Мы представим, что если znak имеет значение true в программе, то это означает, что у числа знак +, если false — число отрицательное и перед собой имеет знак —. Изначально в калькуляторе вбиваются положительные числа, поэтому мы сразу присвоили переменной значение true.
Далее мы дважды нажимаем на кнопку «+», обозначающую сложение, на форме и пишем следующий код:
private void button4_Click ( object sender , EventArgs e )
a = float . Parse ( textBox1 . Text ) ;
textBox1 . Clear ( ) ;
label1 . Text = a . ToString ( ) + «+» ;
znak = true ;
В строке 3 мы присваиваем первой переменной a то, что будет написано в TextBox’e (а именно число, которое введёт пользователь перед тем, как нажать кнопку «+»).
Затем TextBox очищается, число, введённое пользователем, в нём пропадает (но остаётся в переменной a)
Переменной count присваивается число 1, которая потом укажет программе, что именно операцию сложения надо будет произвести с числами.
Затем в Label записывается число из переменной a (то самое, которое изначально ввёл пользователь) и знак плюса. Выглядеть в форме это будет так, как описано ниже.
Пользователь вводит какое-либо число:

Затем нажимает на кнопку «+» и после этого видит:

Кроме того, как бы не было странным с первого взгляда, мы присваиваем переменной znak значение true, хотя выше, в начале кода, мы и так присваивали это же значение. Подробнее данную переменную мы опишем ниже, но смысл в том, что мы присваиваем значение true, когда хотим сделать введённое число отрицательным, если оно положительно, а значение false, когда хотим сделать число положительным, если оно отрицательное. Изначально у нас вводятся положительные числа, сначала первое, потом второе. И если первое число мы сделаем отрицательным, то значение у znak перейдёт в false и тогда получится, что второе слагаемое как бы отрицательное (на практике, просто чтобы поставить перед ним минус, придётся нажать дважды на соответствующую кнопку, чтобы с false значение перешло в true, а затем обратно с true в false, и появился знак минуса).
Подобным образом заполняем код для кнопок «-«, «*» и «/»:
private void button8_Click ( object sender , EventArgs e )
a = float . Parse ( textBox1 . Text ) ;
textBox1 . Clear ( ) ;
label1 . Text = a . ToString ( ) + «-» ;
znak = true ;
private void button12_Click ( object sender , EventArgs e )
a = float . Parse ( textBox1 . Text ) ;
textBox1 . Clear ( ) ;
label1 . Text = a . ToString ( ) + «*» ;
znak = true ;
private void button16_Click ( object sender , EventArgs e )
a = float . Parse ( textBox1 . Text ) ;
textBox1 . Clear ( ) ;
label1 . Text = a . ToString ( ) + «/» ;
znak = true ;
Разница лишь в значении переменной count и в том, какой знак добавляется в Label’e.
Далее нам понадобится создать функцию, которая будет применять нужные нам математические операции к числам. Назовём её calculate. Но перед этим мы кликнем дважды на кнопку «=» на форме и в коде к ней мы запишем:
private void button19_Click ( object sender , EventArgs e )
label1 . Text = «» ;
То есть, при нажатии пользователем на кнопку «=», как раз выполнится наша функция подсчёта calculate, и, заодно, очистится Label, так как результат мы в будущем коде выведем в TextBox.
Теперь-таки создаём нашу функцию calculate и пишем следующий код:
private void calculate ( )
switch ( count )
b = a + float . Parse ( textBox1 . Text ) ;
textBox1 . Text = b . ToString ( ) ;
b = a — float . Parse ( textBox1 . Text ) ;
textBox1 . Text = b . ToString ( ) ;
b = a * float . Parse ( textBox1 . Text ) ;
textBox1 . Text = b . ToString ( ) ;
b = a / float . Parse ( textBox1 . Text ) ;
textBox1 . Text = b . ToString ( ) ;
Здесь мы используем конструкцию switch-case.
Switch — это оператор управления. Он может включать в себя несколько case’ов. Case — метки, от значения которых зависит, какие операции будут происходить.
Строка switch(count) означает, что именно от значения count будет зависеть, какое действие будет происходить в коде switch’a.
Итак, если count=1 (в коде case 1:), то произойдёт следующее:
После того, как пользователь нажал «+», он, естественно, должен ввести второе слагаемое, что он и делает по стандартному сценарию, а затем нажать кнопку «=» (и в ней, как мы помним, как раз выполнится наша функция).
Как только кнопка «=» будет нажата, программа сложит число из переменной a с тем вторым слагаемым, которое записал пользователь в TextBox, и запишет результат в переменную b (строка 6 кода функции). В строке 7 программа выведет в TextBox результат сложения — переменную b.
Оператор break (строка 8) завершает исполнение кода switch при выполнении кода метки case 1, так как больше нам в нём делать нечего.
Точно так же строится алгоритм при case 2, case 3 и case 4 с той разницей, что в них происходит не сложение, а вычитание, умножение и деление соответственно.
Оператор default срабатывает, если вдруг что-то пойдёт не по плану и count примет какое-либо иное значение, не описанное в switch. Тогда срабатывает лишь оператор break.
Львиная доля программы готова. Нам надо лишь написать код для трёх оставшихся нетронутыми до этого время кнопок.
Дважды жмём в форме на кнопку «С». Она будет очищать все записи из TextBox’a и Label’a.
Код у неё элементарный:
Как сделать калькулятор в visual studio 2019
Регистрация: 13.03.2021
Сообщений: 19
калькулятор в Visual Studio через WinForm C#
Здравствуйте, подскажите пожалуйста, создал программу калькулятор в Visual Studio через WinForm C#, не могу никак решить одну задачу, а именно, например будем складывать два числа — 14(первое число) + 4(второе число) = 18 (результат), во всех калькуляторах после повторного нажатия на равно к число 18 прибавится второе, то есть 4, и результат уже будет 22, однако у меня вместо второго прибавляется первое, то есть к 18 прибавляется 14, как можно исправить код, чтоб было как положено )
// Кнопка сложения private void button16_Click(object sender, EventArgs e)
// Кнопка равно private void button20_Click(object sender, EventArgs e) < Number_2 = double.Parse(textBox1.Text); switch (Action) < case 0: Number_2 = Number_1 + Number_2; break; >textBox1.Text = Number_2.ToString();
