Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
колоквіум.docx
Скачиваний:
4
Добавлен:
18.07.2019
Размер:
35.7 Кб
Скачать

1.Структура програм на C++

У мовi С++ пiдпрограми називаються

функцiями (functions), а програма на С++ являє собою набiр iз одної або бiльше функцiй. Будь-яка програма на С++ має мiстити функцiю main. З неї починається виконання програми. Іnt main () _ означає, що функцiя main також повинна повертати цiле число. Найпр. виглядає так:int main( ) { return 0; }. Iдентифiкатори викор. для

iмен. рiзних об’єктiв. Iдентифiкатори складаються iз (A-Z, a-z)і цифр (0−9). Типи char, chort, int i long називаються цiлими. Сhar _ представляє найменше число, а long _ найбiльше. Типи з плаваючою крапкою: float, double i long double. Змiнна _ це область пам’ятi, яка позначена iдентифiкатором

i в якiй зберiгаються данi, значення яких змiнюються. Оголосити змiнну означає задати її тип та iм’я. Iдентифiкатор endl та \n викон. закiнчення

рядка.

2. Побудова програми

Рядок #include є обов’язковим упрограмi i обробляється препроцесором. Препро-

цесор _ це програма, яка дiє як фiльтр на етапi компiляцiї. Перед

тим, як потрапити на вхiд компiлятора, вихiдна програма проходить

через препроцесор. 1#include <iostream.h>*const float*PI=3.14; //число пі*const float R=4.0; //радiус кола*int main( )

{*float S; //Мiстить результат обчислення площi*сout<<"Число пi дорiвнює "<<PI<<endl;*cout<<"а радiус кола становить "<<R<<endl;

S=PI*R*R;*cout<<"Площа круга становить: "<<S<<endl;*return 0;}

2. #include <iostream.h>*const float a=11.7; //довжина 1-ї сторони*const float b=14.3; //довжина 2-ї сторони*const float c=12.2; //довжина 3-ї сторони*const float d=8.5; //довжина 4-ї сторони*int main( )*{*

float P; //периметр чотирикутника*P=a+b+c+d;* cout<<"Периметр такого чотирикутника складає: "<<P<<" см"<<endl;*return 0;*}

3.Арифметичнi вирази

Прiоритет:( ), *, /, %, +, -. Оголосимо такi змiннi: int _Int; float _Float;

Тут змiнна _Int може мiстити тiльки цiлi числа, а _Float дiйснi.

Якщо присвоїти _Float = 12, то комп’ютер вiдмовиться зберiгати в цiй змiннiй значення, вiдмiннi вiд float. Через це компiлятор роз-

мiщує в програмi додатковi iнструкцiї, якi спочатку перетворять 12 у 12.0, а потiм збережуть 12.0 у змiннiй _Float. Таке неявне (ав-

томатичне) перетворення значення iз одного типу в iнший називається зведенням типiв. Кожен раз, коли цiле значення i значення з плаваючою крапкою є операндами арифметичної операцiї, вiдбувається неявне перетворення типiв за такою схемою:1. Цiле число тимчасово перетворюється в число з плаваючою крапкою.2. Виконується арифметична операцiя.3. Результатом операцiї стає число з плаваючою крапкою.

4. Виклик функцiї i бiблiотечнi функції

Параметрiв функцiї може бути 1, декiлька або зовсiм не бути,

так як у main. Якщо їх декiлька, то вони роздiляються комою. Треба

мати на увазi, що виклик функцiї має бiльш високий прiоритет нiж

арифметичнi операцiї. void NewFunction(...)*{

...*} Функцiя NewFunction є прикла-

дом функцiї, яка не повертає нiякого значення джерелу свого викли-

ку. Вона просто виконує деяку дiю i закiнчується. При використаннi

функцiї типу void виклик є окремою, самостiйною командою.

5. Форматування виводу

Форматування виводу програми означає керувати зовнiшнiм ви-

глядом її результатами при вiдображеннi на екранi або принтерi. сout <<"Привiт!"<<endl<<endl<<"Дорогi друзi."<<endl; a=10, b=20, c=30;

сout<<"Результат: "<<a<<b<<c; Крiм endl є ще два iнших манiпулятори, setw i setprecision. Якщо endl стає доступним автоматично при включеннi

в програму файлу заголовкiв iostream.h, то setw i setprecision потребують додатково включити в програму файл заголовкiв iomanip.h. cout<<setw(5)<<someInt;Манiпулятор setw дозволяє керувати кiлькiстю позицiй для виводунаступного за манiпулятором елемента даних. setw застосовується тiльки для форматування чисел i рядкiв, але не даних типу char. *cout<<setprecision(3)<<x;Даний манiпулятор вазує необхiдну кiлькiсть знакiв пiсля десяткової крапки.

6. Iнтерактивний ввiд-вивiд

Файл заголовкiв iostream.h мiстить означення двох типiв даних : istream i ostream. Цi

типи представляють собою вiдповiдно вхiднi i вихiднi потоки.

Iнтерактивною (interactive) називається програма , за допомогою

якої користувач обмiнюється iнформацiєю безпосередньо з комп’юте-

ром. Для того, щоб iнтерактивна програма отримала данi, необхiдно

спочатку надрукувати, так звану, вхiдну пiдказку, що повiдомляє користувачу, якi данi необхiдно ввести. Програма також повинна роздрукувати всi величини, якi отриманi

ззовнi, для того щоб користувач мiг переконатися в тому, що вони

введенi правильно. cout<<"Введiть оцiнку за перший модуль:"<endl; *cin>>oz1;//Пiдказка *cout<<"Введiть оцiнку за другий модуль:"<<endl; *cin>>oz2;

7. Неiнтерактивний ввiд-вивiд

Типовим прикладом неiнтерактивного вводу-виводу у великих комп’ютерних системах _ це пакетна розробка. При пакет-

нiй розробцi користувач не взаємодiє з комп’ютером пiд час роботи

програми. Програми без дiалогового вводу-виводу не друкують пiдказки

для вводу даних. Але корисно використовувати еходрук усiх введе-

них даних. Вiн дає користувачу можливiсть упевнитись у правильно-

стi вводу. Основна вiдмiннiсть мiж iнтерактивними i неiнтерактивни-

ми програмами полягає у вимогах до вводу i виводу. Неiнтерактивнi

програми є бiльш вимогливими до цього.

8. Файловий ввiд-вивiд

Для того, щоб програма могла використовувати файловий ввiд-

вивiд, необхiдно зробити наступне:

1. Повiдомити препроцесору, щоб вiн включив у програму файл

заголовкiв fstream.h. 2. Оголосити файли, якi будуть використовуватися.

3. Приготувати кожний файл до читання або запису за допомо-

гою функцiї open.4. Задати iм’я файлу в кожному операторi вводу чи виводу. У файлi заголовкiв fstream.h стандартна бiблiотека С++ оголошує два типи даних: ifstream i ofstream. Це є вхiдний i вихiдний

файловi потоки вiдповiдно. Всi означенi для типу istream операцiї:

>> _ добування, функцiя get i функцiя ignore, допустимi також

для типу ifstream. Аналогiчно всi операцiї, що належать до типу

ostream: << _ вставка, endl, setw, setprecision застосовуються i до

типу ofstream. ifstream inP("in_p.dat"); *ofstream outP("out_p.dat");

9. Потiк керування

Порядок, у якому вирази виконуються в програмi, називається

потоком керування. У мiсцях, де потрiбно змiнити напрям потоку керуван-ня, використовуються керуючi структури. Цеспецiальнi оператори, якi передають керування виразу, що не є наступним за порядком. Керуюча структура вибору використовується для

вибору мiж взаємовиключаючими дiями. Для цього формулюється

деяке твердження, яке або iстинне, або нi. Якщо воно iстинне, токомп’ютер виконує один вираз, якщо нi, то iнший.

10. Умови i логiчнi вирази

Щоб сформулювати питання на мовi С++, необхiдно сформулю-

i. Булеві вирази складаються з логiчних значень i

операцiй. Ось декiлька прикладiв логiчних виразiв:

• булева змiнна або константа;

• два вирази, що з’єднанi оператором порiвняння;

• два логiчних вирази, що з’єднанi логiчним оператором. int dataOK;*...*dataOK=1; // зберiгає iстину (true) в dataOK *...*dataOK=0; // зберiгає хибу (false) в dataOK.

== – рiвне*!= – нерiвне== – рiвне*!= – нерiвне і т.д. Пріорітет:

! * / % + - < <= >= > == != && || =

11.Умовний оператор

Оператор if дозволяє манiпу-

лювати потоком керування. У С++ умовний оператор має двi форми:

if −then−else i if −then. if деяка умова iстинна*then виконати певну дiю

else виконати iншу дію. if(time<=10.0)*v=s/time;*else*v2=s2/time;*cout<<v2;. Приклад програми в якій потрібно виконати певну дію, в іншому випадку ніяких дій не виконувати. if (x<=y)*a=10;*else*;. *int main ( )*{*int t=2, b=7, r=3;*if (t>b)

{*if (b < r) r=b;*}*else r=t;*return (0);*}.

12. Вкладені умовні оператори

int main ( )*{*int t=2, b=7, r=3;*if (t>b)*{*if (b < r) r=b;*}*else r=t;*return (0);*}. При розмiщеннi if всерединi if створюється такзвана вкладена керуюча структура. if (month==1)

cout<<"Сiчень";*else*if (month==2)*cout<<"Лютий";*else*if (month==3)

...*else*cout<<"Грудень". Форматування не впливає на те, до якого if буде нале-

жати else. Фiгурнi дужки вказують, що внутрiшнiй умовний оператор за-

кiнчений, тому else ставиться у вiдповiднiсть зовнiшньому if.

13. Перевірка стану потоку вводу-виводу.

C++ забезпечує спосiб перевiрки, чи перебуває потiк у станi вi-

мови, чи нi. Для цього потокова змiнна просто пiдставляється у ло-

гiчний вираз, так нiби це є булева змiнна:if (cin)*...*if (!inFile)*... Це називається перевiркою стану потоку.Результатом такої перевiрки є або ненульове значення, яке означає,що остання операцiя вводу-виводу з даним потоком була успiшною,

або нуль, що вiдповiдає помилці. #include<iostream.h>#include<fstream.h> //Для файлового вводу-виводу

int main()*{*int height;*int width;*ifstream inFile;*inFile.open("mydata.dat");//Спроба вiдкрити файл

if (!inFile) // Чи вiдкритий файл?*{*cout<<"Файл не вiдкритий";//Вивiд повідомлення*return 0; // i завершуємо програму*}

14. Цикл while.

Оператор while, як i оператор if, перевiряє виконання деякої

умови. while (_Val !=25)*cin>>_Val; Вираз while являє собою циклiчну керуючу структуру. Оператор, який повторюється кожен раз, коли виконується той чи iнший

цикл, називається тiлом циклу . У прикладi тiло циклу _це оператор, що зчитує значення _V al. Конструкцiя while має наступний змiст: “Якщо значення умови вiдмiнне вiд нуля (true), товиконати тiло циклу”. Тiло циклу виконується за декiлька крокiв:

1. Момент, в який потiк керування передається першому оператору всерединi тiла циклу, називається точкою входу даного циклу. 2. Наступний прохiд через цикл здiйснюється кожен раз, коли

виконується його тiло. Такий прохiд називається iтерацiя.

3. Перед кожною iтерацiєю керування передається на перевiр-

ку умови з початку циклу.4. Коли остання iтерацiя завершена i керування перейшло до

оператора, наступного безпосередньо пiсля циклу, говорять,

що програма вийшла iз циклу. Завершення циклу while вiдбувається

за рiвностi нулю умови в точцi його перевiрки.

15. Типи циклічних структур.

Можна видiлити такi основнi типи циклiчних процесiв: цикли,

що керуються лiчильником, якi повторюються вказане число раз; цикли, що керуються подiєю якi

повторюються доти, доки в серединi циклу не вiдбудеться певна подiя.

Цикл, що керується лiчильником, в аналiзi умови використовує

змiнну циклу. Перед входом у такий цикл необхiдно виконати iнiцiалiзацiю змiнної керування циклу, тобто присвоїти їй певне початкове значення. Потiм це значення порiвнювати з певною цiлою величиною, яка обмежує кiлькiсть iтерацiй. За кожної наступної iтерацiї змiнна циклу отримує прирiст. Цикл, що керується подiєю, має 2-а види: цикл, що керується сигнальною мiткою i цикл, що керується ознакою закiнчення файлу .Для того, щоб цикл був корисним, його тiло повинно виконувати певнi дiї. Є три основнi завдання, якi виконують циклiчнi процеси:

лiчба, сумування i облiк попереднього значення. Змiнна-лiчильник, значення якої отримує одиничний прирiст за кожної iтерацiї циклу, називається лiчильником iтерацiй.

16.Проектування циклів вкладена логіка!

Проектування циклiв дiлиться на два завдання: розробку потоку

керування i планування дiй всерединi циклу. Кожне завдання у свою

чергу розбивається на три етапи: циклiчний процес, його iнiцiалiза-

цiя i обновлення. Якщо цикл керується лiчильником, то:• присвоїти лiчильнику iтерацiй значення 1; • збiльшити лiчильник на 1 в кiнцi кожної iтерацiї. Коли цикл використовує лiчильник подiй, то:

• присвоїти лiчильнику подiй нульове значення; • збiльшити лiчильник на 1 при кожнiй подiї;.Приклад: count1=1; *while (count1<=a)*{*...*count2=1; while (count2<=b)*{*...*count2++; }*...*count1++;*}. Треба вiдмiтити, що кожен цикл має свою iнiцiалiзацiю, перевiрку i обновлення.

17. Функції типу void. Синтаксис функцій.

У С++ iснують 2-ва види функцiй: функцiї, що повертають зна-

чення, i функцiї типу void, якi не повертають значення модулю, що

їх викликає. Опис функцiї _ це

програмний код вiд заголовка до закiнчення блоку, що є тiлом фун-

кцiї. Заголовок функцiї починається зi слова void, який вказує ком-

пiлятору, що дана функцiя не повертає значення. #include <iostream.h>*void _4lines();*int main()*{*….

Параметри, що перелiчуються при зверненнi до функцiї, називаються

фактичними параметрами. При описi функцiї

в її заголовку використовуються формальнi параметри. #include <iostream.h>*void Function (int a, float b);*int main()*{*…

18. Параметри функцiй

С++ пiдтримує два види формальних параметрiв: параметри, що передаються за значенням; параметри, що передаються за посиланням. Якщо параметри в парi мають рiзнi типи даних, вiдбуваєтьсянеявне зведення типiв. Наприклад, якщо формальний параметр має

тип int, а фактичний параметр тип float, то перед передачею у функ-

цiю вираз зводиться до значення типу int. Нехай ми маємо функцiю Function iз заголовком:void Function (float param1, //параметр, що передається

за значенням*int& param2) //параметр, що передається за посиланням

Тодi справедливi наступнi звернення до неї:Function(_float, _int);*Function(2.22, int count);*Function(2.2*sqrt(x), _new_int);.

19. Розробка ф-цій.

Введемо два новi поняття: iнтерфейс i iнкапсуляцiя. Iнтер-

фейс _ загальнодоступна границя, яка дозволяє паралельним сис-

темам взаємодiяти одна з одною. Iнкапсуляцiя _ приховування ре-

алiзацiї модуля в окремому блоцi з формально означеним iнтерфей-

сом. Приховуючи реалiзацiю модуля ми можемо змiнювати його, не

змiнюючи код функцiї main, поки iнтерфейс залишається тим самим.

Iнкапсуляцiя _ це те, що виконується в процесi функцiональної

декомпозицiї, коли розв’язання важкого пiдзавдання вiдкладається

на пiзнiше. Записується його мета i данi, якi воно отримує i повер-

тає, а потiм пишеться решта частина проекту, так нiби пiдзавдання

вже вирiшене. Передумова _ це твердження, яке описує все, що функцiя по-

требує для коректної роботи в момент її виклику. Постумова _

описує стан програми в момент завершення роботи функції.

Включення передумов i посту мов:*void _Print (float S, int counter)

//Передумова:змiннiй S присвоєно значення && counter>0

//Постумова:Середнє значення рiвне S/counter повинно бути

//виведено на екран*{*cout<<"Результат: "<<S/float(counter)<<endl;*}