Эксплуатационная документация




Мониторинг процесса выполнения курсового проекта (работы)

№ этапа Этап курсового проекта, работы выполнил и представил результаты руководителю проекта (работы), Работу по этапу курсового проекта (работы) принял на рассмотрение, Рекомендации и замечания по этапу курсового проекта (работы) выдал исполнителю, Оценка выполнения этапа курсового проекта, (работы)(в соответствии с балльно-рейтинговой системой) Комментариируководителя курсового проекта (работы)  
           
           
           
           
           

 


Содержание

 

1. Список требований заказчика

2. Функциональная спецификация

3. Проектная спецификация

4. Эксплуатационная документация

5. Проектная документация

Приложение 1. Текст программы
Список требований заказчика

 

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

Должны быть предусмотрены следующие встроенные функции:

· Сложение: +

· Вычитание: -

· Умножение: *

· Деление: /

· Присваивание переменной значения: =

В операциях могут участвовать как числа, так и переменные. И те, и другие могут быть отрицательными.


Функциональная спецификация

 

Данная консольная программа является транслятором инфиксных выражений в LISP-подобный язык.

В качестве входных параметров программа получает обычное алгебраическое выражение. Например:

a = (-3.4)

a * 2

c=(b / (-a)) + (3.14 + 1.2 * (-a))/7

В транслятор могут вводиться:

· Присваивания =

· Различные арифметические знаки: +, -, *, /

· Скобки (,)

· Десятичные положительные и отрицательные цифры -1.2, 3.1564

· Положительные и отрицательные переменные ABC, -E

В результате работы, программа выведет выражение в LISP-подобной (префиксной) форме. Например:

#(=, a, -3.4)’

#(*, a, 2)’

#(=, c, #(+, #(/, b, -a), #(/,#(+, 3.14, #(*,1.2, -a),7))))’

Ограничения на вводимые функции:

· Максимальная длина строки 1000 символов

· Максимальная длина названия переменной 15 символов

· Максимальная длина числа 15 символов

· В десятичных числах вместо запятой используется точка

(Например выражению 3,14 соответствует 3.14)

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

· В выражении не может быть более одного знака “=”

· Отрицательные числа и переменные должны быть заключены в скобки. Например, выражению -2*2 соответствует (-2)*2

В случае, если данные правила не будут соблюдены, тогда программа выдаст сообщение об ошибке и завершит свою работу.


Проектная спецификация

.

Для реализации данной программы необходимо использовать за шаблон LISP-подобный язык. Формат перевода функции должен быть в виде:

#(имя_функции, параметр1, …)’

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

· В программе должно быть реализовано 2 основных модуля: модуль проверки и модуль трансляции.

· Исходные выражения в инфиксной форме принимаются программой построчно через stdin в строчную переменную.

· Далее необходимо разбить каждое строку на лексемы, записать каждую в дек и проверить коррекцию этих лексем. Так же необходимо проверить коррекцию последовательности самих этих лексем. Целесообразнее делать проверку на основе конечного автомата Мура.

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

4+5*6

6*5+4

4(56*)+

(*65)4+

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

· После окончания перевода дека и его повторной реверсии, необходимо передать дек в функцию расстановки скобок и метасимволов.

· Далее необходимо вывести полученное выражение в stdout и удалить рабочий дек.


Эксплуатационная документация

 

Указания для работы с программой:

1) Для начала работы нажмите на файл zapusk.bat.

2) Перед вами высветится черное консольное окно с надписью:

«Введите выражение. Максимальная длина 1000 символом».

3) В данное окно введите Ваше алгебраическое выражение, по описанным выше правилам (см. Функциональная спецификация) и нажмите Enter.

4) В случае, если программа выдает ошибку, перепроверьте правильность введенных данных.

· Если ошибка «Проверьте баланс скобок», то следует проверить количество открывающихся и закрывающихся скобок

· Если ошибка «Ошибка синтаксиса», то следует перепроверить правильность введенных переменных, знаков, точек и тд(см. Функциональная спецификация)

Далее следует повторить ввод выражения, исправив ошибки.

5) В случае, если выражение было введено правильно, то программа выведет на экран выражение в требуемой форме.

Если необходимо завершить работу программы, то нажмите крестик в левом верхнем углу.


Проектная документация

В данной программе используются следующие методы:

int main()

Рабочая функция, в которой происходит принятия потока в stdin построчно, считывает из нее функция cin.getline() в переменную string. Далее идет вызов функций: удаления пробелов(delite_space()), проверка баланса скобок(string_work()). В случае если проверка пройдена успешно, main передает строку в функцию работы со строкой (string_work()). В случае завершения работы, функция возвращает 0.

 

char *delite_space(const char *str)

В данной функции происходит удаление всех пробелов.

Создается строка(char *result), в которую копируется из string все, кроме пробелов. В результате работы функции возвращается строка result.

 

int bkt(char *str)

В данном методе идет подсчет баланса скобок.

В результате работы программы возвращается либо перевес скобок, либо 0 (в случае, если количество открывающихся скобок равно количеству открывающихся). В случае, если возвращаемое значение не равно нулю, то выдается сообщение об ошибке.

 

int string_work(char *str)

В данной функции идет работа со строкой. Сначала вызывается функции проверки синтаксиса (check_syntax()). В случае, если проверка не пройдена, выдается сообщение об ошибке. Далее вызывается функция трансляции дека (translation()) и вывод преобразованного выражения.

 

int check_syntax(char *str, deque <char*> & deq)

Функция проверяет, какого вида у нас выражение (a=b+c или b+c). Далее она передает полученную строку во вторую часть проверки(proverka()), которая в свою очередь возвращает результат работы (true или false).

 

int proverka(char *str, int i, deque <char*> & deq)

В данном методе идет вызов функции деления строки на лексемы и проверка коррекции последовательности этих лексем. Выполнено на основе автомата Мура. Возвращает значения SUCCESS или FAIL.

 

 

void tokens(char *str, int k, deque <char*> & target)

В данной функции идет деление строки на лексемы и запись каждой отдельной лексемы в дек. Возвращает полученный дек.

 

int avtomat(char *str)

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

 

void translation(deque <char*> & deq, int st)

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

 

void reverse(deque <char*> & deq)

Данная функция инвертирует дек (записывает наоборот).

 

void form_postfix(deque <char*> & deq)

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

 

void converter(deque <char*> & deq, int st)

В данном методе происходит правильная расстановка скобок, запятых и служебных символов. Расстановка идет с учетом того, какого вида является выражение (a=b+c или b+c).

 

string rus(char s[ ])

Данная функция выполняет перевод строки Windows в Dos для удобства общения с пользователем.




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: