
- •Анотація
- •1 Техніко-економічне обґрунтування технічного завдання на курсову роботу
- •1.1 Вимоги користувача
- •1.2 Аналіз предметної області
- •1.3 Вибір методу вирішення основної задачі
- •2 Розробка алгоритмів розв’язку задачі
- •2.1 Алгоритм побудови робочого поля
- •2.2 Покроковий алгоритм
- •2.3 Розробка меню
- •3 Програмна реалізація
- •3.1 Вибір мови програмування
- •3.2 Програмування інтерфейсу
- •3.3 Розробка програми
- •4 Тестування, перевірка правильності роботи
- •4.1 Готування тестування
- •4.2 Аналіз результатів роботи
- •Висновки
- •Перелік посилань
- •Література
- •Додаток а – Лістінг
3 Програмна реалізація
3.1 Вибір мови програмування
Для розробки програми на курсову роботу автором була обрана мова програмування C# що працює з .NET Framework версії 4.0 під операційну систему Windows. Слід також зазначити, що існує реалізація C# і на такі операційні системи, як GNU/Linux, Solaris, Mac OS X. Це середовище Mono і завдяки його є можливість з мінімальною кількістю виправлень скомпілювати програмний код у будь-якій з цих операційних систем.
C# — об'єктно-орієнтована мова програмування з безпечною системою типізації для платформи .NET. [4]
Мова C# активно використовується при створенні прикладних додатків, у тому числі й для розробки Web-Додатків, баз даних, GUI. Завдяки продуманій об’єктно-орієнтованій структурі, С# є відмінним інструментом швидкої розробки створення компонентів. Такі можливості, як "збирання сміття", автоматична ініціалізація перемінних, неможливість створення посилання на неіснуючу область пам'яті полегшують роботу й допомагають уникнути потенційних помилок. Перевагами мови C# є зручність вивчення об’єктно-орієнтованого програмування, наявність значної кількості вільно доступних середовищ розробки, переважна більшість з яких підтримує візуальне програмування, та повна придатність для забезпечення професійної діяльності фахівців-програмістів.
Об’єктно орієнтовані мови програмування як C# та Java є прямими наслідниками мови С++, адже ці мови спрямовані на вдосконалення та полегшення написання програми. Для ефективної роботи в оточенні CLR і підвищення ефективності роботи програмістів у мову C# було внесено значну кількість спрощень порівняно з C++. Деякі із них основані на таких можливостях, як виключення окремого заготовочного файлу та препроцесора та інше.
Таким чином, як базовою мовою програмування серед C#\С++\ Java було обрано С#, якa для нашого випадку є найбільш сприятливою.
3.2 Програмування інтерфейсу
Графічний інтерфейс користувача (ГІК, англ. GUI, Graphical user interface) — інтерфейс між комп'ютером і його користувачем, що використовує піктограми, меню, і вказівний засіб для вибору функцій та виконання команд. Зазвичай, можливе відкриття більше, ніж одного вікна на одному екрані. Це, також, система засобів для взаємодії користувача з комп'ютером, заснована на представленні всіх доступних користувачеві системних об'єктів і функцій у вигляді графічних компонентів екрану (вікон, значків, меню, кнопок, списків і т. п.). [5] На даний момент графічний інтерфейс підтримують і активно використовують такі операційні системи, Mac OS, Ubuntu, Microsoft Windows, NEXTSTEP, OS/2.
Рисунок 3.1 – Вікно привітання програми
На рисунку 3.1 зображено вікно привітання програми. Внизу праворуч знаходиться лічильник, який веде відлік від десяти секунд і по вичерпанні часу запускається головне меню. Користувач може власноруч зупинити відлік часу та запустити програму натиснувши на область із таймером.
3.3 Розробка програми
Для роботи програми потрібна буде змінна, яка контролюватиме кількість ємкостей на формі. В програмному коді ця змінна матиме назву КількітьКаністр на початку роботи програми ініціалізуватиметься цілим числом із значенням нуль і збільшуватиметься на однини цю при створенні кожної ємкості (або зменшуватиметься на однини цю при кожному видаленні об’єкта з форми).
Для збереження створених картинок використовуватиметься масив даних типу PictureBox, в якому по порядку збільшення значення КількістьКаністр буде паралельно збільшуватись кількість картинок, що створюватимуться в ньому динамічно.
Для підпису порядкового номеру кожної картинки використовуватиметься масив типу Label з назвою підписиПідКартинками. В ньому кількість елементів динамічно збільшуватиметься з порядком збільшення ємкостей на формі, аналогічно і щодо зменшення: видаляємо ємкість з форми – видаляється і підпис до неї. Підписи розташовуватимуться біля картинок і показуватимуть порядковий номер того чи іншого елементу на формі.
Динамічна зміна кількості елементів у цих масивах дозволить зекономити місце, яке займатиме програма в оперативній пам’яті комп’ютера, тобто відбувається оптимізація використання системних ресурсів.
Щодо інших методів слід зазначити, що для кожного компонента на формі буде свій набір методів та подій, які забезпечуватимуть його коректну роботу. Найбільше подій припадає на подію Click, що відповідає за реакцію та подальшу поведінку програми після натиснення користувачем лівої або правої кнопки миші на тому чи іншому елементі управління або об’єктів, що знаходитимуться на формі (наприклад, поді Click на створеній ємкості видалятиме об’єкт з форми, зменшуватиме значення КількістьКаністр і т.д.).
Серед усіх інших методів та подій, які в основному слугуватимуть для підтримки роботи програми та забезпечення зручності користування та налаштування роботи програми, слід відзначити метод button3_Click_1(object sender, EventArgs e). Цей метод слугує для обраховування найкоротшого шляху. У ньому міститимуться такі змінні як:
int[,] a = new int[this.КількістьКаністр, this.КількістьКаністр] – двовимірний масив для зберігання часу переливання між кожними ємкостями на формі.
R = Convert.ToInt32(a[this.КількістьКаністр - 1, 0]) – орієнтоване значення, час переливання з вихідної у кінцеву посудину.
min = a[1, 0] - мінімальний час переливання з кожної посудини, використовується окремо, на початку має значення першого ненульового елемента у стовпчику з порядковим номером відповідної ємкості.
temp_i = 0 – змінна, що тимчасово містить у собі номер вигідної для переливання посудини, залежить від min і призначена для запам’ятовування останньої пройденої посудини задля забезпечення можливості малювання лінії між пройденими ємкостями.
y = 0 – змінна, що "переміщається" по посудинам в результаті виконання алгоритму, містить у собі порядковий номер посудини.
S = 0 – сума з часу переливання кожного елемента у "вигідній" послідовності, для знаходження найкоротшого шляху повинне бути менше R. На початку роботи програми ініціалізується значенням 0 і збільшується на MIN після кожного проходження елементу, що належить до шуканого вигідного шляху.