Задание 1
Реализовать класс, обеспечивающий разбор арифметического выражения посредством преобразования в обратную польскую запись.
Преобразование выражения в обратную польскую запись
Как правило, арифметические выражения удобно преобразовывать в обратную польскую запись (ОПЗ), чтобы избавиться от скобок, содержащихся в выражении. Выражения, преобразованные в ОПЗ, можно вычислять последовательно, слева направо. Для преобразования выражения в ОПЗ понадобится стек для переменных типа string, т.к. исходное выражение мы получаем в виде строки. Рассматриваем поочередно каждый символ (или множество символов, которые образуют число):
- Если этот символ - число (или переменная), то просто помещаем его в выходную строку.
- Если символ - знак операции (+, -, *, / ), то проверяем приоритет данной операции.
- Операции умножения и деления имеют наивысший приоритет (допустим он равен 3).
- Операции сложения и вычитания имеют меньший приоритет (равен 2).
- Наименьший приоритет (равен 1) имеет открывающая скобка.
Получив один из этих символов, мы должны проверить стек:
- Если стек пуст, или находящиеся в нем символы (а находится в нем могут только знаки операций и открывающая скобка) имеют меньший приоритет, чем приоритет текущего символа, то помещаем текущий символ в стек.
- Eсли символ, находящийся на вершине стека имеет приоритет, больший или равный приоритету текущего символа, то извлекаем символы из стека в выходную строку до тех пор, пока выполняется это условие; затем переходим к пункту 1).
- Если текущий символ - открывающая скобка, то помещаем ее в стек.
- Если текущий символ - закрывающая скобка, то извлекаем символы из стека в выходную строку до тех пор, пока не встретим в стеке открывающую скобку (т.е. символ с приоритетом, равным 1), которую следует просто уничтожить. Закрывающая скобка также уничтожается.
- Если вся входная строка разобрана, а в стеке еще остаются знаки операций, извлекаем их из стека в выходную строку.
Алгоритм вычисления выражения, записанного в ОПЗ
Для реализации этого алгоритма используется стек для чисел (или для переменных, если они встречаются в исходном выражении). Алгоритм очень прост. В качестве входной строки мы теперь рассматриваем выражение, записанное в ОПЗ:
- Если очередной символ входной строки - число, то кладем его в стек.
- Если очередной символ - знак операции, то извлекаем из стека два верхних числа, используем их в качестве операндов для этой операции, затем кладем результат обратно в стек. Когда вся входная строка будет разобрана в стеке должно остаться одно число, которое и будет результатом данного выражения.
Проверочные тесты смотри в .doc файле
Задание 2
Цель работы.
Познакомиться с возможностями сетевого взаимодействия приложений на основе протокола TCP.
Краткие теоретические сведения.
Сокет - конечная точка связи двустороннего канала между 2 процессами, выполняющимися либо на одном, либо на разных компьютерах, соединенных сетью. При соединении 2-х сокетов образуется канал, через который можно передавать данные в обе стороны. Одна сторона канала называется сервером, другая - клиентом. Существует 2 вида сокетов: потоковые и дейтаграммные.
Потоковые сокеты работают с установкой соединения, обеспечивая надежную идентификацию обоих сторон, гарантируют целостность и успешность доставки данных.
Основываются на протоколе TCP.
Дейтаграмные сокеты работают без установки соединения и не обеспечивают ни идентификации отправителя, ни контроля успешности доставки данных. Ввиду этого они заметно быстрее потоковых. Основываются на протоколе UDP.
Сокеты связываются между собой через порты.
Задание.
Разработать на языке C# клиент-серверное приложение – арифметический калькулятор. Клиентская программа предоставляет пользователю интерфейс ввода арифметического выражения, отправляет его серверу, получает и отображает пользователю итоговый результат. Соответственно, серверная программа принимает арифметическое выражение, вычисляет и отправляет клиенту результат. Разбор и вычисление арифметического выражения осуществляется посредством ОПМ. Реализация поддержки одновременной работы сервера с несколькими клиентами обязательна. Программы консольного типа.