ТОП 10:

Выбор методов решения задачи и разработка основных алгоритмов предметной области



 

Для реализации подсчёта выражений (а так же это понадобится в вычислении интегралов, производных) был выбран алгоритм, который преобразует инфиксную запись числа (например (2+3)*4) в постфиксную (например 2 3 + 4 *) .В результате преобразований выражение получается без скобок, что дает возможность легко считать его аппаратно. Для преобразования в постфиксную запись был выбран «Алгоритм сортировочной станции», т. к. этот алгоритм имеет линейную сложность O(n), и может так же работать с функциями и переменными. ниже приведен пример алгоритма разбора.

 

Пока не все токены обработаны:

 

ñ Прочитать токен.

ñ Если токен — число, то добавить его в очередь вывода.

ñ Если токен — функция, то поместить его в стек.

ñ Если токен — разделитель аргументов функции (например запятая):

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

ñ Если токен — оператор op1, то:

ñ Пока присутствует на вершине стека токен оператор op2, и

Либо оператор op1 лево-ассоциативен и его приоритет меньше чем у оператора op2 либо равен,

или оператор op1 право-ассоциативен и его приоритет меньше чем у op2,

переложить op2 из стека в выходную очередь;

ñ положить op1 в стек.

ñ Если токен — открывающая скобка, то положить его в стек.

ñ Если токен — закрывающая скобка:

ñ Пока токен на вершине стека не является открывающей скобкой, перекладывать операторы из стека в выходную очередь.

ñ Выкинуть открывающую скобку из стека, но не добавлять в очередь вывода.

ñ Если токен на вершине стека — функция, добавить ее в выходную очередь.

ñ Если стек закончился до того, как был встречен токен открывающая скобка, то в выражении пропущена скобка.

ñ Если больше не осталось токенов на входе:

ñ Пока есть токены операторы в стеке:

ñ Если токен оператор на вершине стека — открывающая скобка, то в выражении присутствует незакрытая скобка.

ñ Переложить оператор из стека в выходную очередь.

ñ Конец.

ñ 2. Проектирование программного продукта

Разработка интерфейса пользователя

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

 

Разработка диаграммы состояний интерфейса

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

Из этого множества было принято решение использовать интерфейс со свободной навигацией (графический пользовательский интерфейс). Так же его называют WYSIWYG (What You See Is What You Get - что видишь, то и получишь). В отличие от интерфейса-меню, интерфейс со свободной навигацией обеспечивает возможность осуществления любых допустимых в конкретном состоянии операций, доступ к которым возможен через различные интерфейсные компоненты. Например, окна программ, реализующие интерфейс Windows обычно содержат:

– меню различных типов.

– различного вида компоненты ввода данных.

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

Рисунок 2– Диаграмма состояний интерфейса.

 

1 — Нажатие на кнопку «Закрыть»/Выход в главное меню

2 — Нажатие на кнопку «Справка»

3 — Нажатие на кнопку «Матрица»

4 — Нажатие на кнопку «Назад»/Выход в главное меню

5 — Нажатие на кнопку «Калькулятор»

6 — Нажатие на кнопку «Назад»/Выход в главное меню

5 — Нажатие на кнопку «Калькулятор»

6 — Нажатие на кнопку «Назад»/Выход в главное меню

7— Нажатие на кнопку «Анализ»

8— Нажатие на кнопку «Назад»/Выход в главное меню

9 — Нажатие на кнопку «Производная..»

10 — Нажатие на кнопку «Назад»/Переход на форму «Анализ»

11 — Нажатие на кнопку «Интеграл»

12 — Нажатие на кнопку «Назад»/Переход на форму «Анализ»

13 — Нажатие на кнопку «Выход»/Завершение работы программы.

 

Разработка меню

Для того, чтобы пользователь мог быстро и легко перемещаться по программе было принято решение объединить все основные функции в главное меню. Программа содержит такие функции, как: «Калькулятор», «Работа с матрицами», «Вычисление производной», «Вычисление определенного интеграла». Так как функции «Вычисление производной» и «Вычисление определенного интеграла» с математической точки зрения относятся к одному типу, то было принято решение объединить их в один вид - «Анализ функции». Иерархия меню представлено на рисунке 3.

 
 

 


Рисунок 3 — Структурная схема меню.

Переход на форму может осуществляться при нажатии на рисунок, или при нажатии на кнопку. Это даст пользователю возможность не задумываться над тем, что нажимать для перехода на ту или иную форму.

Поэтому меню было решено реализовать в виде смешанного (пиктографического и кнопочного) меню, вид которого показан на рисунке 4.

 

Рисунок 4 -Главное меню программы.

Меню нижнего уровня также было решено реализовать в виде смешанного на отдельной форме ( см. Рисунок 5)

 

 

 

Рисунок 5 – Меню нижнего уровня «Анализ функции»

 

2.1.3. Разработка форм ввода вывода

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

В окне формы «Калькулятор» пользователь должен ввести функцию для вычисления значения её в точке (функция зависит от переменных x и y, по умолчанию равных 0). Также пользователь должен иметь возможность ввести выражение (т.е независящую от переменных функцию). Для ввода было решено использовать Line Edit, т. к. размер информации, вводимой пользователем сравнительно небольшой. Вид формы приведен на рисунке 6.

 

 

 
 

Рисунок 6 –Вид формы «Калькулятор»

 

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

 
 

Для того, чтобы информация не занимала много места было принято решение использовать label + scrollArea. Это дает возможность сжать большой объем информации. Вид формы приведен на рисунке 7.

Рисунок 7 –Вид формы «Справка»

 
 

Окно формы «Производная в точке» (см. Рисунок 8) аналогично окну формы «Калькулятор», с одним отличием- в нем дифференцирование проводится по переменной x,а y независимая переменная.

 

Рисунок 8 – Вид формы «Производная в точке»

 
 

В окне формы «Вычисление интеграла помимо ввода функции(аналогично с формой «Калькулятор») следует сделать границы интегрирования (по умолчанию от 0 до 5). Так же в связи с тем, что для различных функций следует использовать различные методы интегрирование, было принято решение добавить выбор метода интегрирования (прямоугольников, трапеций, Симпсона). Для выбора метода интегрирования можно было сделать 3 кнопки расчёта, но т. к. Qt использует механизм сигналов и слотов было принято решение выбор метода интегрирования производить через RadioButton. Вид формы представлен на рисунке 9.

Рисунок 9 — Вид формы «Вычисление интеграла»

Для ввода информации на форму «Работа с матрицами необходимо предусмотреть ввод размерности матрицы и ввод самой матрицы. Для ввода матрицы было решено использовать TableWidget, а для ввода размерности- Line Edit. Это даст возможность пользователю вводить матрицы больших размерностей, не занимая всю форму.

Так как операции сложения и вычитания практически идентичны было принято решение не создавать для каждой из них кнопку, а разделить их с помощью RadioButton.

Вид формы представлен на рисунке 10.

 
 

Рисунок 10 –Вид формы «Работа с матрицами» в состоянии введенных матриц.

 

При нажатии на кнопки:

- «+» или «-»

- A*B

- A^(-1)

Должно появиться(на форме) дополнительное окно TableWidget, в котором будет выводится результат. Т.к. TableWidget хорошо работает с таблицами, что нужно вывода результирующей матрицы.(см. Рисунок 11)

А при нажатии на кнопку Det ABдолжны появляться дополнительные Line Edit, в которые будут выводиться значения определителя для матриц.

 


Рисунок 11 – Вид формы «Работа с матрицами» в состоянии произведения матриц

 







Последнее изменение этой страницы: 2016-08-26; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.233.215.196 (0.008 с.)