Знаходження кількості днів між двома датами
Історія розвитку мови програмування С++. Проблеми старого підходу. Нові можливості в порівнянні з Сі. Інкапсуляція, поліморфізм, конструктори і деструктори. Переваги і недоліки мови С++. Приклад програми "Hello, world!". Опис алгоритму та ідентифікаторів.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 24.02.2015 |
Размер файла | 648,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
КІСІТ ДВНЗ «КНЕУ ім. В. Гетьмана»
Завдання
На курсовий проект
Спеціальність 5.05010301 “Розробка програмного забезпечення”
Дисципліна Інструментальні засоби візуального програмування
студента Яхимович Дмитро Романович
Курс__IV__Група__472__Семестр___8__________________
1. Тема проекту Знаходження кількості днів між двома датами
2. Термін захисту розробленого проекту_____5 березня 2014___
3. Вимоги до проекту:
· Перевірка коректності вхідної інформації;
· Функціональна повнота алгоритмів;
· Наявність засобів допомоги, довідки, системного та контекстного меню.
· Можливість зчитувати вхідні дані з файлу або заповнення даних виподковими числами;
· Наявність рекламної заставки з інформацією про проект та розробника;
· Можливість збереження результату у файлі;
· Розробка докладної інструкції користувача;
· Рецензування та презентація проекту;
4. Зміст пояснювальної записки:
· вступ;
· теоретична частина;
· спеціальна частина;
· постановка задачі;
· опис алгоритму та ідентифікаторів;
· інструкція по експлуатації;
· висновки;
· додатки з текстами (кодами) прототипам та екранними формами (скриншотами) основні етапи роботи проекту та презентації;
· список використаної літератури;
5. Дата видачі завдання_____15_ грудня _2011_р._________
Рецензія
На курсовий проект КІСІТ ДВНЗ «КНЕУ імені Вадима Гетьмана»
Прізвище, ім'я та по батькові Яхимович Дмитро Романович
Спеціальність 5.05010301 група 472
Назва теми курсового проекту Програма знаходження кількості днів між двома датами.
Курсовий проект виконано відповідно до технічного завдання і представлено пояснювальною запискою.
Розділи пояснювальної записки представлені в достатньому об'ємі.
Захисником представлені необхідні розрахунки, таблиці, ілюстрації, екранні форми головного та допоміжних вікон програми, а також додатки з кодами програми. Презентаційна програми вдало ілюструє розроблений проект.
Позитивним є простий інтерфейс користувача, що дозволяє легко користуватися програмою, без зайвої допомоги.
При перевірці курсового проекту недоліків не було замічено.
Курсовий проект вказує на хорошу теоретичну та практичну підготовку студента Яхимовича Дмитра.
Проект заслуговує оцінки « »
Місце роботи і посада рецензента КІСІТ КНЕУ ім. В. Гетьмана, викладач
Прізвище Карлюченко Олена Григорівна.
Підпис________________________
“___”_______________ 2014 р.
Календарний план
№п/п |
Назва етапів курсового проекту |
Термін виконання |
Примітки |
|
1 |
Мета та цілі курсового проекту |
16.12.2013 |
||
2 |
Зміст курсового проекту |
19.12.2013 |
||
3 |
Аналіз та розподіл диференційованих індивідуальних завдань |
23.12.2013 |
||
4 |
Загальні вимоги до текстових документів |
30.12.2013 |
||
5 |
Держстандарти 2.104-68 та 2.105-95 |
6.01.2014 |
||
6 |
Обов'язкові елементи (модулі) у рішенні задач |
9.01.2014 |
||
7 |
Створення заставки задачі |
15.01.2014 |
||
8 |
Організація основного меню задачі |
16.01.2014 |
||
9 |
Інформаційне діалогове меню задачі |
20.01.2014 |
||
10 |
Інформаційне діалогове вікно |
21.01.2014 |
||
11 |
Перевірка семантики програми |
27.01.2014 |
||
12 |
Відлагодження основних модулів на штучних вхідних даних |
5.02.2014 |
||
13 |
Проміжний контроль рішення задачі |
10.02.2014 |
||
14 |
Оформлення виводу результату проекту |
11.02.2014 |
||
15 |
«Оздоблення» проекту анімаційними (звуковими) засобами |
17.02.2014 |
||
16 |
Представлення та обговорення проекту |
20.02.2014 |
||
17 |
Створення довідкової системи та установочної дискети |
26.02.2014 |
||
18 |
Рецензування та презентація проекту |
3.03.2014 |
Вступ
В пояснювальній записці наведений опис програми, розробленої в відповідності з завданням на курсове проектування по темі: “ Календар”. Програма призначена для полегшення обрахунків знаходжешь дати, та кількості днів між датами.
Розробка проекту відбувається в середовищі С++ Builder 6, тому що завдання на курсовий проект має бути зроблено саме в цій мові програмування
1. Теоретична частина
Основні видимості та історія
C++(Сі-плюс-плюс)-- мова програмування високого рівня з підтримкою декількох парадигм програмування:об'єктно-орієнтованої,узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл,Нью-Джерсі) у 1979 році та початково отримала назву «Сі з класами». Згодом Страуструп перейменував мову у C++ у 1983 р. Базується на мові С. Визначена стандартом ISO/IEC 14882:2003.
У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення. Мову використовують для системного програмування, розробки програмного забезпечення, написання драйверів, потужних серверних та клієнтських програм, а також для розробки розважальних програм таких як відео ігри. С++ суттєво вплинула на інші, популярні сьогодні, мови програмування: С# та Java.
1.1 Особливості
При створенні С++ прагнули зберегти сумісність з мовою С. Більшість програм на С справно працюватимуть і з компілятором С++. С++ має синтаксис, заснований на синтаксисі С.
Нововведеннями С++ порівняно з С є:
* Підтримка об'єктно-орієнтованого програмування через класи;
* підтримка узагальненого програмування через шаблони;
* доповнення до стандартної бібліотеки;
* додаткові типи даних;
* обробка винятків;
* простори імен;
* вбудовані функції;
* перевантаження операторів;
* перевантаження імен функцій;
* посилання і оператори управління вільно розподіленою пам'яттю.
У 1998 році ратифіковано міжнародний стандарт мови С++: ISO/IEC 14882 «Standard for the C++ Programming Language». Поточна версія цього стандарту - ISO/IEC 14882:2011.1.1 Особливості
При створенні С++ прагнули зберегти сумісність з мовою С. Більшість програм на С справно працюватимуть і з компілятором С++. С++ має синтаксис, заснований на синтаксисі С.
Нововведеннями С++ порівняно з С є:
· Підтримка об'єктно-орієнтованого програмування через класи;
· підтримка узагальненого програмування через шаблони;
· доповнення до стандартної бібліотеки;
· додаткові типи даних;
· обробка винятків;
· простори імен;
· вбудовані функції;
· перевантаження операторів;
· перевантаження імен функцій;
· посилання і оператори управління вільно розподіленою пам'яттю.
У 1998 році ратифіковано міжнародний стандарт мови С++: ISO/IEC 14882 «Standard for the C++ Programming Language». Поточна версія цього стандарту- ISO/IEC 14882:2011.
1.2 Приклад програми “Hello, world!”
Приклад програми де виводиться повідомлення використовуючи стандартний потік виводу.
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
1.3 Хронологія
Історія розвитку мови програмування С++ містить такі ключові події:
· квітень 1979-- початок роботи над Ci з класами (C with Classes)
· жовтень 1979-- робоча версія Ci з класами (Cpre)
· серпень 1983-- C++ вперше використовується в Bell Labs
· 1984-- назва C++
· лютий 1985-- перший зовнішній випуск C++-- Cfront Relese E (Educational -- випуск для навчальних закладів)
· жовтень 1985-- перший комерційний випуск-- Cfront 1.0
· лютий 1987-- Cfront 1.2
· грудень 1987-- перший випуск GNU C++ (1.13)
· 1988-- Перші випуски Oregon Software C++ і Zortech C++
· червень 1989-- Cfront 2.0
· 1989-- книга «The Annotated C++ Reference Manual» (ARM); Засновано комітет ANSI C++
· 1990-- перша технічна зустріч комітету ANSI C++; прийнято шаблони (templates), виняткові ситуації (exceptions); перший випускBorland C++
· 1991-- Перша зустріч ISO; Cfront 3.0 (з шаблонами); книга «The C++ Programming Language» (2-га редакція)
· 1992-- Перші випуски IBM, DEC, Microsoft C++
· 1993-- RTTI (Run-time type identification -- визначення типу під час виконання) прийнято; простори назв (namespaces) і string (шаблонний за символьним типом) прийнято
· 1994-- прийнято STL
· 1996-- прийнято export
· 1997-- остаточне голосування комітету за завершений стандарт
· 1998-- ратифіковано стандарт ISO C++
· 2003-- технічні поправки до стандарту; початок роботи над C++0x
· 2005-- перше голосування за можливості C++0x; auto, static_assert, rvalue references прийняті в загальному
· 2006-- Перше офіційне голосування з C++0x
1.4 Історія назви
Назва «Сі++» була вигадана Ріком Масситті (Rick Mascitti) і вперше було використана в грудні 1983 року. Раніше, на етапі розробки, нова мова називалася «Сі з класами». Ім'я, що вийшло у результаті, походить від оператора Сі «++» (збільшення значення змінної на одиницю) і поширеному способу присвоєння нових імен комп'ютерним програмам, що полягає в додаванні до імені символу «+» для позначення поліпшень. Згідно зі Страуструпом, «ця назва указує на еволюційну природу змін Ci». Виразом «С+» називали ранішню, не пов'язану з Сі++, мову програмування.
Деякі програмісти на Сі можуть відмітити, що якщо виконуються вирази x=3; y=x++; то в результаті вийде x=4 і y=3, тому що x збільшується тільки після присвоєння його у. Проте якщо другий вираз буде y=++x; то вийде x=4 і y=4. Виходячи з цього, можна зробити висновок, що логічніше було б назвати мову не Сі++, а ++Сі. Проте обидва вирази c++ і ++c збільшують с, а крім того вираз c++ поширеніший.
Педанти також можуть відмітити, що введення мови Сі++ не змінює самого Сі, тому найточнішим ім'ям було б «С+1».
алгоритм ідентифікатор конструктор інкапсуляція
1.5 Технічний огляд
В 1998 році мова Сі++ була стандартизована Міжнародною організацією стандартизації під номером 14882:1998 -- Мова Програмування Сі++. Поточний стандарт -- C++11, він був прийнятий у 2011 році робочою групою МОС після десятирічної підготовки.
Стандарт Сі++ на 1998 рік складається з двох основних частин: ядра мови і стандартної бібліотеки. Стандартна бібліотека Сі++ увібрала в себе бібліотеку шаблонів STL, що розроблялася одночасно із стандартом. Зараз назва STL офіційно не вживається, проте в колах програмістів на Сі++ ця назва використовується для позначення частини стандартної бібліотеки, що містить визначення шаблонів контейнерів, ітераторів, алгоритмів і функторів.
Стандарт Сі++ містить нормативне посилання на стандарт Сі від 1990 року і не визначає самостійно ті функції стандартної бібліотеки, які запозичуються із стандартної бібліотеки Сі.
Поза тим, існує величезна кількість бібліотек Сі++, котрі не входять в стандарт. У програмах на Сі++ можна використовувати багато бібліотек Сі.
Стандартизація визначила мову програмування Сі++, проте за цією назвою можуть ховатися також неповні, обмежені достандартні варіанти мови. Спочатку мова розвивалася поза формальними рамками, спонтанно, у міру завдань, що ставилися перед ним. Розвиток мови супроводив розвиток кросс-компілятора Cfront. Нововведення в мові відбивалися в зміні номера версії кросс-компілятора. Ці номери версій кросс-компілятора розповсюджувалися і на саму мову, але стосовно теперішнього часу мову про версії мови Сі++ не ведуть.
1.6 Стандартна бібліотека
Стандартна бібліотека Сі++ включає стандартну бібліотеку Сі з невеликими змінами, які роблять її відповідною для мови Сі++. Інша велика частина бібліотеки Сі++ заснована на Стандартній Бібліотеці Шаблонів (STL). Вона надає такі важливі інструменти, як контейнери (наприклад, вектори і списки) і ітератори (узагальнені вказівники), що надають доступ до цих контейнерів як до масивів. Крім того, STL дозволяє схожим чином працювати і з іншими типами контейнерів, наприклад, асоціативними списками, стеками, чергами.
Використовуючи шаблони, можна писати узагальнені алгоритми, здатні працювати з будь-якими контейнерами або послідовностями, доступ до членів яких забезпечують ітератори.
Так само, як і в Сі, можливості бібліотек активізуються використанням директиви #include для включення стандартних файлів. Всього в стандарті Сі++ визначено 50 таких файлів.
STL до включення в стандарт Сі++ була сторонньою розробкою, на початку -- фірми HP, а потім SGI. Стандарт мови не називає її «STL», оскільки ця бібліотека стала невід'ємною частиною мови, проте багато людей досі використовують цю назву, щоб відрізняти її від решти частини стандартної бібліотеки (потоки введення/виведення (Iostream), підрозділ Сі тощо). Проект під назвою STLport, заснований на SGI STL, здійснює постійне оновлення STL, IOstream і рядкових класів. Деякі інші проекти також займаються розробкою приватних застосувань стандартної бібліотеки для різних конструкторських завдань. Кожен виробник компіляторів Сі++ обов'язково поставляє якусь реалізацію цієї бібліотеки, оскільки вона є дуже важливою частиною стандарту і широко використовується.
Причиною успіху STL, зокрема її вхід до стандартної бібліотеки С++, була націленість на широке коло завдань і узагальнена структура. В цьому сенсі, близькою за духом STL на сьогодні є бібліотека Boost. Boost теж є бібліотекою загального застосування і теж впливає на формування стандартної бібліотеки С++.
1.7 Нові можливості в порівнянні з Сі
Мова Сі++ багато в чому є надмножиною Сі. Нові можливості Сі++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності та змінності, функції, що підставляються, аргументи за замовчанням, перевизначення, простори імен, класи (включаючи і всі пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор ::, обробку винятків, динамічну ідентифікацію і багато що інше. Сі++ є також мовою строгого типування і накладає більше вимагань щодо дотримання типів, порівняно з Сі.
У Сі++ з'явилися коментарі у вигляді подвійної косої риски («//»), які були в попереднику Сі -- мові BCPL.
Деякі особливості Сі++ пізніше були перенесені в Сі, наприклад ключові слова const і inline, оголошення в циклах for і коментарі в стилі Сі++ («//»). У пізніших реалізаціях Сі також були представлені можливості, яких немає в Сі++, наприклад макроси vararg і покращена робота з масивами-параметрами.
2 Спеціальна частина
2.1 Не об'єктно-орієнтовані можливості
В цьому розділі описуються можливості, безпосередньо не пов'язані з об'єктно-орієнтованим програмуванням (ООП). Багато які з них, проте, особливо важливі у поєднанні з ООП.
Ключове слово inline означає, що функція є хорошим кандидатом на оптимізацію, при якій в місцях звернення до функції компілятор вставить тіло цієї функції, а не код виклику. Приклад: inline double Sqr(double x) {return x*x;}
Замість функцій malloc і free, введені нові оператори new і delete. Якщо T -- довільний тип, то
new T виділяє пам'ять, достатню для розміщення одного об'єкта типу Т; після завершення виклику оператора, компілятор здійснює ініціалізацію об'єкта (викликаючи його конструктор, якщо такий був визначний) і повертає вказівник типу Т*.
new T[n] виділяє пам'ять, достатню для розміщення n об'єктів типу Т; після завершення виклику оператора, компілятор здійснює ініціалізацію кожного з n об'єктів і повертає вказівник типу Т*.
delete p -- звільняє пам'ять, на яку посилається вказівник p, виділену для нього раніше операцією new T. Деініціалізація об'єкта (викликаючи деструктора) забезпечується компілятором ще до виклику оператора delete.
delete [] p -- звільняє область пам'яті, виділену для цього масиву раніше операцією new T[n]. Деініціалізація кожного елементу масиву забезпечується компілятором ще до виклику оператора.
Як видно, однією з принципових відмінностей операторів new та delete від своїх попередників, malloc і free, є обов'язковість ініціалізації об'єктів, пам'ять під які було призначено. Іншою відмінністю є те, що загальна реалізація (тобто визначена за умовчанням) оператора new не повертає нулеву вартість вказівника в випадку помилки призначення пам'яті (наприклад з причини її браку). Натомість, new кидає виняток (наприклад, std::bad_alloc в ситуації браку пам'яті). Так само як і для free, якщо вартістю аргументу оператора delete є 0, ані звільнення пам'яті, ані деініціація не відбувається (при тому, подібна ситуація не вважається помилковою).
Функції можуть приймати аргументи за посиланням. Наприклад, функція void f(int& x) {x=3;} присвоює своєму аргументу значення 3. Функції також можуть повертати результат за посиланням, і посилання можуть бути поза всяким зв'язком з функціями. Наприклад, {double&b=a[3]; b=sin(b);} еквівалентно а[3]=sin(а[3]);. Посилання певною мірою схожі з вказівниками, з такими особливостями: при описі посилання ініціалізувалися вказівкою на існуюче значення даного типу; посилання довічно указує на одну і ту ж адресу; при зверненні до посилання операція читання пам'яті за адресою посилання проводиться автоматично. На відміну від вказівників, посилання не може бути константним саме по собі, однак може посилатися на константний об'єкт. Наприклад, int const & const ref = a[3]; на відміну від int const * const ref = &a[3]; -- є некоректним, з точки зору С++, виразом; в свою чергу, і int const & ref = a[3];, і int const * ref = &a[3]; -- є цілком прийнятними.
Можуть бути декілька функцій з одним і тим же ім'ям, але різними типами або кількістю аргументів (перевантаження функцій; при цьому тип значення, що повертається, на перевантаження не впливає). Наприклад, цілком можна писати:
void Print(int x);
void Print(double x);
void Print(int x, int y);
Один або декілька останніх аргументів функції можуть задаватися за умовчанням. Наприклад, якщо функція описана як void f(int x, int y=5, int z=10), виклики f(1), f(1,5) і f(1,5,10) еквівалентні.
При описі функцій відсутність аргументів в дужках означає, на відміну від Сі, що аргументів немає, а не те, що вони невідомі. Якщо аргументи невідомі, треба користуватися багато крапкою, наприклад int printf(const char* fmt …). Тип першого аргументу повинен бути заданий.
Можна описувати оператори над новими типами. Наприклад, так:
struct Date {int day, month, year;};
void operator ++(struct Date& date);
Оператори нічим не відрізняються від (інших) функцій. Не можна описувати оператори над зумовленими типами (скажімо, перевизначати множення чисел); не можна вигадувати нові операції, яких немає в Сі++ (скажімо **); парність (кількість параметрів) і пріоритет операцій зберігається (скажімо, у виразі a+b*c спочатку виконуватиметься множення, а потім складання, до яких би типів не належали а, b і с.) Можна перевизначити оператор (з одним параметром) і () (з будь-яким числом параметрів).
Додані простори імен namespace. Наприклад, якщо написати
namespace Foo {
const int x=5;
typedef int** T;
void f(y) {return y*x};
double g(T);
...
}
то поза фігурними дужками ми повинні звертатися до T, x, f, g як Foo::T, Foo::x, Foo::f, Foo::g. Якщо ми в якійсь одиниці трансляції (файл основного коду, наприклад myFile.cpp, та всі заголовкові файли що він включає) хочемо звертатися до них безпосередньо, ми можемо написати
using namespace Foo;
Або ж
using Foo::T;
Також можна створити синонім на вже існуючий простір імен (наприклад, аби уникнути постійно повторювати довгу назву простору)
namespace MyVeryOwnNameSpace {
typedef std::vector< std::string > StringTable;
}
namespace My = MyVeryOwnNameSpace;
Простори імен потрібні, щоб не виникало колізій між пакетами, що мають однакові імена глобальних змінних, функцій і типів. Спеціальним випадком є безіменний простір імен
namespace {
...}
Всі імена, описані в ньому, доступні в поточній одиниці трансляції і більше ніде, неначебто ми до кожного опису приписали static.
Доданий новий тип bool, що має значення true і false. Операції порівняння повертають тип bool. Вирази в дужках після if, while приводяться до типу bool. означає, що вся частина рядка, що залишилася, є коментарем.
Додані шаблони (template). Наприклад, template<class T> T Min(T x, T у) {return x<y?x:y;} визначає функцію Min для будь-яких типів. Шаблони можуть задавати не тільки функції, але і типи. Наприклад, template<class T> struct Array{int len; T* val;}; визначає масив значень будь-якого типу, після чого ми можемо писати Array<float> x;
Введена стандартна бібліотека шаблонів (STL, англ. Standard Template Library), що визначає шаблони і функції для векторів (одновимірних масивів довільної довжини), множин, асоціативних масивів (map), списків, символьних рядків, потоків введення-виводу і інші шаблони і функції.
Якщо описана структура, клас (про класи див. нижче), об'єднання (union) або перерахування (enum), її ім'я є ім'ям типу, наприклад:
struct Time{int hh,mm,ss;};
Time t1, t2;
Усередині структури або класу можна описувати нові типи, як через typedef, так і через опис інших структур або класів. Для доступу до таких типів поза структурою або класу, до імені типу додається ім'я структури і дві двокрапки:
struct S {typedef int** T; T x;}; S::T у;
2.2 Обєктно-орієнтовані особливості
Сі++ додає до Сі об'єктно-орієнтовані можливості. Він вводить класи, які забезпечують три найважливіші властивості ООП: інкапсуляцію, успадкування і поліморфізм.
2.2.1 Проблеми старого підходу
В мові C основним способом організації даних були структури. Структура складається з набору полів, які ніяк не захищені. Якщо елементи структури мають змінну довжину, їх представляють у вигляді вказівників. Виділення і звільнення пам'яті під ці вказівники робляться вручну. Так, наприклад, одновимірний масив змінної довжини в мові C з перевіркою меж може представлятися таким чином:
struct Array {
double* val;
int len;
};
void FreeArray (const struct Array*);
void AllocArray (const struct Array*, int len);
double Elem (const struct Array*, int i);
void ChangeElem (const struct Array*, int i, double x);
Така реалізація небезпечна і неефективна з багатьох причин:
Необхідно викликати FreeArray і AllocArray. Програміст може забути викликати одну з цих функцій, або викликати її дуже рано/запізно, або двічі, або з вказівником на неправильний масив. Все це приводить до помилок, що важко виявити.
Функції Elem і ChangeElem повільні.
Немає ніякого способу перешкодити програмістам створювати і інші функції для роботи із структурою Array. Ці функції можуть робити з полями len і val будь-що.
Немає ніякого способу перешкодити програмістам безпосередньо міняти поля len і val.
Присвоєння об'єктів типу struct Array приведе до того, що їхні поля val указуватимуть на одну і ту ж область пам'яті. Немає ніякого способу ні заборонити присвоєння, ні змінити таку поведінку.
Мова Сі++, використовуючи ООП, усуває всі ці проблеми.
2.2.2 Інкапсуляція
Основним способом організації інформації в Сі++ є класи. На відміну від типу структура (struct) мови Сі, що складається тільки з полів, клас (class) Сі++ складається з полів і функцій-членів або методів (англ. member functions). Поля бувають публічними (public), захищеними (protected) і приватними (private). У Сі++ тип структура аналогічний типу клас, відмінність в тому, що за умовчанням поля і функції-члени у структури публічні, а у класу -- приватні.
З публічними полями можна робити зовні класу все, що завгодно. До захищених і приватних полів не можна звертатися ззовні класу, щоб не порушити цілісність даних класу. Спроба такого звернення викличе помилку компіляції. До таких полів можуть звертатися тільки функції-члени класу (а також так звані функції-друзі і функції-члени класів-друзів; про поняття друзів в C++ дивись нижче.) Поза тілом функцій-членів (а також друзів) захищені і власні поля недоступні навіть для читання. Такий захист полів називається інкапсуляцією.
Використовуючи інкапсуляцію, автор класу може захистити свої дані від некоректного використання. Крім того, вона замислювалася для полегшення сумісної розробки класів. Малося на увазі, що зміна способу зберігання даних, якщо вони оголошені як захищені або приватні не вимагає відповідних змін в класах, які використовують змінений клас. Наприклад, якщо в старій версії класу дані зберігалися у вигляді лінійного списку, а в новій версії -- у вигляді дерева, ті класи, які були написані до зміни формату зберігання даних, переписувати не буде потрібно, якщо дані були приватними або захищеними (у останньому випадку -- якщо використовуючі класи не були класами-нащадками), оскільки жоден з них цих класів не міг би безпосередньо звертатися до даних, а тільки через стандартні функції, які в новій версії мають вже коректно працювати з новим форматом даних. Навіть оператор доступу operator може бути визначений як така стандартна функція. Функції-члени, як і поля, можуть бути публічними, захищеними і приватними.
Публічні функції може викликати будь-хто, а захищені і власні -- тільки функції-члени і друзі.
Використовуючи інкапсуляцію, структуру Array з попереднього розділу можна переписати таким чином:
class Array {
public:
void Alloc(int new_len);
void Free();
inline double Elem(int i);
inline void ChangeElem(int i, double x);
protected:
int len;
double* val;
};
void Array::Alloc(int new_len)
{if (len>0) Free(); len=new_len; val=new double[new_len];}
void Array::Free() {delete [] val; len=0;}
inline double Array::Elem(int i)
{assert(i>=0 && i<len ); return val[i];}
inline void Array::ChangeElem(int i, double x)
{assert(i>=0 && i<len); val[i]=x;}
І далі
Array a;
a.Alloc(10);
a.ChangeElem(3, 2.78);
double b = a.Elem(3);
a.Free();
Тут масив а має 4 публічних функції-члена і 2 захищених поля. Описувач inline означає, що замість виклику функції її код підставляється в точку виклику, що вирішує проблему неефективності.
Опис функцій в тілі класу[ред. * ред. код]
В тілі класу можна вказати тільки заголовок функції, а можна описати всю функцію. У другому випадку вона вважається вбудованою (inline), наприклад:
class Array {
public:
void Alloc(int _len)
{if (len>0) Free(); val=new double [len=_len];}
і так далі.
2.2.3 Конструктори і деструктори
Проте в наведеному прикладі не вирішена важлива проблема: функції Alloc і Free як і раніше треба викликати вручну. Інша проблема даного прикладу -- небезпека оператора присвоєння. Для вирішення цих проблем в мову були введені конструктори і деструктори. Конструктор викликається щоразу, коли створюється об'єкт даного типу; деструктор -- при знищенні. При перетвореннях типів, присвоєнні, передачі параметра теж викликаються конструктори і при необхідності деструктори.
З конструкторами і деструкторами клас виглядає так:
class Array {
public:
Array() : len(0), val(NULL) {}
Array(int _len) : len(_len) {val = new double[_len];}
Array(const Array& a);
~Array() { Free(); }
inline double Elem(int i);
inline void ChangeElem(int i, double x);
protected:
void Alloc(int _len);
void Free();
int len;
double* val;
};
Array::Array(const Array& a) : len(a.len)
{
val = new double[len];
for (int i=0; i<len; i++)
val[i] = a.val[i];
}
Тут Array::Array -- конструктор, а Array::~Array -- деструктор. Конструктор копіювання (англ. copy constructor) Array::Array(const Array&) викликається при присвоєнні. Тепер об'єкт класу Array не можна зіпсувати: як би ми його не створювали, що б ми не робили, його значення буде коректним, тому що конструктор викликається автоматично. Всі небезпечні операції з вказівниками заховані в захищені функції.
Array a(5); // викликається Array::Array(int)
Array b; // викликається Array::Array()
Array c(a); // викликається Array::Array(const Array&)
Array d=a; // те саме
b=c; // відбувається виклик оператора =
// якщо він не визначений (як в даному випадку), то викликається оператор присвоєння за умовчанням, який
// здійснює побітове копіювання для базових типів і виклик оператора присвоєння для користувача
// як правило, конструктор копій і оператор присвоєння перевизначаються попарно
Оператор new теж викликає конструктори, а delete -- деструктори.
За умовчанням, кожен клас має конструктор без параметрів і деструктор. Конструктор без параметрів за умовчанням викликає конструктори всіх елементів, а деструктор -- їхні деструктори. Інші конструктори за умовчанням не визначені.
Клас може мати скільки завгодно конструкторів (з різними наборами параметрів), але тільки один деструктор (без параметрів).
Інші можливості функцій-членів[ред. * ред. код]
Функції-члени можуть бути і операціями:
class Array {
…
inline double &operator[] (int n);
І далі
Array a(10);
…
double b = a[5];
Функції-члени (і лише вони) можуть мати описувач const
class Array {
…
inline double operator[] (int n) const;
Такі функції не мають права змінювати поля класу (окрім полів, визначених як mutable). Якщо вони намагаються це зробити, компілятор повинен видати повідомлення про помилку.
2.2.4 Успадкування
Для створення класів з доданою функціональністю вводять успадкування. Клас-нащадок має поля і функції-члени базового класу, але не має права звертатися до приватних (private) полів і функцій базового класу. У цьому і полягає різниця між приватними і захищеними членами.
Клас-нащадок може додавати свої поля і функції або перевизначати функції базового класу.
За замовчуванням, конструктор нащадка без параметрів викликає конструктор базового класу, а потім конструктори доданих елементів. Деструктор працює в зворотному порядку. Інші конструктори доводиться визначати щоразу наново. На щастя, це можна зробити викликом конструктора базового класу.
class ArrayWithAdd : public Array {
ArrayWithAdd(int n) : Array(n) {}
ArrayWithAdd() : Array() {}
ArrayWithAdd(const Array& a) : Array(a) {}
void Add(const Array& a);};
Нащадок -- це більш ніж базовий клас, тому він може використовуватися скрізь, де використовується базовий клас, але не навпаки.
Успадкування буває публічним, захищеним і приватним. При публічному успадкуванні, публічні і захищені члени базового класу зберігають свій статус, а до приватних не можуть звертатися навіть функції-члени нащадка. Захищене успадкування відрізняється тим, що при нім публічні члени базового класу є захищеними членами нащадка. При приватному успадкуванні, до жодного члена базового класу навіть функції-члени нащадка права звертатися не мають. Як правило, публічне успадкування зустрічається значно частіше за інші.
Клас може бути нащадком декількох класів. Це називається множинним успадкуванням. Такий клас володіє полями і функціями-членами всіх його предків. Наприклад, клас FlyingCat може бути нащадком класів Cat і FlyingAnimal.
class Cat {
...
void Purr();
...
};
class FlyingAnimal {
...
void Fly();
...
};
class FlyingCat : public Cat, public FlyingAnimal {
...
PurrAndFly() {Purr(); Fly();}
...
};
2.2.5 Поліморфізм
Поліморфізмом в програмуванні називається перевизначення нащадком функцій-членів базового класу, наприклад
class Figure {
...
void Draw() const;
...
};
class Square : public Figure {
...
void Draw() const;
...
};
class Circle : public Figure {
...
void Draw() const;
...
};
В даному прикладі, яка з функцій буде викликана -- Circle::Draw(), Square::Draw() або Figure::Draw(), визначається під час компіляції. Наприклад, якщо написати
Figure* x = new Circle(0,0,5);
x->Draw();
то буде викликане Figure::Draw(), оскільки x -- об'єкт класу Figure. Такий поліморфізм називається статичним.
Але в C++ є і динамічний поліморфізм, коли функція, що викликається, визначається під час виконання. Для цього функції-члени повинні бути віртуальними.
class Figure { ...
virtual void Draw() const;
...
};
class Square : public Figure {
...
virtual void Draw() const;};
class Circle : public Figure {
...
virtual void Draw() const;
...
};
Figure* figures[10];
figures[0] = new Square(1, 2, 10);
figures[1] = new Circle(3, 5, 8);
for (int i = 0; i < 10; i++)
figures[i]->Draw();
У цьому разі для кожного елементу буде викликана Square::Draw() або Circle::Draw() залежно від виду фігури.
Чисто віртуальною функцією називається функція-член, яка не визначена в базовому класі, а тільки в нащадках:
class Figure {
...
virtual void Draw() const = 0;
);
Ось це = 0 і означає, що функція чисто віртуальна.
Абстрактним класом називається такий, у якого є хоч би одна чисто віртуальна функція-член. Об'єкти таких класів створювати заборонено. Абстрактні класи використовуються як інтерфейси.
2.2.6 Друзі
Функції-друзі- це функції, що не є функціями-членами, проте мають доступ до захищених і власних полів і функцій-членів класу. Вони повинні бути описані в тілі класу як friend. Наприклад:
class Matrix {
...
friend Matrix Multiply (Matrix m1, Matrix m2);
...
};
Matrix Multiply (Matrix m1, Matrix m2) {
...
}
Тут функція Multiply може звертатися до будь-яких полів і функцій-членів класу Matrix.
Існують також класи-друзі. Якщо клас A -- друг класу B, то всі його функції-члени можуть звертатися до будь-яких полів і функцій членів класу B. Наприклад:
class Matrix {
...
friend class Vector;
...
};
Проте в С++ не діє правило «друг мого друга -- мій друг».
За стандартом C++03 вкладений клас не має прав доступу до закритих членів охоплюючого класу і не може бути оголошений його другом (це виходить з визначення терміну друг як не члена класу). Проте, багато розповсюджених компіляторів порушують обидва ці правила (може, зважаючи на сукупну дивність цих правил).
2.2.7 Переваги та недоліки мови С++
Переваги мови C++
· Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.
· Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем.
· Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)
· Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів.
· Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП, узагальнене програмування, метапрограмування (шаблони, макроси).
Недоліки мови C++
· Наявність безлічі можливостей, що порушують принципи типо безпеки приводить до того, що в С++ програми може легко закрастися важко вловима помилка. Замість контролю з боку компілятора розробники вимушені дотримуватися вельми нетривіальних правил кодування. По суті, ці правила обмежують С++ рамками якоїсь безпечнішої підмови. Більшість проблем типобезпеки С++ успадкована від С, але важливу роль в цьому питанні грає і відмова автора мови від ідеї використовувати автоматичне управління пам'яттю (наприклад, збірку сміття). Так візитною карткою С++ стали вразливості типу «переповнювання буфера».
· Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів реалізують механізм прекомпіляц. заголовних файлів (англ. Precompiled Headers).
· Недостача інформації про типи даних під час компіляції (CTTI).
· Мова C++ є складною для вивчення і для компіляції.
· Деякі перетворення типів неінтуїтивні. Зокрема, операція над беззнаковим і знаковим числами видає беззнаковий результат.
· Препроцесор С++ (успадкований від C) дуже примітивний. Це приводить з одного боку до того, що з його допомогою не можна (або важко) здійснювати деякі завдання метапрограмування, а з іншою, в наслідку своєї примітивності, він часто приводить до помилок і вимагає багато дій з обходу потенційних проблем. Деякі мови програмування (наприклад, Scheme і Nemerle) мають набагато могутніші і безпечніші системи метапрограмування (також звані макросами, але макроси С/С++ вони мало нагадують).
· З кінця 1990-х в співтоваристві С++ набуло поширення так зване метапрограмування на базі шаблонів. По суті, воно використовує особливості шаблонів C++ в цілях реалізації на їхній базі інтерпретатора примітивної функціональної мови програмування, що виконується під час компіляції. Сама по собі ця можливість вельми приваблива, але, в наслідок вище згаданого, такий код вельми важко сприймати і зневажувати. Мови Lisp/Scheme, Nemerle і деякі інші мають могутніші і водночас простіші для сприйняття підсистеми метапрограмування. Крім того, в мові D реалізована порівнянна за потужністю, але значно простіша в застосуванні підсистема шаблонного метапрограмування.
· Хоча декларується, що С++ мультипарадигменна мова, реально в мові відсутня підтримка функціонального програмування. Частково, даний пропуск усувається різними бібліотеками (Loki, Boost) що використовують засоби метапрограмування для розширення мови функціональними конструкціями (наприклад, підтримкою лямбд/анонімних методів), але якість подібних рішень значно поступається якості вбудованих у функціональні мови рішень. Такі можливості функціональних мов, як зіставлення зі зразком взагалі украй складно емулювати засобами метапрограмування.
3. Постановка задачі
Дана задача призначена для пошуку значень які відповідають кількості днів між двома датами, та знайти дату після вказаної на наступний день
Опис методу
При введенні двох дат потрібно отримати кількість днів. Якщо не велика кількість між датами це можна порахувати в розумі, проте більші важче, тим паче з урахуванням високосних років.
Якщо відомо що нам буде задано 2 дати формату ЧЧ.ММ.ГГГГ.
То нам потрібно відняти роки, від років, місяці від місяців, числа від чисел, для цього нам потрібно використати наступний спосіб:
1) Перевести обидві дати в дні і від більшої кількості відняти меншу, залежно від кратності 4 додавати 365 або 366 якщо високосний рік;
2) Перевести обидва місяці з урахуванням високосного року (у лютому 28-29)днів.
3) Та порівняти кількість днів в датах, якщо в одній із раніше дата і більший день потрібно забрати місяць назад.
4) Для легкості обчислень та меншості чисел можна при вводі перевіряти та віднімати найближчі великі числа одному і іншому.
Але для легкості результату і простоти ми скористались DataTimePicker.
Друге завдання : Задано дату знайти наступний день.
При введенні дати ми перевіряємо чи не останній день в місяці та чи не останній місяць в році, якщо обидва параметри підходять то просто добавляємо один день і виводимо відповідь.
Третє завдання: Дано дату знайти день тижня.
Перевіряємо по індексу дати «0-6» який день, та виводимо у відповідне поле.
3.1 Опис алгоритму
На початку роботи програми ми вибираємо із двох DataTimePicker потім вони заповнюються по натиску на кнопку в свої змінні. Далі іде перевірка чи включені прапорці(знаходження днів та наступного дня). Якщо встановлені прапорці іде перерахунок днів між датами, та дати після вибраної.
void __fastcall TForm1::Button1Click(TObject *Sender)
{ TDateTime date,day1,day2,input;
day1=DateTimePicker1->Date;
day2=DateTimePicker2->Date;
if (CheckBox1->Checked){
if (day1>day2)date=day1-day2 ; else
date=day2-day1; }
if (CheckBox2->Checked) {
input = day1+1; }
Edit1->Text ="Різниця:"+IntToStr(date)+"доби"+" "+input;}
switch(day1.DayOfWeek()) {
case 1: Edit2->Text = "В неділю"; break;
case 2: Edit2->Text = "В понеділок"; break;
case 3: Edit2->Text = "В вівторок"; break;
case 4: Edit2->Text = "В середу"; break;
case 5: Edit2->Text = "В четвер"; break;
case 6: Edit2->Text = "В п'ятницю"; break;
case 7: Edit2->Text = "В суботу " ; break;}
4. Інструкція по експлуатації
1) Для початку роботи запустити файл програми Projectmain.exe.
2) У відкритому вікні вам потрібно натиснути кнопку «Вхід» , також виможете натиснути кнопку «Вихід» для того, щоб закрити програму;
3) У відкритому вікні вам доступні головне меню, контекстне, та форма на якій знаходяться елементи для рішення поставленої задачі, а саме знаходження кількості днів між двома датами, наступного дня після вказаного та знаходження в який день тижня народились люди;
4) Для того щоб отримати результат роботи програми для початку виберіть потрібну вам функцію в елементах CheckBox;
5) Виберіть данні в двох DateTimePicker, або якщо вам потрібно тільки наступний день оберіть тільки в першому;
6) Далі вам потрібно натиснути відповідну кнопку в залежності від того, вибрали ви вже вхідні данні чи ні;
7) Якщо вам потрібно звернутися до довідки, тоді вам потрібно натиснути в головному меню «Допомога», а далі «Довідка». В довідці присутня також інструкція з користування.
8) Якщо вам хочеться прочитати інформацію про розробника то ви можете скористатися або «Довідкою» або Вкладкою «Інформація Про розробника». Ці вкладки можна викликати також в контекстному меню;
9) Для завершення роботи програми вам потрібно натиснути кнопку закрити у верхньому правому кутку або натиснути кнопку Вихід(вийти).
Висновки
Виконавши цей курсовий проект я навчився і закріпив знання з теорії програмного забезпечення:
1. Обробка вхідних даних та коректність цих даних;
2. Об'єктно-орієнтований підхід до розробки;
3. Проектування інтерфейсу користувача;
4. Написання документації;
Дізнався та навчився використовувати наступні технології:
1. Створення власної довідкової системи;
2. Робота з бібліотекою <DateUtils.hpp>;
3. Робота з компонентами Об'єктно-орієнтованого програмування.
Дізнався про те як програма знаходить кількість днів між датами , переходити до наступного дня та знаходити в який день тижня народились люди.
Додаток A
Код проекту
Project1.cpp
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("C:\Program Files (x86)\Borland\CBuilder6\Bin\Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
USEFORM("Unit3.cpp", AboutBox);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{ try { Application->Initialize();
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TAboutBox), &AboutBox);
Application->Run(); }
catch (Exception &exception) {
Application->ShowException(&exception); }
catch (...)
{ try
{ throw Exception(""); }
catch (Exception &exception)
{ Application->ShowException(&exception);
} } return 0; }
Unit1.cpp
#include <vcl.h> #include <DateUtils.hpp> #include <math> #include "Unit2.h"
#pragma hdrstop #include "Unit3.h" #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ TDateTime date,day1,day2,input;
day1=DateTimePicker1->Date;
day2=DateTimePicker2->Date;
if (CheckBox1->Checked){
if (day1>day2)date=day1-day2 ; else
date=day2-day1; }
if (CheckBox2->Checked) {
input = day1+1; }
Edit1->Text ="Різниця:"+IntToStr(date)+"доби"+" "+input;
if (CheckBox3->Checked) {
switch(day1.DayOfWeek()) {
case 1: Edit2->Text = "В неділю"; break;
case 2: Edit2->Text = "В понеділок"; break;
case 3: Edit2->Text = "В вівторок"; break;
case 4: Edit2->Text = "В середу"; break;
case 5: Edit2->Text = "В четвер"; break;
case 6: Edit2->Text = "В п'ятницю"; break;
case 7: Edit2->Text = "В суботу " ; break;}}}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{Application->Terminate();}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
WinExec("hh HelpStudioSample.chm",SW_RESTORE);
http://f6.s.qip.ru/SNS8HBEI.png ;}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{Application->Terminate();}
//---------------------------------------------------------------------------
void __fastcall TForm1::N10Click(TObject *Sender)
{ Application->Terminate();}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{АboutBox->Show();}
//---------------------------------------------------------------------------
Unit2.cpp
//---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop #include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{ }
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{Form1->Show();}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{Application->Terminate();}
//---------------------------------------------------------------------
Unit3.cpp
#include <vcl.h> #pragma hdrstop #include "Unit3.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TAboutBox *AboutBox;
//---------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* AOwner)
: TForm(AOwner){ }
void __fastcall TAboutBox::OKButtonClick(TObject *Sender)
{AboutBox->Close();}
Додаток Б
Скріншоти до проекту
Размещено на Allbest.ur
...Подобные документы
Ключові поняття мови об’єктно-орієнтованого програмування C++: інкапсуляція, наслідування, абстракція, поліморфізм. Об’ява класів у мові С++. Графічні засоби. Пошук відстані між точками. Опис класів і об’єктів. Програма графічної задачі. Лістинги файлів.
курсовая работа [144,3 K], добавлен 14.03.2013Характеристика мов програмування. Історія виникнення мови C#, її особливості, версії та нові можливості. Приклад програм виведення на екран, виведення поточної дати та часу та програми музичного програвача. Програмний код та результат виконання програм.
контрольная работа [321,3 K], добавлен 13.06.2012Призначення ігрової програми "Змійка" для розвитку уваги та логічного мислення гравців. Розробка програми в середовищі C++ Builder 6, її функціонування в ОС Windows. Опис алгоритму та основних функцій програми. Основні переваги та недоліки мови С++.
реферат [1,7 M], добавлен 17.12.2014Розробка програми, яка розраховує потужність рідинного вісьсиметричного розбризкувача і демонструє основні аспекти об’єктно-орієнтованого програмування, а саме розробку класів, зв’язків між ними та такі явища як інкапсуляція, поліморфізм та спадкування.
курсовая работа [155,4 K], добавлен 18.12.2011Основні відомості про історію розвитку мови Object Pascal, середовища Delphi, їх основні технології та застосування для роботи з файлами. Опис основних особливостей мови, основних елементів програмної мови. Принципи об'єктно-орієнтованого програмування.
курсовая работа [471,5 K], добавлен 12.04.2010Поняття мови РНР - скриптової мови програмування, яка була створена для генерації HTML-сторінок на стороні веб-серверу. Можливості і використання PHP, її переваги і недоліки. Розроблення сайту для турагенства за допомогою гіпертекстової розмітки HTML.
контрольная работа [11,2 M], добавлен 21.04.2015Можливості програмування за допомогою Delphi. Розробка програми "Кадровий облік", її функції. Алгоритм задачі: логіка програми, визначення структури даних та інтерфейсу. Аналіз програми та її тестування: переваги та недоліки у порівнянні з аналогами.
курсовая работа [1,6 M], добавлен 07.05.2009Програми і мови програмування. Алфавіт мови програмування. Лексеми, зарезервовані слова мови Pascal. Ідентифікатори, типи даних. Арифметичні вирази, операції. Стандартні функції, структура програми. Процедури введення-виведення. Правила написання команд.
лекция [445,0 K], добавлен 24.07.2014Концепції об'єктно-орієнтованого програмування. Конструктори та деструктори. Успадкування класів. Побудова об’єктної моделі. Визначення об'єктів та класів і зв’язків між ними. Реалізація програми в середовищі Visual Studio C++. Інтерфейс програми.
курсовая работа [743,7 K], добавлен 25.01.2016Широкі можливості по використанню комп'ютерних навчальних систем. Розробка навчальної системи мультимедійного посібника з дисципліни "Інформатика і ОТ" на тему "Особливості мови програмування С++. Вказівники". Вимоги до розробки навчальної програми.
курсовая работа [2,9 M], добавлен 23.11.2010Проектування бази даних (БД). Проектування логічної моделі БД. Реалізація БД та створення таблиць. Встановлення зв’язків, вибір мови та середовища програмування. Опис функціональних елементів та реалізація програми. Опис та тестовий приклад програми.
дипломная работа [1,6 M], добавлен 07.01.2017Розрахунок собівартості інструментальної системи створення електронних підручників. Вибір технології та мови програмування. Загальна характеристика програми і принцип роботи. Вибір мови програмування. Опис тегів, які підтримуються HTML-редактором.
дипломная работа [112,7 K], добавлен 04.06.2010Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "Microsoft Visual Studio C++ 2008 Express Edition". Лістинг програми та загальний опис її роботи, аналіз отриманих результатів та оцінка практичної ефективності.
курсовая работа [762,8 K], добавлен 03.05.2015Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.
отчет по практике [4,3 M], добавлен 28.08.2014Розробка кросплатформового інструменту електронного тестування учнів молодших та середніх класів по іноземній мові. Вибір середовища розробки та системи контролю версій. Опис мови програмування Java та лістинг програми. Апаратні та програмні вимоги.
дипломная работа [608,3 K], добавлен 26.10.2010Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.
курсовая работа [991,4 K], добавлен 06.08.2013Проектування архітектури гри "Тетріс". Аналіз вимог до неї. Вивчення особливостей реалізації, кодування та тестування програми. Алгоритм побудови робочого поля. Вибір мови програмування. Розробка і налагодження тексту програми. Інструкції з експлуатації.
курсовая работа [460,9 K], добавлен 04.03.2014Створення програми для роботи з веб-камерою з автоматичним визначенням встановленої камери на комп'ютері. Характеристика апаратної конфігурації програми. Опис мови і середовища програмування. Розробка алгоритму, інструкції для програміста та користувача.
курсовая работа [1,2 M], добавлен 26.07.2013Характеристики методів стискання інформації. Дворівневе кодування, алгоритм Лемпеля-Зіва. Блок-схема алгоритму кодування. Вибір мови, середовища програмування. Опис інтерфейсу, тестування програми. Бібліотеки, які використовуються при написанні програми.
курсовая работа [728,9 K], добавлен 17.01.2014Аналіз особливостей мови програмування Java та середовища Android Studio. Розробка програмного забезпечення для якісного та ефективного вивчення іноземних слів. Побудова базових алгоритмів і структури даних. Вибір мови програмування, реалізація програми.
курсовая работа [335,3 K], добавлен 11.01.2015