Розробка програм мовою С++

ЗМІСТ
/>/> 
ВСТУП
РОЗДІЛ1 Функції
1.1 Модульна структура програм і способиінформаційного зв’язку модулів
1.2 Визначення, оголошення та виклик функції
1.3 Організація та активація функцій з іеформаційнимзв’язком через аргументи і параметри. Передача значень функції
1.4 Використання вказівників при роботі з функцією, зданими аргумента і параметрами. Передача вказівників
1.5 Передача за посиланням
1.6 Організація та активація функцій з інформаційнимзв’язком через зовнішні змінні
1.7 Рекурсивні функції
1.8 Вбудовані функції
1.9 Перевантажені функції
РОЗДІЛ2 Програмні модулі
2.1 Завдання 1 Структури
2.1.1Постановка завдання
/>2.1.2 Програма тапрограмна реалізація
2.1.3Тестування завдання
2.2Завдання 2 Фукція
2.2.1Постановка завдання
2.2.2Програма та програмна реалізація
2.2.3Тестування завдання
2.3Завдання 3 Масиви
2.3.1Постановка завдання
2.3.2Програма та програмна реалізація
2.3.3Тестування завдання
2.4Завдання 4 Операції надлінійним списком
2.4.1Постановка завдання
2.4.2Програма та програмна реалізація
2.4.3Тестування завдання
2.5Програма-монітор
2.5.1Постановка завдання
2.5.2Програма та програмна реалізація
2.5.3Тестування завдання
ВИСНОВКИ
ПЕРЕЛІКПОСИЛАНЬ
ДОДАТКИ
ВСТУП/> С++ — це універсальна мова програмування середньогорівня, яка підтримує більшість сучасних концепцій програування,характеризується достатньою потужністю, доброю структурованістю, високоюефективністю, можливістю безпосереднього доступу до дних, компактністю. В даному курсовому проектінаведені приклади реалізації програм таких розділів прогамування як файли,адреси даних та вказівники, цикли, масиви, графічний режим.
В теоретичнійроботі розглядається організація функцій у прграмах і реалізація звернень доних.
РОЗДІЛ 1. ФУНКЦІЇ
/> 
1.1 Модульна структура програм іспособи інформаційного зв’язку модулів
Програмнезабезпечення автоматизованих комплексів задач має, як правило, модульнуструктуру, тобто складається з послідовності окремих модулів, упорядкованих запевною системою. У різних інструментальних системах програмування модуль постаєу вигляді певної структурної одиниці: блоку, підпрограми, функції. У мові С++модулем є функція.
Проектуванняпрограмного забезпечення здійснюється за заздалегідь вибраною проектувальникомстратегією. Найчастіше використовується стратегія низхідного структурногопроектування, під час якого розробка починається з визначення загальної функції,або ж мети, яка повинна бути реалізована ком-плексом загалом, а потімреалізовується покрокова деталізація цієї функції доти, доки весь комплекс небуде описаний достатньою мірою докладно.
На кожному кроціодну чи кілька окремих підцілей функцій представляють або за допомогою окремихмодулів, або груп модулів. При цьому з’являється необхідність у деталізуваннінових функцій і т. д.
Зрештою, загальнафункція програмного комплексу виражається за допомогою еквівалентної структуривідповідним чином сполучених підфункцій. Кожна з таких підфункцій вирішує лишечастину задачі, однак вона є простішою від початкової функції і часто допускаєподальше розбиття, об’єднання та пере-вірку. Описаний процес не повинен бутичисто формальним. Якщо отримана на якомусь кроці функція достатньо проста, тоїї не слід штучно ускладнювати шляхом подальшого розбиття.
Після того, яквизначена функціональна структура програмного комплексу, з’ясовуєтьсятехнологія обробки даних, тобто здійснюється вибір пакетної або діалоговоїтехнології. У теперішній час найчастіше використовується діалогова технологія,при якій доступ користувача до процесу обробки даних різко розширюється, тобтокористувач отримує можливість звертатися послідовно до модулів, що обробляютькожен крок. Інтерфейс користувача, тобто його зв’язок з процесом обробки даних,у цьому варіанті доцільно реалізувати на основі системи меню різного рівняієрархії.
Програмнийкомплекс мовою С++ являє собою множину функцій, між якими реалізуютьсявизначені інформаційні зв’язки і які активізуються в наперед визначеній таієрархічно упорядкованій послідовності. Після визначення модульної структурипрограмного комплексу програміст вирішує питання про структуру вхідних та вихіднихданих, які мають бути строго уніфіковані в межах задач, про склад робочихзмінних та класи використовуваної пам’яті. Для вибору класу пам’яті для кожноїконкретної змінної аналізуються можливості передавання її значення в іншімодулі, вимоги до збереження її значення в мо-мент завершення певного модуля.
Область діїзмінних вибирається в межах викорис-товуваного програмістом класу пам’яті,визначає вид інформаційного зв’язку між окремими модулями. Якщо програмавикористовує автоматичні чи реєстрові змінні, то міжмодульний зв’язок повиненбути організований через аргументи і параметри, які без-посередньо вказуються упроцесі звертання до функції і в заголовковій її частині. У цьому разі йдетьсяпро використання функції з параметрами.
При використаннівказаних вище видів змінних може виникнути ситуація, коли необхідноактивізувати функцію без передавання аргументів, тобто між модулями не існуєінформаційного зв’язку. В цьому випадку функція оформлюється як функція безпараметрів і в момент її активізації список аргументів не описується. Якщопрограміст використовує зовнішні змінні, то інформаційний зв’язок між модулямиздійснюється на їх основі без передавання аргументів та параметрів. У цьомуразі говорять про використання функції без параметрів.

1.2 Визначення, оголошення та виклик функції
 
Функція — це логічно самостійначастина програми, котрою можуть передаватися параметри і яка може повертатизначення. Кожна функція повинна мати ім’я для виклику функції. Ім’я одної зфункцій — main( ) — має бути присутнім у кожній програмі, і воно зарезервоване.
При роботі злокальними змінними інформаційний зв’язок є єдиним видом міжмодульного зв’язку.З використанням функцій у мові С++ пов’язані три поняття: визначення функції;оголошення функції; виклик.
Визначенням функціїназивається код, який описує те, що робить функція. Визначення функції потрібнопроводити за такою схемою:
()
{
;

[return(вираз);]
}
Перед першоюфігурною дужкою стоїть заголовок визначення функції, між фігурними дужкамиміститься тіло визначення функції. Тіло функції — це складовий оператор, щомістить операто-ри, які визначають дії функції. Синтаксис мови С++ забороняєвсередині визначення функції поміщати визначення ще однієї функції. Тексти всіхфункцій повинні бути записані послідовно, один за іншим.
void fun (int х,float у) // заголовок функції
{                           //початок тіла функції

}                           //кінець тіла функції

Тип вертаногофункцією значення вказує тип даних результату, що повертається із функціїоператору її виклику. В С, якщо тип значення, що повертається функцією, незаданий, то функція за замовчуванням повертає значення int. В С++ необхідноявно оголошувати тип значення, що повертається функціями. Якщо функція невертає значення, то її тип повинен бути вказаний як void.
Ім’я функціїформується за правилами написання ідентифікатора. Потрібно пам’ятати, щосинтаксис мови С++ чутливий до регістра символів, тому
int Fun( )
int fun( )
int FUN( )
відносяться дозаголовків трьох різних функцій.
Список параметрів— інакше його називають списком формальних параметрів — розділений комамисписок змінних, які приймають значення в момент активізації функції під час їївиклику. Як об’єкти списку можуть використовуватися прості змінні, масиви,вказівники, а також типи, що визначаються користувачем. Список параметрів можебути відсутнім, тоді список параметрів задається як void. Списокпараметрів береться в круглі дужки, після яких точка з комою не ставиться. С++відрізняється від С способом завдання порожнього списку параметрів. У Спорожній список параметрів означає, що перевірка аргументів відсутня, привиклику функції може бути переданий будь-який аргумент. У С++ це означаєвідсутність аргументів, наступні два оголошення еквівалентні.
Наприклад,
int fun ( );
int fun (void);

Усі об’єктисписку мають бути описані відповідними типами безпосередньо в списку параметрівперед відповідним елементом списку.
float Sum (floatv, int d)
Потім записуєтьсяскладний оператор, у якому описуються змінні, що беруть участь у розрахункахусередині функції і за необхідності оператор повернення значення return.Оператор return може повертати в точку виклику функції лише одне значення, якеможе бути виразом, змінною, константою чи вказівником. Крім передачі значеньоператор return завершує виконання функції і передає керування наступномуоператору викличної функції, навіть у тому разі, якщо він не є останнім. Колифункція не повертає ніякого значення, то вираз в операторі відсутній, у цьомувипадку оператор return можна опустити.
Звертання дофункції має бути реалізоване з іншої функції, в якій обов’язково повинен міститисяопис типів вертаного функцією значення і бути вказане ім’я функції зі спискомаргументів (або ж фактичних аргументів чи фактичних параметрів) у потрібномумісці будьякого виразу.
();
Аргументи повиннібути попередньо описані. У списку аргументів вони знаходяться у тій самійпослідовності, що й у списку параметрів функції. Аргументи передаються звикличної функції в функцію, що викликається, за значенням, тобто обчислюєтьсязначення кожного виразу, що представляє аргумент, і це значеннявикористовується в тілі функції замість відповідного формального параметра.
Аргументи можутьбути константами, простими змінними, масивами, вказівниками. Безпосередньо в моментактивізації функції відбувається формування стека передаваних у функціюзначень, в якому довжина кожного значення визначається типом аргументу, щопередається. Виняток становлять вказівники, при їх використанні відбувається непередавання значень, а переад-ресація параметрів функції за конкретнимиадресами пам’яті.
Оголошенняфункції — це оператор, що включає в себе тип вертаного значення, ім’я функціїта її параметри. Цей оператор закінчується крапкою з комою. Мова С++ вимагає,щоб оголошення функції передувало її визначенню або першому використанню впрограмі. Таке оголошення називається прототипом функції. Прототип функціївказує компілятору тип даних, що повертаються функцією, кількість параметрів,яку чекає функція, тип параметрів і очікуваний порядок їх слідування.Компілятор використовує прототип функції для перевірки правильності викликівфункції. Прототип функції має вигляд:
();
Наприклад, intsum (int, int, int);
Цей прототипвказує, що sum має три аргументи типу int і повертає результат типу int.
Прототипрозміщується у викличній програмі до заголовку main( ). При наявності прототипупередбачається перетворення аргументів до активізації функції в тип, завданийдля відповідно-сті параметрів у прототипі. Наприклад,
int f(float а,float b)
main ( )
{ float a1, intb1;
 t = f(a1, b1);
 … }
Невідповідністьтипів аргументів та параметрів може призвести до неправильної інтерпретаціїпередаваних значень у момент активізації функції, коли формується стек значень,передаваних у функцію.
Прототип функції,розміщений поза описом якоїсь функції, відноситься до всіх викликів даноїфункції, які виникають після цього прототипу в даному файлі. Прототип функції,розміщений всередині опису певної функції, відноситься лише до викликівусередині цієї функції.
Другим способомоголошення функції перед використанням є поміщення прототипів функцій узаголовний файл (файл з роз-ширенням .h), який підключається директивою#include до тексту програми.
Списки аргументіві параметрів можуть містити невизначену кількість об’єктів. У цьому разі усписку параметрів після останнього ставляться крапки. Якщо у списку параметріввказані тільки крапки, то список може бути порожнім.
Прототип функції,заголовок функції і виклик функції повинні бути узгоджені між собою закількістю, типом, порядком сліду-вання аргументів і параметрів та за типомвертаних значень.
Наприклад,визначена користувачем функція sum( ) використовується для розрахунку сумиряду. Ця сума вертається з допо-могою оператора return у функцію main( ) івиводиться на друк.
// Підрахуноксуми ряду
#include
int sum(int, int,int); // прототип функції
main()
{ int nach, kon,shag;
 cout
 cin >>nach;
 cout
 cin >>kon;
 cout
 cin >>shag;
 cout
 return 0;
}
// Визначенняфункції sum
int sum (intnachr, int konr, int shagr)
{ int i, sumr =0;
 for(i = nachr;i
 sumr+ = i;
 return (sumr);
}
1.3 Організація та активація функцій з іеформаційнимзв’язком через аргументи і параметри. Передача значень функції
В С++ є триспособи передачі аргументів у функцію: передача за значенням, передача запосиланням з аргументами-вказівниками і передача за посиланням заргументами-посиланнями.
Коли аргументипередаються в функцію за значенням, то відбувається створення копій аргументів,передача їх у функцію і присвоєння параметрам. Викликана функція працює зкопією аргументів, тому жодні зміни значень параметрів не відіб’ються на змініаргументів. Якщо за значенням передається більше, ніж один аргумент, то копіїкожної з них присвоюються відповідним параметрам функції, яку викликають.
У попередньомуприкладі функція sum( ) передає копії змінних nach, kon, shagr, яківикористовуються функцією як значення для параметрів nachr, konr, shagr.
Виклик функції за значенням застосовується втих випадках, коли обсяг аргументів, що передаються в функцію, невеликий іфункція не повертає великого об’єму даних.

1.4 Використання вказівників при роботі з функцією, зданими аргумента і параметрами. Передача вказівників
Щоб матиможливість безпосередньо змінювати значення змінних викличної програми,необхідно використати передачу за посиланням з аргументами-вказівниками. Це,звичайно, необхідне в разі, коли в викличну програму потрібно передавати більшеодного значення і повернути більше за одне значення. При цьому передаються некопії змінних, а копії адрес змінних. Функція, використовуючи вказівник,здійснює доступ до потрібних елементів пам’яті, і можна змінювати значенняоб’єкта, розташовані за цією адресою. Дана передача дозволяє передавати ввикличну функцію масиви як аргументи. Якщо масив використовується як аргументфункції, передається тільки адреса масиву, а не копії всіх елементів. Привиклику функції з ім’ям масиву в функцію передається вказівник на першийелемент масиву. Існує кілька способів оголошення параметра, призначеного дляотримання вказівника на масив.
Перший варіантполягає в тому, щоб використати як аргумент функції ім’я масиву. При передачімасиву в функцію передається також розмірність, щоб функція могла оброблятизадане число елементів у масиві. Наявність розмірності індексів в оголошенніпараметра повідомляє функцію, як розташовані елементи в масиві. Якщо мипередаємо одновимірний масив як аргумент функції, в списку параметрів функціїрозмірність може бути опущена, тобто квадратні дужки будуть порожніми.Розмірність першого індексу багатомірного масиву також можна не вказувати, алевся інша розмірність індексів повинна бути зазначена.
Другий спосібполягає в тому, щоб використати як аргумент функції вказівник на масив.

1.5 Передача за посиланням
В С++ можназдійснювати передачу за посиланням з аргументами-посиланнями. Посилання єнеявним вказівником і використовується як інше ім’я вже існуючого об’єкта.Формат визначення посилання є таким:
& =
& ();
Як вираз, щоініціалізується, має бути ім’я певного об’єкта, що має місце в пам’яті.Значенням посилання після визначення з ініціалізацією стає адреса цього об’єкта.Наприклад,
int х = 7;    //Визначенай ініціалізована змінна х
int& ref=х;//Визначене посилання, значенням її є адреса змінної х
Для доступу довмісту ділянки пам’яті, на який вказує посилання, не треба виконуватирозіменування, що є обов’язковим при зверненні до значення змінної черезвказівник. Кожна операція над посиланням є операцією над тим об’єктом, з якимвона пов’язана. Можна змінити значення х, записавши х = 35; або ref = 35;.
Існують обмеженняпри визначенні і використанні посилань:
Не можна взяти адресу змінної типу посилань;
Не можна створити масив посилань;
Не можна створити вказівник на посилання;
Не допускаються посилання на бітові поля.
При використанніпосилання як параметра забезпечується доступ із тіла функції до відповідногоаргументу, тобто ділянки пам’яті, виділеної для аргументу, тобто початковазмінна може бути змінена за допомогою викличної функції. Щоб указати, щопараметр функції передається за посиланням, після типу параметра в прототипіфункції записується символ &. У виклику функції змінна вказується на ім’я,але вона буде передана за посиланням.
1.6 Організація та активація функцій з інформаційнимзв’язком через зовнішні змінні
Областю діїзовнішніх змінних є всі функції програмного комплексу, якщо ці змінні описаніперед якою-небудь функцією, або як extern усередині функції. Це означає,що працювати з зовнішніми змінними можна в межах комплексу і значення, щоформуються при цьому, доступні для всіх функцій. У цьому разі немаєнеобхідності здійснювати міжмодульний зв’язок через аргументи і параметри, адостатньо лише активізувати необхідну функцію і продовжити виконання дії ззовнішніми змінними, які були розпочаті в інших функціях. Імена змінних в усіхфункціях для позначення відповідних об’єктів повинні обов’язково бути однаковими.
1.7 Рекурсивні функції
Функціяназивається рекурсивною, якщо вона викликає сама себе. Розрізняють прямута непряму рекурсії. Функція називається непрямою рекурсивною в тому разі, якщовона містить звернення до іншої функції, що містить прямий або непрямий викликпершої функції. Якщо в тілі функції явно використовується виклик цієї функції,то має місце пряма рекурсія. Класичним прикладом рекурсії є обчисленняфакторіала. Факторіал невід’ємного цілого числа n дорівнює
n х (n–1) х (n–2)х.… х 3 х 2 х 1,

причому завизначенням факторіал 1! і 0! дорівнює 1. Факторіал числа дорівнює добуткупопередніх щодо нього послідовностей чисел, тобто n! = nx(n–1)!.. Якщообчислення факторіала оформити у виді рекурсивної функції, то програма можебути подана в ось якому вигляді:
// Обчисленняфакторіала
#include
unsigned longfactorial (unsigned int);
void main( )
{ int i; unsignedint n;
 cout
 cin >> n;
 for (i = 0;i
 cout
 return;
}
unsigned longfactorial (unsigned int num);
{if (n = = 1 ¦¦ n= = 0)
 return 1;
else
 return(num*factorial(num-1));
}
Рекурсивніфункції обробляються повільно й займають більше стекової пам’яті, ніж їхні нерекурсивніеквіваленти. Надто велика кількість рекурсивних викликів функції може призвестидо переповнення стека. Оскільки місцем зберігання параметрів і локальнихзмінних функції є стек, і кожен новий виклик створює нову копію змінних,простір стека може бути вичерпаний, це викличе помилку переповнення і призведедо аварійної зупинки програми.

1.8 Вбудованіфункції
 
Вбудованіфункції (inline) — це функції, чиє тіло підставляється в кожну точку виклику, замість того,щоб генерувати код виклику. Модифікатор inline перед вказівкою типурезультату в оголошенні функції загадує компілятору згенерувати копію кодуфункції у відповідному місці, щоб уникнути виклику цієї функції. У результатівиходить множина копій коду функцій, вставлених у програму, замість єдиної копії,якою передається керування при кожному виклику функції. Модифікатор inline необхіднозастосовувати для невеликих і часто використовуваних функцій. Наприклад,
#include
inline int min(int x1, int y1)
{ if (x1
 return (x1);
 else
 return (y1);
}
void main( )
{ int х, у, z;
{ cout
 cin >> х>> у;
 z = min(х, у);
 cout
 
}
Компілятор можеігнорувати модифікатор inline, якщо вбудований код надто великий,компілятор згенерує звичайний виклик функції.

1.9 Перевантажені функції
С++ дозволяєвизначати функції з однаковими іменами, але унікальними типами аргументів. Уцьому разі про функції кажуть, що вони перевантажені. Перевантаження функціївикористовується звичайно для створення кількох функцій з однаковим ім’ям,призначених для виконання схожих задач, але з різними типами даних. Наприклад,
#include
int fun (int х,int у)
{ return(х*х+у*у);}
float fun (floatх, float у)
{ return(х*х+у*у); }
main( )
{ int x1 = 10, y2= 3; float x2 = 13.75, y2 = 11.25
cout
 
 
 
return 0;
}
Перевантажені функції розрізняються задопомогою сигнатури — комбінації імені функції і типів її параметрів.Компілятор кодує ідентифікатор кожної функції за числом і типом її параметрів,це називається декорируванням імені, щоб мати можливість здійснювати надійнезв’язування типів. Надійне зв’язування типів гарантує, що викликається належнафункція і що аргументи узгоджуються з параметрами. Компілятор виявляє помилкизв’язування і видає повідомлення про них. Кожне декороване ім’я починається зсимволу @, який передує імені функції. Закодований список параметрівпочинається з символів $g. Типи значень функцій, що повертаються, невідбиваються в декорованих іменах. Перевантажені функції можуть мати різні абооднакові типи значень, що повертаються, і обов’язково повинні мати різні спискипараметрів. Дві функції, відмінні лише за типами значень, що повертаються,викличуть помилку компіляції.
РОЗДІЛ 2. Програмні модулі
2.1 Завдання 1 Структури
2.1.1 Постановка завдання
У файліоперативної систекми «Task.in» зберігається в текстовій формі відмість звідомостями про продукти. Кожен рядок цього файлу містить відо-мості про одинвид продукту, представлені у такому форматі: 1…2 – порядковий номер продукту;позиція 3 – пробільних літера; позиції 4…15 – назва продукту довжиною не більше11 имволів, в довільному місці поля; позиція 16 – пробільних літера; позиції17…19 – вміст білка в 100 грамах продукту (ціле).
Кількістьпродуктів у відомості дорівнює 16. Приклад зазначеного файлу:
01 щука 20
02 сом 16
Написати:
1) визначеннямасиву структур для зберігання зазначеної відомості і фрагмент програми, якийзаповнить відомість даними, вводяться з файлу операційної системи «Task.in»(введення даних повинно здійснюватися в текстовому режимі);
2) фрагментпрограми для знаходження і друку (у файл «Task.out») інформацію про продукт знайбільшим вмістом білка.
2.1.2 Програма та програмна реалізація
Дане завдання реалізоване умодулі TASK1.CPP(TASK1.EXE)
Для опису даної програми була введена структура(struct Tbook) та заданий масив (char name[20]) для зберігання даних даноготипу. Реалізація програми здійснюється за допомогою файлів “Task_in” та “Task_out”.Зчитування проводиться стандартною функцією scanf згідно визначеногоформату даних вхідного файлу «Task_in». Під час роботи програма визначає продуктз найбільшим вмістом білка. Результатом виконання є вивід інформації пропродукт та її запис у вихідний файл «Task_out». Тіло програми повністюпобудоване згідно алгоритму(додаток 7). Розглянемо програму:
// Програма Task1.cpp
#include
#include
#include
#include
#include
#include
struct Tbook
{
         char name[20];
         int index;
         float price;
};
Tbook shelf[15];
FILE *taskin, *taskout;
void TASK1() {
         clrscr();
         printf(“Chytania fajlu’task.in’\n\n»);
         if((taskin =fopen(«task.in», «rt»)) == NULL)
         {
                   perror(«ERROR\n»);
                   getch();
                   exit(errno);           };
         int i = 0;
         sqrt;
         while(i
         {
                   if(fscanf(taskin,”%2i%11s %f\n”,
                            &shelf[i].index,
                            shelf[i].name,
                            &shelf[i].price
                   ) == EOF) break;
                   printf(“%2i %11s%2.0f\n”,
                            shelf[i].index,
                            shelf[i].name,
                            shelf[i].price);
                   i++;   };
         fclose(taskin);
         printf(“\n…zavershene!”);
         float max=shelf[0].price;
         int ind=0;
         for(i = 0; i
         {
         if(shelf[i].price>=max){max=shelf[i].price; ind=i;}
         };
         printf(“\n\nMaksymalnyj vmistbilka mae \”%s\” — %2.0f\n”,shelf[ind].name,shelf[ind].price);
         printf(“\n\nZapys u fajl’task.out'”);

         taskout =fopen(«task.out», «w+»);
         fprintf(taskout, “%2i %11s%2.0f”,
                            shelf[ind].index,
                            shelf[ind].name,
                            shelf[ind].price);
         fclose(taskout);
         printf(“…zavershenyj!”);
         getch();
};
/> 
2.1.3 Тестування завдання
Для проведення тестування потрібно першочерговозаповнити файл Task_in (з операційної системи). Даний файл було заповнненонаступними значеннями(рис. 2.131). Після цього програму потрібно запустити. Результатвиконання, а саме інформацію про продукт з найбільшим вмістом білка можна записанийу вихідному файлі Task_out(рис. 2.132).
/>/>
 
 
 
Рис. 2.131 Task_in Рис. 2.132 Task_out

2.2Завдання 2 Фукція
 
2.2.1Постановка завдання
Знайти величину іномер першого негативного і останнього позитивного елементів у масиві дійсноготипу заданого розміру.
2.2.2 Програма та програмна реалізація
Дане завдання реалізоване умодулі TASK2.CPP(TASK2.EXE)
У підпрограмі оголошено масив(float a[100]),змінна n-відповідає кількості елементів у масиві, також є дві функції (int pos,int neg) – одана шукає намер першого негативного елементу масиву, інша номеростаннього позитивного елементу масиву. Тіло програми повністю побудованезгідно алгоритму(додаток 8). Розглянемо програму:
// Task2.cpp
#include
#include
//——————–
int pos(float *a, int n)
{ int i=n-1;
while (a[i]
i–;
return i;
}
//———————-
int neg(float *a, int n)
{
int i=0;
for (i=0; i
if (a[i]
return i;
}
//————————-
void TASK2()
{
clrscr();
int i,n;
int k1;
int k2;
float a[100];
cout
cin>>n;
if (n>1)
{
for (i=0; i
{
cout
cin>>a[i];
k1=pos(a,n);
k2=neg(a,n);
}
}
cout
cout
cout
getch();
}

2.2.3 Тестування завдання
Для перевірки даної підпрограми мною буливведені дані про кількість елементів у масиві та власне сам масив. В результатібув отриманий результат — номер та власне саме значення першого негативного таостаннього позитивного елементів у масиві(рис. 2.321).
/>
Рис. 2.321 Тестовий приклад Task2.срр
2.3 Завдання 3 Масиви
2.3.1 Постановка завдання
Елемент матриці називають локальниммінімумом, якщо його значення строго менше значень всіх наявних сусідів.Підрахувти кількість локальних мінімумів заданої матриці і надрукува інформаціюпро кожного з них.
 
2.3.2 Програма тапрограмна реалізація
Дане завдання реалізоване умодулі TASK3.CPP(TASK3.EXE)
/>Напочатку програми оголошений масив р[10][10]. Оголошений лічильник k – якийпідраховує кількість локальних мінімумві у матрицці. Під час запускупідпрограма запитує користувача розмірності матриці n. Після цього воназаповняється елементами. Наступним етапом є опрацювання матриці оператором for.Після опрацювання виводиться повідомлення про кількість локальних мінімумів k таінфориація про кожного з них. Програма побудована згідно алгоритму:
void TASK3()

/>

Розглянемо програму:
 //Task3.cpp
#include
#include
void TASK3(){
clrscr();
int i,j,n,k,k1;
k=0;
int p[10][10];
cout
cin>>n;
for (i=0; i
for (j=0; j
cout
cin>>p[i][j];}
}
for (i=0; i
for (j=0; j
k1=0;
if ((i==0) ||(p[i-1][j]>p[i][j])) k1++;
if ((i==n-1) ||(p[i+1][j]>p[i][j])) k1++;
if ((j==0) ||(p[i][j-1]>p[i][j])) k1++;
if ((i==n-1) ||(p[i][j+1]>p[i][j])) k1++;
if (k1==4){k++;cout
}
cout
cout
getch();
}

2.3.3 Тестування завдання
Для тесту були введені наступнізначення(рис. 2.331). В результаті був отриманий наступнийрезультат:
/>
Рис. 3.31 Тестовий приклад Task3.cpp
2.4 Завдання 4 Операції над лінійним списком. Робота здинамічною пам’яттю
 
2.4.1Постановка завдання
Визначенонаступний покажчик на початок лінійного списку:
struct Node //NODE: вузол лінійного списку
{
Node *pLink; //Pointer LINK:
 // Покажчик начерговий вузол
float Info //INFOrmation: інформація
 } *Start;

Написатипрототип, визначення і приклад виклику функції для видалення зі списку kостанніх елементів із звільненням зайнятої ними пам’яті. В окркмому випадку,перед викликом цієї функції лінійний список може бути порожній або може міститибудь-яку кількість елементів.
         Усівихідні дані (покажчик на корінь лінійного списку, кількість що видаляютьсяелементів) і результати виконання функції (покажчик на початок лінійногосписку) повинні передаватися через список параметрів.
 
2.4.2 Програма тапрограмна реалізація
Дане завдання реалізоване умодулі TASK4.CPP(TASK4.EXE)
Опишемо алгоритм роботи даноїпрограми:
Створено список (Node *pLink;), у якому оголошено наступніфункції:
void func(Node *Start); // Відповідає завидалення
 елементів зі списку
void vvid(); // Вводимо елементи списку
 (кінцевий елемент — 0)
void vuvid(Node *Start); // Виводитьрезультат, без останніх
 k- елементів
void clear(Node *Start); // Звільняє займануними пам’ять
Розглянемо програму:
// Task4.cpp
#include
#include
struct Node
 {
Node *pLink;
float Info;
 } *Start, *Cur, *New, *Prev;
int n=0;
void func(Node *Start);
void vvid();
void vuvid(Node *Start);
void clear(Node *Start);
char Empty;
void TASK4()
 {
clrscr();
vvid();
vuvid(Start);
func(Start);
vuvid(Start);
clear(Start);
getch();
 }
void vvid()
 {
cout
Cur = new Node;
Start = Cur;
do
 {
Prev = Cur;
cin >> Cur->Info;
Cur->pLink = new Node;
Cur = Cur->pLink;
n++;
} while(Prev->Info != 0);
Prev->pLink = NULL;
delete Cur;
n–;
Cur = Start;
while(Cur->pLink != NULL)
 {
Prev=Cur;
Cur=Cur->pLink;
 }
if(Start==Cur) Start = NULL;
 else
 {
Prev->pLink=NULL;
delete Cur;
 }
 }
void vuvid(Node *Start)
 {
if(Start != NULL)
 {
cout
Cur = Start;
while(Cur != NULL)
 {
cout Info
Cur = Cur->pLink;
 }
cout
}
Else {
cout
Empty =’y’; }
}
void func(Node *Start) {
if(Start != NULL)
 { int k;
Cur=Start;
cout
cin >> k;
if(k
for(int i=0; i
 { Prev=Cur;
Cur=Cur->pLink;
 }
Prev->pLink=NULL;
while(Cur!=NULL)
 {
Prev=Cur;
Cur=Cur->pLink;
delete Prev;
}
 }
else
cout
}
void clear(Node *Start) {
if(Start != NULL) {
Cur = Start;
while(Cur != NULL) {
Prev = Cur;
Cur = Cur->pLink;
delete Prev; }
delete Cur; }
}
2.4.3 Тестування завдання
При запуску програми з’являєтьсяповідомлення з проханням ввести елементи списку (кінцевий елемент списку — 0).Вводимо елементи списку. Натискаємо клавышу enter і появляється перелік всіх введених елементівсписку. Після цього слід ввести кількість k — останніх елементів для видаленняз кінця списку із звільненням займаної ними пам’яті. Кінцевим результатом євивід на екран списку без k останніх елементів і звільнення займаної ними пам’яті(рис.3.41).
/>
Рис. 3.41 Приклад видалення k останніхелементів зі списку із звільненням пам’яті
2.5 Програма-монітор
2.5.1 Постановка завдання
Написати програму-монітор, яка б об’єднувалавсі модулі, додати інформацію про автора і протестувати роботу проекту

2.5.2 Програма та програмна реалізація
Данезавдання реалізоване у модулі MAIN.CPP(MAIN.EXE)
Данийпроект складається з 6 модулів та основного модуля, в якому міститься головнафункція main() проекту. Додаткові модулі не зв’язані один з одним, а лише зголовним модулем.
Загальнасхема проекту із способами взаємодії між модулями наведена на рисунку 2.521
/>

Рис. 2.521 Схемапроекту
Розбиття програми на різні процедуривизначається логічною структурою програми. Використання додаткових модулів дозволилоспростити реалізацію проекту та більш наочно показати взаємодію одних частинпроекту з іншими та значно зменшити час на відлагодження та компіляцію цілогопроекту.
MAIN.CPP(додаток 1) – основний файл проекту, в ньому знаходиться послідовністьдій програми, тобто в даному модулі програма викликає інші підмодулі яківиконуюсь певну функцію. Програма спочатку запускає електронну титульнусторінку курсової роботи і для продовження просить натиснути будь яку клавішу,після цього виводить головне меню, в якому запитує виконання наступної дії.Після кожної виконаної дії програма виводить головне меню.
Всі цідії безпосередньо виконуються лише запуском відповідних функцій з додатковихмодулів. Крім того, функція GRAPH() ініціалізує графічний режим, підключаючи BGI драйвер EGAVGA.BGI.
/>Програма-монітор побудована згідноалгоритму(додатку 5).
Опишу словесноалгоритм роботи основного модулю проекту.
Цеймодуль є основним меню програми, в якому надається змога вибрати любе завдання.Він містить наступні функції:
voidTYTUL() – виводить титульну сторінку проекту,
voidGRAPH() – ініціалізує графічний режим, підключаючи BGI драйвер EGAVGA.BGI,
void TASK1()– запускає перше завдання на виконання,
voidTASK2() – запускає друге завдання на виконання,
void TASK3()– запускає третє завдання на виконання,
void TASK4()– запускає четверте завдання на виконання,
voidAVTOR() – виводить повідомлення про автора проекту.
До ньогопідключаються усі інші модулі програми і саме з нього вони починають своєвиконання. При запуску програми цей модуль починає виконання TYTUL, тобто вінініціалізовує графічний режим і виводить титульну сторінку на екран. Післяцього необхідно натиснути будь-яку клавішу, щоб повернутися в головне меню.Кожному пункту меню відповідає відповідна цифра, після вводу якої запускаютьсяінші функції (наприклад підкючення графічного режиму за допомогою функціїGRAPH() і виконання підпрогами виводу повідомлення про автора — AVTOR(), цеввід цифри 6).
ПідпрограмаAVTOR(додаток 3). Спочатку встановлюється колір фону, після цьоговстановлюється колір тексту, що містить іформацію про автора. Після цьоговиконується затримка цього зображення на екрані монітора за допомогою функціїgetch() і після натискання будь-якої клавіші виконується очистка екрану задопомогою функції clrscr() і пвернення до основного меню.
ПідпрограмаTYTUL(додаток 2) містить лише іншу текстову інформацію. Після натисканняклавіші enter підпрограма повертається у головне меню функції main().
 
2.5.3 Тестування завдання/>
Длязапуску програми потрібно запустити на виконання файл MAIN.EXE. Для вірноїроботи програми у тій же папці має бути файл-драйвер EGAVGA.bgi.
Данапрограма може працювати під управлінням операційної системи сімейства Windows,починаючи від версії 95 та під управлінням ОС MS-DOS.
Мінімальнісистемні вимоги для коректної роботи програми:
 – операційнасистема Windows 95, Windows 98 або MS-DOS;
 – процесор– не менше 80386;
 – оперативноїпам’яті – 512 Кб;
 – відеокарта– 16 біт;
 – вільногомісця на жорсткому диску – 1Мб.
Післязапуску програми спочатку бачимо зображення електронної титульної сторінки (рис.2.531).

/>
Рисунок 2.531- Зображення електронної титульної сторінки
Програмачекає, поки буде натиснута довільна клавiша.
Післянатискання з’являється меню програми, з варіантами виконуваних операцій(рисунок 2.532)

/>
Рис. 2.532– Меню програми з варіантами дій
Для тогощоб запустити перший модуль необхідно ввести 2 і натиснути клавішу вводу. Післяцього ми побачимо зображення подібне до рисунка 2.533 (зображення залежить відвхідних даних).
/>
Рис.2.533– Завдання 1

Програмазберігає вихідні дані у файл TASK.OUT і чекає поки ми натиснемо будь-якуклавішу і потрапимо у головне меню.
Якщовводимо 3 і натискаєм клавішу вводу, то запуститься підпрограма знаходженнязначення величини і номеру першого негативного і останнього позитивноо елементіву масиві( рис. 2.534).
/>
Рис.2.534– Завдання 2
Якщовведемо 4 і натискаєм клавішу вводу, то запуститься підпрограма знаходженнякількості локальних мінімумів (рис. 2.535).
/>
Рис.2.535– Завдання 3

Якщовведемо 5 і натискаємо клавішу вводу, то запуститься підпрограма видалення зісписку k останніх елементів із звільненням зайнятої ними памяті (рис. 2.536)
/>
Рис. 2.536– Завдання 4
Якщо 6 інатискаємо клавішу вводу, появитьяс інформація про автора проекту(рис. 2.537).
/>
Рис.2.537– Вивід повідомлення про автора програми

Післянатискання будь-якої клавіші ми потрапляєм у головне меню програми. Після вводу7 і натисканні клавіші вводу, ми можем побачити, що програма припиняє своєвиконання.

/>/>ВИСНОВКИ
Під час виконанняданої курсової роботи я удосконалив свої знання в мові програмування С++ та навчивсяписати програми в середовищі Borland C++.
Під час виконанняданої роботи були опрацьовані всі розділи мови програмування С++. Детальнішезосереджена була увага на таких розділах як масиви (їх оголошення таініціалізація), стрічки, функції, файли (а саме зчитування даних з файлу,виведення даних у файл), структури та їх оголошення, вказівники. Створеннятитульної сторнки та головного меню спонукало до більш детальнішого опрацюванняграфічного режиму та функцій для графічних побудов.

ПЕРЕЛІКПОСИЛАНЬ
 
1.    Глинський Я.М., Анохін В.Є.,Ряжська В.А. С++ і С++ Builder. Навч. посібн. 3-тє вид. – Львів: СПД Глинський,2006. – 192с.
2.    Пахомов Б.И. С/С++ и BorlandC++ Builder для студента. – Спб.: БХВ-Петербург, 2006. – 448 с.
3.   С/С++.Программирование на языке высокого уровня / Т.А. Павловская. СПб.: Питер, 2002.– 464 с
4.    С для «чайников», 2-еиздание.: Пер. с англ. – М.: ООО «И.Д.Вильямс», 2006. – 352с.
5.   СабуровС. Языки программирования C++. — М.: Бук_пресс, 2006. — 647 с.
6.   http://soft.munic.msk.su/