Лабораторная №6. Создание приложения - калькулятор выражений
Целью лабораторной работы заключается закрепление навыков создания оконного приложения, библиотеки классов и их взаимодействие, а также расширенное изучение возможностей языка программирования C#.
Задание:
Создать оконное приложение калькулятора выражения, в котором алгебраическое выражение задается строкой и вычисляется нажатием кнопки.
Краткое руководство к лабораторной работе
Данное оконное приложение было создано на основе калькулятора, рассмотренного в лабораторной работе №1, посредством добавления нового класса Expression, и создания нового приложения Windows Form. Стоит отметить, что в работе задействованные ранее созданные классы Number и Operation.
В текстовое окно будет вводиться численное выражение, а после нажатия кнопки «Расчет» будет производится расчет. Для разбиения выражения на отдельные составляющие необходимо создать новый класс Expression, в котором будут распознаваться символы, и будет производиться простой расчет.
Создаем форму главного окна приложения.
Создаем класс Expression.
namespace Numbers
{
/* Алгоритм разбора текстового алгебраического выражения
Пример: "2.6 + 2 - 1 * 3 / 2"
1. Удаляем все пробелы из строки
Пример: "2.6+2-1*3/2"
2. Организуется цикл перебора всех символов строки выражения
3. Выделяем текущий символ в строке
Пример: "2" и сохраняем в переменную числа
4. Набираем символы числа до тех пор, пока не обнаружится символ операции
Пример: "2.6"
5. При обнаружении символа операции сохраняем символ операции и
вызываем повтор разбора выражения, которой будет передаваться выражение
Пример: "2-1*3/2"
6. Операции продолжаются до тех пор пока не будет разобраны все символы
*/
// Класс для калькулятора выражений
public class Expression
{
// Переменная состояния
int state = 0;
// Переменная числа
string number = "";
// Переменная операции
string operation = "";
// Переменная вложенного разбора выражения
Expression expNext;
// Функция разбора выражения
public string Parse(string expression)
{
expression = expression.Replace(" ", "");
// Результат вычислений
string result = "";
// Состояние №0 - начальное состояние разбора строки выражения
// Состояние №1 - определение и выделение числа из строки
// Состояние №2 - определение и выделение оператора из строки
// Состояние №3 - расчет разобранного выражения
// Организуем цикл по символам строки выражения
for (int i = expression.Length-1; i >= 0; i--)
{
// Получение текущего символа строки expression
char c = expression[i];
// Состояние №0 или №1
if (state == 0 || state == 1)
{
if ((c >= '0' && c <= '9') || c == ',')
{
number = c + number; // Собираем число в отдельную переменную
state = 1; // Указываем новое состояние №1
}
else
state = 2; // Указываем новое состояние №2
}
// Состояние №2
if (state == 2)
{
if (c == '+' || c == '-' || c == '*' || c == '/')
{
operation = c.ToString(); // Сохраняем символ операции
state = 3; // Указываем новое состояние №3
}
}
// Состояние №3
if (state == 3)
{
if (i != 0)
{
expNext = new Expression();
// Рекурсивный разбор строки выражения
result = expNext.Parse(expression.Substring(0, i));
break;
}
}
}
if (state == 1)
result = number;
else if (state == 3)
{
OperationType operType = OperationType.Сложение;
switch (operation)
{
case "+":
operType = OperationType.Сложение;
break;
case "-":
operType = OperationType.Вычитание;
break;
case "*":
operType = OperationType.Умножение;
break;
case "/":
operType = OperationType.Деление;
break;
}
Operation oper = new Operation(number, result, operType);
// Расчет простого выражения
result = oper.Execute();
}
else
result = "Ошибка!";
return result;
}
}
}
Теперь необходимо написать обработчик нажатия кнопки «Расчет» на форме.
namespace Calculator2
{
public partial class Form1 : Form
{
// Обработчик события нажатия на кнопку «Расчет»
private void button1_Click(object sender, EventArgs e)
{
// Создаем экземпляр класса Expression
Expression exp = new Expression();
// Вызываем функцию Parse
textBox2.Text = exp.Parse(textBox1.Text);
}
}
}
Таким образом, был разработан калькулятор, распознающий выражение и производящий расчеты такие, как сложение, вычитание, умножение и деление. Разбор выражения, а соответственно и действия производятся по порядку слева направо.
Литература
1. Пунчик, Николай Николаевич. Windows для начинающих. Основы работы в Windows (любой версии - 95/98/2000/ME/XP/Vista/7) / Н. Н. Пунчик. — Минск: Дикта, 2010. — 176 с.: ил. — Шпаргалки для первокурсников. — ISBN 978-985-494-500-2.
2. Лебедев, Алексей Николаевич. Windows 7 и Office 2010. Компьютер для начинающих. Завтра на работу! / А. Н. Лебедев. — СПб.: Питер, 2011. — 251 с.: ил. — Самоучитель. — ISBN 978-5-49807-497-9.
3. Ватаманюк, Александр Иванович. Установка, настройка и восстановление Windows 7 / А. И. Ватаманюк. — СПб.: Питер, 2010. — 272 с.: ил. — На 100%. — ISBN 978-5-49807-603-4.
4. Станек, Уильям. Windows 7 для продвинутых: настройка, работа и администрирование : пер. с англ. / У. Станек. — СПб.: Питер, 2010. — 576 с.: ил. — ISBN 978-5-49807-728-4.
5. Мак-Федрис, Пол. Microsoft Windows 7. Полное руководство : пер. с англ. / П. Мак-Федрис. — Москва: Вильямс, 2010. — 800 с.: ил. — Предм. указ.: с. 794-799. — ISBN 978-5-8459-1614-3.
6. Леонов, Василий. Самоучитель Office 2010 / В. Леонов. — Москва: Эксмо, 2010. — 256 с.: ил. + CD-ROM. — Видеошкола. — Предметный указатель: с. 252-255. — ISBN 978-5-699-40762-0.
7. Стоцкий, Юрий А. Microsoft Office 2010 / Ю. А. Стоцкий, А. А. Васильев, И. С. Телина. — СПб.: Питер, 2011. — 425 с.: ил. — Самоучитель. — Алф. указ.: с. 417-425. — ISBN 978-5-49807-947-9.
8. Курбатова, Екатерина Анатольевна. Microsoft Office Excel 2010 / Е. А. Курбатова. — Москва: Вильямс, 2010. — 408 с.: ил. — Самоучитель. — Предметный указатель: с. 403-408. — ISBN 978-5-8459-1660-0.
9. Таллоч , Митч. Windows Server 2008 Server Core : пер. с англ. : справочник администратора / М. Таллоч. — СПб.: БХВ-Петербург, 2010. — 400 с.: ил. — Справочник администратора. —IT Professional. — ISBN 978-5-9775-0498-0. — ISBN 978-5-7502-0390-1.
10. Яремчук, С. А. Системное администрирование Windows 7 и Windows Server 2008 R2 / С. А. Яремчук, А. Матвеев. — СПб.: Питер, 2011. — 384 с.: ил. — На 100%. — ISBN 978-5-459-00461-8.
11. Нортроп, Тони. Проектирование сетевой инфраструктуры Windows Server 2008 : пер. с англ. / Т. Нортроп, Дж. К. Макин. — 2-е изд., доп. — Москва: Русская редакция, 2012. — 720 с.: ил. — Учебный курс Microsoft. — Словарь терминов: с. 700-704. — ISBN 978-5-7502-0410-6.
12. Руссинович, Марк. Внутреннее устройство Microsoft Windows : пер. с англ. / М. Руссинович, Д. Соломон. — 6-е изд. — Санкт-Петербург: Питер, 2013. — 799 с.: ил. — Мастер-класс. — ISBN 978-5-496-00434-3.
13. Холме, Дэн. Эффективное администрирование. Ресурсы Windows Server 2008, Window Vista, Window XP, Window Server 2003 : пер. с англ. / Д. Холме. — СПб.: БХВ-Петербург Русская Редакция, 2012. — 768 с.: ил. + CD-ROM. — Предм. указ.: с. 727-740. — ISBN 978-5-9775-0408-9. — ISBN 978-5-7502-0377-2.
14. Гальченко, Валерий Григорьевич. Системное программирование в WIN32. Создание Windows приложений [Электронный ресурс] : лабораторный практикум : учебное пособие / В. Г. Гальченко; Национальный исследовательский Томский политехнический университет (ТПУ). — 1 компьютерный файл (pdf; 2.05 MB). — Томск: Изд-во ТПУ, 2012. — Заглавие с титульного экрана. — Электронная версия печатной публикации. — Доступ из корпоративной сети ТПУ. — Системные требования: Adobe Reader.
15. Макки, Алекс. Введение в .NET 4.0 и Visual Studio 2010 для профессионалов : пер. с англ. / А. Макки. — Москва: Вильямс, 2010. — 416 с.: ил. — Для профессионалов. — Предметный указатель: с. 409-412. — ISBN 978-5-8459-1639-6.
16. Парфилова, Надежда Ивановна. Программирование. Основы алгоритмизации и программирования : учебник для вузов / Н. И. Парфилова, А. Н. Пылькин, Б. Г. Трусов; под ред. Б. Г. Трусова. — 2-е изд., испр. — Москва: Академия, 2014. — 240 с.: ил. — Высшее образование. Бакалавриат. —Информатика и вычислительная техника. — Библиогр.: с. 237. — ISBN 978-5-4468-0698-0.
17. Матюхин, Сергей Анатольевич. Программирование и основы алгоритмизации : учебное пособие / С. А. Матюхин; Национальный минерально-сырьевой университет "Горный". — Санкт-Петербург: Изд-во НМСУ "Горный", 2013. — 97 с. — Библиогр.: с. 94. — ISBN 978-5-94211-647-7.
18. Незнанов, Алексей Андреевич. Программирование и алгоритмизация : учебник / А. А. Незнанов. — Москва: Академия, 2010. — 304 с. — Высшее профессиональное образование. Информатика и вычислительная техника. — Библиогр.: с. 301. — ISBN 978-5-7695-6767-4.
19. Программирование : учебник : в 2 т. / под ред. Н. И. Пака. — Москва: Академия, 2013. — Высшее профессиональное образование. Информатика. —Бакалавриат. — ISBN 978-5-7695-9594-3.
20. Гавриков, Михаил Михайлович. Теоретические основы разработки и реализации языков программирования : учебное пособие / М. М. Гавриков, А. Н. Иванченко, Д. В. Гринченков. — Москва: КноРус, 2010. — 178 с.: ил. — Библиогр.: с. 178. — ISBN 978-5-406-00121-9.
21. Вирт, Никлаус. Алгоритмы и структуры данных. Новая версия для Оберона CD : пер. с англ. / Н. Вирт. — Москва: ДМК Пресс, 2010. — 272 с.: ил. + CD-ROM. — Классика программирования. — Библиография в конце глав. — Предметный указатель: с. 270-272. — ISBN 978-5-94074-584-6.
22. Леоненков, Александр Васильевич. Объектно-ориентированный анализ и проектирование с использованием UML и IBM Rational Rose : учебное пособие / А. В. Леоненков. — Москва: БИНОМ. Лаборатория знаний Интернет-Университет информационных технологий, 2010. — 320 с.: ил. — Основы информационных технологий. — Библиогр.: с. 317-318. — ISBN 978-5-9556-0043-7. — ISBN 978-5-94774-408-8.
23. Биллиг, Владимир Арнольдович. Основы объектного программирования на С#(С# 3.0, Visual Studio 2008) : учебное пособие / В. А. Биллиг. — Москва: Интернет-Университет Информационных Технологий БИНОМ. Лаборатория знаний, 2010. — 582 с.: ил. — Основы информационных технологий. — ISBN 978-5-9963-0259-8.
24. Павловская, Татьяна Александровна. C#. Программирование на языке высокого уровня : учебник для вузов / Т. А. Павловская. — Санкт-Петербург: Питер , 2013. — 432 с.: ил. — Учебник для вузов. — Библиогр.: с. 425-426. — Алф. указ.: с. 427-432. — ISBN 978-5-459-01048-0.
25. Немировский, Виктор Борисович. Программирование для инженеров [Электронный ресурс] : учебное пособие / В. Б. Немировский, А. К. Стоянов; Национальный исследовательский Томский политехнический университет (ТПУ). — 1 компьютерный файл (pdf; 1.2 MB). — Томск: Изд-во ТПУ, 2010. — Заглавие с титульного экрана. — Электронная версия печатной публикации. — Доступ из корпоративной сети ТПУ. — Системные требования: Adobe Reader.
26. Дёмин, Антон Юрьевич. Программирование на C# [Электронный ресурс] : учебное пособие / А. Ю. Дёмин, В. А. Дорофеев; Национальный исследовательский Томский политехнический университет (ТПУ), Институт кибернетики (ИК), Кафедра информатики и проектирования систем (ИПС). — 1 компьютерный файл (pdf; 2.3 MB). — Томск: Изд-во ТПУ, 2013. — Заглавие с титульного экрана. — Электронная версия печатной публикации. — Доступ из корпоративной сети ТПУ. — Системные требования: Adobe Reader.
27. Вайсфельд, Мэтт. Объектно-ориентированное мышление : пер. с англ. / М. Вайсфельд. — Санкт-Петербург: Питер, 2014. — 304 с.: ил. — Библиотека программиста. — Библиография в конце глав. — ISBN 978-5-496-00793-1.
28. Иванова, Галина Сергеевна. Объектно-ориентированное программирование : учебник / Г. С. Иванова, Т. Н. Ничушкина. — Москва: Изд-во МГТУ, 2014. — 456 с.: ил. — Библиогр.: с. 450. — Предметный указатель: с. 451-452. — ISBN 978-5-7038-3921-8.
29. Рихтер, Джеффри. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C# : пер. с англ. / Дж. Рихтер. — 3-е изд. — СПб: Питер, 2012. — 928 с.: ил. — ISBN 978-5-459-00297-3.
30. Хорев, Павел Борисович. Объектно-ориентированное программирование : учебное пособие / П. Б. Хорев. — 3-е изд., испр. — Москва: Академия, 2011. — 448 с.: ил. — Высшее профессиональное образование. Информатика и вычислительная техника. —Бакалавриат. — Библиогр.: с. 444-445. — ISBN 978-5-7695-8091-8.
31. Павловская, Татьяна Александровна. C#. Программирование на языке высокого уровня : учебник для вузов / Т. А. Павловская. — Санкт-Петербург: Питер , 2014. — 432 с.: ил. — Учебник для вузов. — Библиогр.: с. 425-426. — Алф. указ.: с. 427-432. — ISBN 978-5-496-00861-7.
32. Вагнер, Билл. С#. Эффективное программирование : 50 рекомендаций по усовершенствованию программирования на C# : пер. с англ. / Б. Вагнер. — Москва: Лори, 2013. — 256 с. — ISBN 978-5-85582-349-3.