close

Вход

Забыли?

вход по аккаунту

?

5. Розд л 2

код для вставкиСкачать
РОЗДІЛ 2. ПРОЕКТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
ЗА НАПРЯМКОМ КУРСОВОЇ РОБОТИ
2.1. Розробка математичної моделі та алгоритмів функціонування системи
За темою курсового проекту мені потрібно створити програмний додаток, що виконує функції інженерного калькулятора. Як вже зазначалося у першому розділі, програма має містити набір елементів управління та пенель елементів меню, для зручності використання програмного додатку. Елементи меню будуть містити такі вкладки:
o Вигляд
* Простий
* Інженерний
* Програміста
o Правка
* Вставити
* Копіювати
o Довідка
* Дивитись довідку
* Про програму * Вихід
На рисунку 2.1 зображено основний алгоритм роботи програмного додатку. Саме цим алгоритмом показано дії користувача при завантаженні програми. Всі дії з програмним додатком розпочинаються з того, що при запуску проводиться (0) ініціалізація елементів меню та розміщення компонентів управління на формі. Далі перед користувачем постає вибір (1) діяльності. При цьому він може вибрати вид (2) калькулятора, скористатися правкою (3) вхідних даних або ж звернутися за довідкою (4). Для різних режимів роботи калькулятора (5) користувач може вибрати такі: простий (8), інженерний (9) та програміста (10). Елемент меню правка (2) дає змогу копіювати (14) або вставляти (15) дані. Вид довідки (7) показує, що користувач має змогу проглянути допомогу (16), інформацію про програмний продукт (17) та вийти з нього (18), про чому буде здійснено вихід з програми (19).
Рисунок 2.2 демонструє докладний алгоритм роботи калькулятора в простому режимі. Спочатку (0) користувач за допомогою елементів управління (кнопки) вводить дані (1) при цьому здійснюється перевірка (2) на введення числа. Якщо на вході буде число, то воно переміститься до акумулятора (3), а якщо функція, то буде здійснюватися перевірка (4) наявності числа в акумуляторі. При відсутності - буде здійснено перехід на повторне введення даних (1), в іншому випадку проводиться розпізнання та запис (5) введеної функції. Після чого користувач повинен ввести друге число (6). Далі проводиться зчитування першого числа з аккумулятора (7), зчитування другого числа з дисплею калькулятора (8) та здійснюється розрахунок по введеній функції (9). Результат виводиться на дисплей (10) і користувач може розпочинати нові обрахунки (11). Рисунок 2.1 - Загальний алгоритм роботи програми.
Рисунок 2.2 - Алгоритм роботи програми в простому режимі. За виконання всіх розрахунків в режимі інженерного калькулятора відповідає окремий клас - "Notation" (Обернена польська нотація). За допомогою такого підходу, в програмі реалізовано роботу з дужками та пріоритети. Алгоритм Оберненої польської нотації також називають бездужковим виразом, оскільки рядок, що на вході містить дужки, спочатку зчитується, а потім виводиться на екран вже без дужок та з правильною розстановкою операцій по пріоритету. Сам алгоритм я розбив на дві частини. Перша частина відповідає за перетворення вхідного рядка в постфіксну нотацію, а друга - за розрахунок вже створеної постфіксної нотації. Перша та друга частини схеми наведені у додатку А.
Розглянемо ближче процеси перетворення, що проходять в першій частині схеми. Все починається з того, що проходить зчитування вхідного рядка (0), ініціалізації елементів стеку, черги та, так званого, маркера (Токена) (1). Далі проходить створення масиву з елементів вхідного рядка (2), шляхом виділення чисел, операцій, функцій, констант та дужок. Після чого проходить перебір елементів масиву (4). На вході може бути число (5), дія (6) та дужка (7). При вході числа, воно зразу ж подається у вихідну чергу (8). Якщо ж на вході дія (6), тоді ми виконуємо перевірку (9) дії, що прийшла. Якщо прийшла константа (12) поміщаємо її у вихідну чергу, якщо функція (11) - в стек (14), а якщо оператор (10), то нам потрібно виконати перевірку, для встановлення пріоритетів операторів. Якщо стек порожній (13), то заносимо число до стеку (14), а якщо ні - Присвоюємо верхньому елементу стеку Токен (15), і починаємо перебір (16). При зустрічі операцій додавання чи віднімання (17), вони зразу передаються до стеку, а якщо операції множення чи ділення - тоді ми видаляємо елемент зі стеку (18) і поміщаємо його у вихідну чергу. Після цього виконуємо перевірку на порожність стеку операцій, якщо ж стек порожній, то ми повертаємось до головного перебору, а якщо ні - знову присвоюємо токен верхньому елементу стеку і повторюємо дії (17). Розглянемо випадок коли на вході буде дужка (7). При такій ситуації ми виконуємо перевірку, щоб знати яка з двох дужок на вході (19). Якщо дужка ліва, то ми переносимо її до стеку та повертаємось до головного перебору, а якщо права (20), тоді присвоюємо верхній елемент стеку токеном, починаємо перебирати значення стеку (21) поки не зустрінемо ліву дужку, при цьому ми видаляємо всі інші елементи, які знаходяться до лівої дужки (18) і переміщаємо їх у вихідну чергу. При кожній такій дії ми перевіряємо стек на наявність у ньому елементів (13), якщо ж стек порожній то це буде помилкою (22), оскільки ми не можемо зустріти праву дужку не зустрівши лівої. Це говорить про те, що вхідний рядок мав невірний , або не коректний формат вводу. Якщо ж стек не порожній, тоді ми присвоюємо токен - верхній елемент (15) стеку і повторюємо останні операції. Коли ми зустріли в стеці ліву дужку ми її видаляємо і знову робимо перевірку на вміст стеку, якщо в стеку зустрічається функція (24) ми видаляємо її зі стеку поміщаємо у вихідну чергу (18) та продовжуємо головний перебір (25), якщо ж ні - то помилка(22). Коли елементи вхідної послідовності закінчилися ми виходимо з головного циклу (26) і виконуємо видалення зі стеку елементів(18) з їх переміщенням до вихідної черги(18) з перевіркою на ліву дужку (30). Якщо ми зустрінемо ліву дужку це буде помилкою (22). Коли ж в стеку не буде жодного елемента ми виходимо з циклу (30) та починаємо перетворення вихідної черги у рядок (31), при цьому елементи черги записуються у рядок в такому порядку в якому вони надходили до черги. Після цих перетворень ми маємо правильну постфіксну нотацію (32).
Друга частина схеми виконує розрахунок операцій, що записані в постфіксній нотації. Все починається з того, що проводиться зчитування постфіксного запису (0), який був сформований з вхідної послідовності за допомогою першої частини алгоритму. Створення елементів стеку (1) та маркера (Токена). Далі слідує вибірка всіх символів з постфіксної нотації (2), при чому здійснюється перевірка (3) на вхідний символ. На вході може бути число (4) або дія (5). Якщо - число, то поміщаємо його в стек (6), а якщо дія, то виконуємо перевірку на її вид (7). Якщо прийшла константа (8), то обчислюємо її значення та поміщаємо результат в стек (6). Також може бути оператор (9), тоді виконуємо перевірку (12) чи є в стеку 2 чи більше елементів, якщо немає тоді буде помилка (14) в постфіксній нотації, в іншому випадку беремо верхній елемент зі стеку (13) і присвоюємо йому операнд 2 (15) та видаляємо його зі стеку (16). Потім знову беремо елемент зі стеку (13), присвоюємо йому операнд 1 (17) та видаляємо елемент зі стеку (16). Після цього обчислюємо результат (18) та заносимо його в стек (6) і повертаємось до головного перебору. Як вже було зазначено, на вхід може прийти і функція (10), при цьому ми робимо перевірку вмісту стеку на наявність більше одного елементу (19). Якщо в стеку менше одного елементу це говорить про помилку (14) в постфіксній нотації, в іншому випадку ми беремо елемент зі стеку (13), присвоюємо йому операнд 1 (17) та видаляємо елемент зі стеку (16). Після чого проводимо розрахунок значення функції (20) із занесенням результату в стек (6) та повертаємось до основного перебору. Коли в постфіксній нотації не залишилося елементів, ми виходимо з основного циклу (21) і робимо останню перевірку на вміст стеку (22). Якщо в стеку залишилося одне значення, то ми витягуємо його зі стеку і оголошуємо кінцевий результат розрахунків (23) та виводимо його на екран (24), в іншому випадку - помилка (14), яка говорить про невірно записану постфіксну нотацію.
В режимі програміста алгоритм роботи мало в чому відрізняється від алгоритму роботи програмного додатку в простому режимі. Відмінністю є те, що в режимі програміста додається ще одна перевірка на введеної функції, з одним чи двома аргументами (6). Коли на вхід проходить функція з одним аргументом, то зразу ж здійснюється зчитування числа з аккумулятора (11) та її розрахунок (10). Після чого результат виводиться на дисплей (12) і користувач може продовжувати роботу (13) з новими числами. Даний алгоритм наведено на рисунку 2.3. Рисунок 2.3 - Алгоритм роботи калькулятора в режимі програміста.
2.2. Розробка схеми класів
Для реалізації програмного додатку реалізовано декілька класів, які допомагають зробити програмний код відносно зручним у читанні. В проекті певні класи створюються конструктором (наприклад, клас Program чи Form1). Далі, створений клас при розробці потрібного програмного забезпечення буде розширюватися власними властивостями та методами.
При розробці програмного додатку реалізовано клас Form1 з батьківського класу Form, статичний клас Program, з якого починається запуск програми, клас myButton, успадкований від класу Button , який відповідає за створення елементів управління - кнопок, та клас ReversePolishNotation, що виконує розрахунки результатів.
Клас myButton відповідає за створення та розміщення кнопок на формі. В даному класі реалізовано функцію AddButtons, яка відповідає за додавання елементів управління на головну форму в кожному з режимів.
Клас ReversePolishNotation - це клас, який реалізує алгоритм Оберненої польської нотації. Він використовується в даному програмному продукті для розрахунку складних комбінованих функцій. В даному класі реалізовано дві основні функції Parse та Evaluate, які відповідають за переведення в постфіксну нотацію та результат її розрахунку відповідно.
2.3 Проектування програмного забезпечення
В першу чергу користувач бачить інтерфейсну частину, з неї ми розпочнемо. Для створення інтерфейсноъ частини було створено клас MyButton. В цьому класі реалізовано створення відповідних екземплярів кнопок, за допомогою яких проходять майже всі процеси в програмному додатку. Даний клас представляє собою набір методів для роботи з програмним забезпеченням. Всі елементи управління розміщуються на елемент управління - Panel.
Який в свою чергу стає елементом управління на головній формі. Для реалізації інтерфейсу програми використана велика кількість різних елементів управління, таких як: myButton, Label, TextBox, GroupBox, Panel, RadioButton, MenuStrip та інші. Для того щоб задати його на панелі треба обов'язково створити екземпляр класу елемента управління, його позицію на панелі, назву, розміри, текст на елементі управління, колір. Для прикладу візьмемо задання кнопки:
myButton btn_mc = new myButton(form);
btn_mc.Location = new System.Drawing.Point(8, 86);
btn_mc.Name = "btn_mc";
btn_mc.Size = new System.Drawing.Size(35, 30);
btn_mc.Text = "MC"; btn_mc.UseVisualStyleBackColor = true;
btn_mc.FlatStyle = FlatStyle.Standard;
form.panelSimple.Controls.Add(btn_mc); Також прописуються дії які виконують ці кнопки.
При переключенні між різними режимами було використано метод - "Dispose", було використано для елементів управління Panel: switch (checkState)
{
case 1:
this.panelSimple.Dispose();
break;
case 2:
this.panelScientifical.Dispose();
break;
case 3:
this.panelProgrammer.Dispose();
k = 0;
break;
}
Дана частина коду реалізує знищення елементів управління з головної форми за допомогою описаного методу Dispose.
Для реалізації роботи програмного додатку в різних функціональних режимах було використано екземпляр класу MenuStrip. За допомогою меню ми маємо можливість довільно перемикатись між різними режимами роботи калькулятора з достатньою легкістю. Для реалізації кожного з режимів було створено відповідні функції: Simple - для простого режиму, Scientifical - для інженерного режиму та Programmer - для режиму програміста. Кожна з даних функцій викликається натиском на відповідний пункт меню. В свою чергу в кожної з цих функцій існують ще декілька, які формують інтерфейс і функціональність програмного продукту. Важливими методами класу MyButton є - AddSimpleButtons, AddScientificButtons та AddProgrammerButtons. Дані методи відповідальні за створення та розміщення таких елементів управління, як кнопки .
В кожному функціональному режимі змінюється розмір головної форми відповідно до обраного режиму. В режимі інженерного калькулятора користувач додатку має можливість обирати форму виведення обрахунків тригонометричних функцій за допомогою обраного режиму: "Радіани" або "Градуси". В режимі програміста перед користувачем постає можливість працювати з числами в різних системах числення (Bin, Oct, Dec, Hex), а також з різною довжиною чисел(1 байт, 2 байта, 4 байта та 8 байт). При переході в даний режим одразу стає помітно панель двійкової системи числення. За допомогою даної панелі користувач має можливість наглядно спостерігати за перетвореннями з двійкової системи числення в десяткову. Прописані різні додаткові методи:
Методи RoL та RoR дають змогу циклічно проводити зсув числа на один біт вліво та вправо. Дані методи за основу використовують оператори зсуву вліво "<<" та вправо ">>", але для досягнення потрібного результату нам потрібно провести ще ряд операцій пов'язаних з зсувами числа в старші та молодші розряди, з подальшим їх підсумовуванням та виведенням на дисплей калькулятора.
Методи Lsh та Rsh спрямовані на простий зсув числа вліво "<<" та вправо ">>" на один біт з можливістю працювати з різною довжиною числової послідовності.
Для правильного обрахунку введених користувачем даних було розроблено класс, який реалізує зчитування, введених користувачем даних та операцій над ними з текстового поля додатку, перетворення в постфіксну (бездужкову) нотацію та подальший обрахунок введеної послідовності. Та виводить всі помилки які можуть виникати, та проектування програмного забезпечення
Висновки до другого розділу
На даному етапі виконання курсової роботи проведено розробку загального і функціонального алгоритмів програми. Здійснено перехід від постановки задаіч до безпосередньої реалізації програмного забезпечення.
Розроблено схему класів, яка включає розробку власних класів, визначено основні методи та властивості класів.
Документ
Категория
Рефераты
Просмотров
67
Размер файла
224 Кб
Теги
розд
1/--страниц
Пожаловаться на содержимое документа