Приклади програм з коментаріями 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Приклади програм з коментаріями



Івано-Франківська філія

Кафедра інформаційних технологій та програмування

 

 

Р.В.Скальський

 

 

Програмування на С++.

Приклади програм з коментаріями

Навчальний посібник

Для студентів спеціальностей

"Програмне забезпечення автоматизованих систем"

"Технологія машинобудування"

Івано-Франківськ


МВ 02070855-2071-2008

Копей В.Б., Лютак І.З., Сторож Я.Б. Програмування на С++. Приклади програм з коментаріями: Навчальний посібник. – Івано-Франківськ: Факел, 2008. – 170 с.

 

Навчальний посібник містить довідкові матеріали по мові програмування С++: термінологічний словник термінів програмування та приклади програм на мові С++ з детальними коментаріями. Пропонується для самостійного опрацювання студентами спеціальностей "Програмне забезпечення автоматизованих систем" та "Технологія машинобудування". Може бути корисним усім, хто вивчає та програмує на С++.

 

Рецензенти:

 

Канд. техн. наук, доцент кафедри комп’ютеризованого машинобудівного виробництва ІФНТУНГ О.Р. Онисько

 

Доктор техн. наук, зав. кафедри програмного забезпечення автоматизованих систем ІФНТУНГ В.М. Юрчишин

 

Канд. техн. наук, проректор з наукової роботи Відкритого міжнародного університету розвитку людини "Україна" К.О. Кольченко

 

Канд. техн. наук, доцент кафедри комп’ютерних інформаційних технологій Тернопільського національного економічного університету М.Я. Шпінталь

 

Канд. техн. наук, доцент кафедри інформатики Прикарпатського національного університету ім. Василя Стефаника В.О. Горелов

 

 

Дане видання – власність ІФНТУНГ. Забороняється тиражування та розповсюдження без відома автора.


Зміст

с.

Передмова. 8

1 Програмування: термінологічний словник. 9

1.1 Алгоритм, програма, мови програмування. 9

1.2 Елементи мови програмування. 11

1.3 Основи об’єктно-орієнтованого програмування. 20

1.4 Сучасні об’єктно-орієнтовані технології 25

2 Основи програмування мовою C++. 31

2.1 Найпростіша програма. 31

2.2 Директиви препроцесора. 31

2.3 Основні типи даних С++. 32

2.4 Граничні значення і розмір змінних різних типів. 32

2.5 Приведення (перетворення) типів. 33

2.6 Арифметичні оператори С++. 33

2.7 Стандартні математичні функції 34

2.8 Команди потокового вводу-виводу. 34

2.9 Стандартні функції вводу-виводу мови С.. 35

2.10 Оператор безумовного переходу goto. 36

2.11 Оператор умовного переходу if-else. 36

2.12 Оператор switch. 36

2.13 Тернарний оператор?: 37

2.14 Цикл з лічильником for 37

2.15 Оператор циклу з передумовою while. 37

2.16 Оператор циклу з післяумовою do-while. 38

2.17 Оператори break і continue. 38

2.18 Вказівники і адреси даних. 38

2.19 Оператори динамічного розподілу пам’яті new і delete. 39

2.20 Масиви. 39

2.21 Динамічні масиви. 40

2.22 Перерахований тип enum... 41

2.23 Створення функцій С++. 41

2.24 Глобальні, локальні і статичні змінні 42

2.25 Масив як параметр функції 43

2.26 Рядки і функції обробки рядків. 43

2.27 Структури. 44

2.28 Обробка виключних ситуацій. 45

3 Об’єктно-орієнтоване програмування мовою C++. 46

3.1 Простий клас. 46

3.2 Структура. 47

3.3 Об’єднання. 47

3.4 Конструктор. 47

3.5 Деструктор. 48

3.6 Конструктор копіювання. 49

3.7 Динамічне створення об’єктів типу класу. 49

3.8 Вкладені класи (1) 50

3.9 Вкладені класи (2) 51

3.10 Вкладені класи (3) 51

3.11 Вкладені класи (4) 52

3.12 Вкладені класи (5) 53

3.13 Дружні функції (1) 53

3.14 Дружні функції (2) 54

3.15 Успадкування. 54

3.16 Статичний поліморфізм, перевантаження методів. 55

3.17 Перевантаження операторів. 56

3.18 Динамічний поліморфізм, віртуальні функції (1) 56

3.19 Динамічний поліморфізм, віртуальні функції (2) 57

3.20 Успадкування множинне. 58

3.21 Діамантове успадкування. 59

3.22 Діамантове віртуальне успадкування. 60

3.23 Динамічне приведення і ідентифікація типів (dynamic_cast і typeid) 61

3.24 Шаблони функцій (1) 62

3.25 Шаблони функцій (2) 62

3.26 Шаблони класів. 63

3.27 Шаблони класів і віртуальні методи. 63

3.28 Застосування флагів форматування при потоковому вводу-виводі 64

3.29 Установка флагів за допомогою функцій-маніпуляторів. 65

3.30 Створення функції-маніпулятора. 65

3.31 Перевантаження операторів потокового вводу-виводу. 66

3.32 Клас рядкових потоків. 67

3.33 Бінарні файли. 67

3.34 Бінарні файли прямого доступу. 68

3.35 Шаблон структури "пара" бібліотеки STL.. 69

3.36 Використання бібліотеки STL.. 70

4 Приклади використання компонентів VCL.. 73

4.1 Поради для вивчення компонентів: 73

4.2 Простий проект типу Win32 Application у C++ Builder 73

4.3 Класи. 76

AnsiString (String) – тип рядків. 76

TApplication - додаток. 77

TScreen – стан екрану. 79

Set – шаблон класу множина. 79

TList – список вказівників, TObject – базовий клас VCL.. 79

TComponent – базовий клас компонентів, TControl – базовий клас візуальних компонентів 80

TWinControl – базовий клас віконних компонентів, TGraphicControl – базовий клас графічних компонентів 81

TStrings – базовий клас списку рядків, TStringList – список рядків. 82

TStream – базовий клас потокових об’єктів, TMemoryStream – потік в динамічній пам’яті 82

TThread – потік керування. 83

TForm - форма. 84

4.4 Компоненти Standard. 87

TFrame – кадр, контейнер компонентів. 87

TMainMenu – головне меню, TPopupMenu – контекстне меню, TActionList – список дій 88

TLabel – мітка, надпис. 89

TButton - кнопка. 89

TRadioButton - перемикач. 90

TCheckBox - прапорець. 90

TEdit – поле редагування. 90

TMemo – багаторядкове поле редагування. 91

TListBox – список рядків. 91

TComboBox – випадаючий список рядків. 92

TScrollBar – смуга прокручування. 92

TPanel - панель. 92

4.5 Компоненти Additional 93

TBitBtn – кнопка з піктограмою.. 93

TSpeedButton – кнопка з піктограмою і фіксацією.. 94

TMaskEdit – поле редагування з шаблонами. 94

TStringGrid - таблиця. 94

TDrawGrid – таблиця зображень. 95

TImage – контейнер графічних зображень, TPicture – графічне зображення 95

TShape – геометрична форма, TBrush - пензель, TPen - перо. 96

TScrollBox – контейнер прокручування. 96

TCheckListBox – список рядків з індикаторами. 96

TSplitter - розділювач. 96

TControlBar – контейнер інструментальних панелей. 97

TApplicationEvents – перехоплювач подій додатку. 97

TValueListEditor – компонент редагування списків, які містять пару ім’я/значення 97

TLabeledEdit – поле редагування з надписом.. 98

TColorBox – вікно вибору кольору, TColor - колір. 99

TChart - діаграма. 99

4.6 Компоненти Win32. 99

TTabControl - вкладки. 99

TPageControl - сторінки. 100

TImageList – список зображень, TBitmap – зображення, бітова матриця 100

TRichEdit – багаторядкове поле редагування з розширеним форматуванням 101

TTrackBar - повзунок. 101

TProgressBar – індикатор прогресу. 102

TUpDown – спарені кнопки вверх-вниз, лічильник. 102

THotKey – клавіша гарячого виклику. 102

TAnimate – анімація відеозаписів. 103

TDateTimePicker – вибір дати/часу, TDateTime – дата/час. 103

TMonthCalendar - календар, TDate - дата. 104

TTreeView – деревовидний список. 104

TListView – табличний список елементів. 105

THeaderControl - заголовки. 106

TStatusBar – рядок стану. 107

TToolBar – панель інструментів. 107

TCoolBar – панель зі шторками. 108

TPageScroller – панель з прокручуванням.. 109

TComboBoxEx – комбінований список зі значками. 109

4.7 Компоненти System... 109

TTimer - таймер. 109

TPaintBox – область рисування, TCanvas - канва, TBrush - пензель, TPen - перо 110

TMediaPlayer – мультимедіа плейер. 111

TOleContainer – контейнер OLE.. 112

TDdeServerConv, TDdeServerItem, TDdeClientConv, TDdeClientItem – компоненти для динамічного обміну даними 113

4.8 Діалогові вікна. 114

TOpenDialog – відкриття файлу, TSaveDialog – збереження файлу. 114

4.9 Робота з базами даних. 115

Робота з базами даних у C++ Builder за допомогою BDE.. 115

Інший варіант доступу до бази даних (за допомогою TDatabase) 122

Робота з базами даних у C++ Builder за допомогою ADO.. 122

4.10 Компоненти Indy для роботи з мережею.. 124

5 Створення компонентів VCL.. 126

6 Створення DLL.. 129

7 Створення і використання компонентів COM... 130

8 Створення компоненту ActiveX у C++ Builder 132

9 Створення активної форми (Active Form) 133

10 Робота з компонентами-серверами COM MS Word і MS Excel 134

11 Створення компонентів CORBA.. 135

12 Бібліотека основних класів Microsoft MFC.. 139

CEdit - поле редагування (1) 139

CEdit - поле редагування (2) 140

CButton - прапорець. 140

CButton - кнопка (1) 140

CButton - кнопка (2) 141

CButton - перемикач. 141

CListBox - список. 142

CComboBox - комбінований список. 143

CString - рядок. 143

CImage - рисунок, CDC - контекст пристрою.. 144

CClientDC - контекст пристрою, CPoint - точка. 145

Створення додатків Win32 з графічним інтерфейсом.. 145

13 Створення додатків Win32 за допомогою Visual C++.NET.. 149

14 Задачі 153

Задачі 1 Основи програмування мовою С++. 153

Задачі 2 Об’єктно-орієнтоване програмування мовою С++. 155

Задачі 3 Сучасні об’єктно-орієнтовані технології 160

Перелік рекомендованих джерел. 163

Мова програмування С++ для початківців. 163

Об’єктно-орієнтоване програмування. 163

Мова програмування С++. 164

Стандартна бібліотека С++. 166

Програмування на Borland C++ Builder 167

Технологія COM... 168

Програмування на Visual C++ MFC та.NET.. 168

Програмування на C#.NET.. 169

 


Передмова

Термінологічний словник містить основні терміни програмування на алгоритмічній і об’єктно-орієнтованій мові С++, а також терміни сучасних об’єктно-орієнтованих технологій у програмуванні. Приклади програм підібрані прості, загальні і завершені, які охоплюють усі основні сторони програмування на С++: імперативне, об’єктно-орієнтоване і узагальнене програмування на С++, використання стандартних бібліотек С++, використання бібліотеки VCL Borland C++ Builder 6, основи технологій DLL, COM, CORBA, MFC,.NET. Вихідні коди програм містять детальні і чіткі коментарії без будь-яких додаткових зовнішніх пояснень. Тому, посібник має довідковий характер, і бажано його використовувати паралельно з рекомендованою авторами літературою по мові С++ (с.163). Порядок подання термінів і прикладів програм відповідає класичному порядку вивчення мови С++ та сучасних об’єктно-орієнтованих технологій у програмуванні. Приклади опрацьовані в середовищі Borland C++ Builder 6 (для програмування прикладів MFC і.NET використовували Microsoft Visual C++ 8).

Пропонується для самостійного опрацювання студентами спеціальності "Програмне забезпечення автоматизованих систем" при вивченні навчальної дисципліни "Об’єктно-орієнтоване програмування" та студентами спеціальності "Технологія машинобудування" при вивченні навчальних дисциплін: "Сучасні мови програмування" (для спеціалізації "Комп’ютеризоване машинобудівне виробництво"), "Основи наукових досліджень", "Засоби програмного керування технологічними системами", "Моделювання виробничих систем в машинобудуванні" при виконанні курсового і дипломного проектування.

Може бути корисним усім, хто вивчає та програмує на С++.


Елементи мови програмування

Рекомендована література: [1-14]

Мова програмування С++ - об’єктно-орієнтована мова програмування високого рівня, яка включає описи класів, контроль типів, перевантаження функцій, керування пам'яттю, постійні типи, посилання, вбудовуванні функції, похідні класи і віртуальні функції. Розроблена на основі мови С, і на даний час є найбільш поширеною універсальною мовою системного і прикладного програмування.

Алфавіт мови – система нероздільних символів, які використовуються для побудови мови програмування. В алфавіт С++ входять великі і малі латинські літери, арабські цифри, та спеціальні символи: "’()[]{}<>.,;:?!~*+-=/\|#%$&^@_

Синтаксис мови – правила побудови конструкцій мови.

Семантика мови – визначає змістове значення конструкцій мови.

Команди мови (оператори, вказівки, речення, інструкції) – синтаксичні конструкції мови, які будуються з лексем. Наприклад, команди присвоювання, вводу-виводу, циклу, розгалуження.

Вираз – послідовність даних, операторів і розділювачів, яка конкретизує обчислення, наприклад, арифметичні (с.33), логічні вирази. Результатом виконання виразу є значення. Приклад:

y=(x*x+1)/z;//змінній у присвоїти значення виразу (x*x+1)/z

Лексеми (tokens) – неподільні елементи мови, первинні вирази: слова, число, символ операції. У С++ є шість класів лексем: ідентифікатори, ключові слова, константи, рядки, оператори і інші розділювачі.

Ключові слова – зарезервовані ідентифікатори, які використовуються для написання команд, наприклад: double, class, for, if, return.

Директиви препроцесора – команди компілятора, які виконуються на першому етапі компіляції програми (с.31). Приклад:

#include <iostream.h>//директива підстановки файлу iostream.h

Коментар – пояснення вихідного коду програми, який ігнорується компілятором. Приклади:

/*багаторядковий коментар*/

//однорядковий коментар

Дане – поіменована область оперативної пам’яті, в якій зберігається значення певного типу. Даному характерні ім’я, адреса, тип і значення. Приклад:

int x=2;//даному з іменем х і типом int присвоїти значення 2

cout<<&x;//вивести на екран адресу цього даного

Ім’я (ідентифікатор) позначає дане унікальним іменем (змінну, об'єкт, функцію, тип, значення або мітку) (с.32).

Визначення імені (definition) – визначає для імені сутність, до якої воно відноситься, і деколи значення, виділяє пам’ять для об’єкту.

Оголошення імені (declaration) називає тип і ім’я об’єкта, але не виділяє пам’ять для нього, а тільки описує його абстрактні властивості. Оголошення є визначенням, за винятком тих випадків, коли воно описує функції, не задаючи тіла функції (с.41), коли воно містить специфікатор extern і в ньому немає ініціалізації або тіла функції, або коли воно є описом класу. Будь-яка сутність перед використанням повинна бути оголошена. В програмі може бути тільки одне визначення кожного імені і безліч оголошень. Приклади оголошень:

int i;

float x=1.17;

char* p=”String”;

struct s1{int n; float y;};

s1 obj1;

int f (int x){return x*x;};

typedef s1 s2;

Пов’язування (binding) – процес, в результаті якого ім’я або вираз асоціюється з певним атрибутом. Розрізняють раннє (статичне, на етапі компіляції) і пізнє (динамічне, на етапі виконання) пов’язування.

Ініціалізація – указання початкового значення об’єкту, що оголошується. Приклад:

int x=2;//присвоїти змінній х значення 2

Адреса даного – індекс (адреса) комірки оперативної пам’яті, в якій зберігається дане, або з якої воно починається (с.38). Приклад адреси змінної х: &x

Вказівник – це змінна, значенням якої є адреса даного (с.38). Якщо вказівник ні на що не вказує, то він має пусте значення. Приклад:

int *px=&x//створити вказівник px і присвоїти йому адресу змінної x

Область видимості імені – частина програми, де оголошене ім’я та допустиме його використання. Область видимості буває глобальна і локальна (с.42).

Час життя об’єктів (змінних). Якщо тільки програміст не втрутиться явно, об'єкт буде створений при появі його визначення і знищений, коли зникне з області видимості. Об'єкти з глобальними іменами створюються, ініціалізуються (причому тільки один раз) і існують до кінця програми. Якщо локальні об'єкти описані із службовим словом static, то вони також існують до кінця програми (с.42).

Тип даних - визначає допустимі значення даного, а також операції, які можуть виконуватись над ним (с.32). Для кожного типу даних резервується певний обсяг пам’яті (с.32). Тип є конкретне представлення деякої концепції (поняття). Наприклад, наявний в C++ тип float з його операціями +, -, * і т.д. забезпечує обмежену, але конкретну версію математичного поняття дійсного числа. Новий тип створюється для того, щоб дати спеціальне і конкретне визначення поняття, якому ніщо прямо і очевидно серед вбудованих типів не відповідає:

typedef <опис типу> <назва типу>;

Основні типи C++ (с.32):

char - символьний;

int – цілий;

float – дійсний;

double – дійсний подвійної точності;

bool - булевий (логічний);

void – використовується для визначення функції, яка не повертає ніяких значень, або для узагальненого вказівника.

Модифікації основних типів C++ (с.32) утворюються за допомогою слів:

short – для цілих типів,

long - для цілих типів і double,

signed, unsigned - для цілих і символьних типів.

Похідні типи C++:

масиви (с.39);

функції (с.41);

вказівники на об'єкти даного типу (с.38);

посилання на об'єкти даного типу;

константи, що є значеннями даного типу;

класи (с.46);

структури (с.47);

об'єднання (с.47).

Значення – вміст області пам’яті відведеної під дане певного типу.

Літерал – константа, конкретне значення, задане в програмі «буквально», у вигляді послідовності символів. Літерал може бути цілочисельний, символьний, дійсний, рядковий і булевий. Наприклад:

cout<<"x="<<125<<'\n';//"x=", 125, '\n' – літерали

Змінна – дане, значення якого може змінюватися протягом виконання програми. Приклад оголошення змінної:

float a;

Стала (константа) – дане, значення якого не може змінюватися протягом виконання програми. Приклад:

const float a=1.5;

Контроль відповідності типів - це перевірка того, що при присвоюванні змінній, тип виразу сумісний з типом змінної. Строгий контроль характеризується відмовою від виконання, якщо типи відрізняються.

Перетворення (приведення) типів – це операція перетворення значення одного типу до значення іншого типу (с.33). Відбувається тоді коли у виразі зустрічаються дані різного типу. Перетворення може бути явне і неявне. При неявному перетворенні результат за замовчуванням перетворюється до старшого типу. При явному перетворенні програміст вказує до якого типу перетворити змінну. Приклад:

i=(int)c;//явне приведення c до int

Динамічна ідентифікація типів RTTI (Run-Time Type Identification) – механізм, який дозволяє ідентифікувати тип об’єкта при виконанні програми і безпечно виконувати перетворення типів (с.61).

Посилання – змінна, оголошена за допомогою модифікатора "&" і використовується для надання ще одного імені (синоніму) даному. Приклад:

int &x2=x;//посилання x2

Логічний вираз – вираз, значення якого належить до логічного типу. Приклад:

bool x=(2>1)&&(1<=5);//змінній х присвоїти значення логічного виразу

Перерахування (enum) – це унікальний тип даних, значення якого покриваються множиною іменованих констант, які називаються перечислювачами (с.41). Приклад:

enum days {sun,mon,tues,wed,thur,fri,sat};// sun=0, mon=1...

Оператори С++ і їх пріоритети (порядок виконання) (таблиця 1.1)

Усі оператори таблиці, відділені жирною горизонтальною лінією, мають однаковий пріоритет. Пріоритет зменшується "зверху вниз". Наприклад, a+b*c означає a+(b*c), оскільки * має пріоритет вище, ніж +; а вираз a+b-c означає(a+b)-c, оскільки + і - мають однаковий пріоритет, і операції + і - застосовуються "зліва направо".

Таблиця 1.1 - Оператори С++ і їх пріоритети

Оператор Опис Синтаксис
:: Дозвіл області видимості class_name::member
:: Глобальне ::name
. Вибір члена object.member
-> Вибір члена pointer->member
[] Індексування pointer[expr]
() Виклик функції expr(expr_list)
() Структурне значення expr(expr_list)
sizeof Розмір об'єкту sizeof expr
sizeof() Розмір об'єкту sizeof(expr)
++ Постфіксний інкремент lvalue++
++ Префіксний інкремент ++lvalue
-- Постфіксний декремент lvalue--
-- Префіксний декремент --lvalue
~ Доповнення ~expr
! Логічне НЕ !expr
- Унарний мінус -expr
+ Унарний плюс +expr
& Отримання адреси &lvalue
* Розіменування *expr
new Створення (розміщення) new type
delete Знищення (вивільнення) delete pointer
delete[] Знищення масиву delete[] pointer
() Приведення(перетворення) типу (type)expr
. * Вибір члена непрямий object.pointer-to-member
-> * Вибір члена непрямий pointer->pointer-to-member
* Множення expr*expr
Продовження табл. 1.1
/

Ділення expr/expr
% Остача від ділення expr%expr
+ Додавання (плюс) expr+expr
- Віднімання (мінус) expr-expr
<< Зсув вліво expr<<expr
>> Зсув вправо expr>>expr
< Менше expr<expr
<= Менше або рівно expr<=expr
> Більше expr>expr
>= Більше або рівно expr<=expr
== Рівно expr==expr
!= Не рівно expr!=expr
& Порозрядне І expr&expr
^ Порозрядне що виключає АБО expr^expr
| Порозрядне що включає АБО expr|expr
&& Логічне І expr&&expr
|| Логічне АБО expr||expr
?: Операція умови expr?expr:expr
= Просте присвоювання lvalue=expr
*= Присвоювання з множенням lvalue*=expr
/= Присвоювання з діленням lvalue/=expr
%= Присвоювання з узяттям залишку від ділення lvalue%=expr
+= Присвоювання з додаванням lvalue+=expr
-= Присвоювання з відніманням lvalue-=expr
<<= Присвоювання з зсувом вліво lvalue<<=expr
>>= Присвоювання з зсувом вправо lvalue>>=expr
&= Присвоювання з порозрядним І lvalue&=expr
|= Присвоювання з порозрядним що включає АБО lvalue|=expr
^= Присвоювання з порозрядним що виключає АБО lvalue^=expr

 

Команда присвоєння – використовується для присвоєння змінним (об’єктам) значень. Приклади:

a=1.25;

x=a+2;

Команди вводу-виводу – команди, які використовуються для здійснення операцій вводу-виводу на пристрої вводу-виводу (клавіатура, монітор, файл, периферійні пристрої) (с.34). Приклади:

cin>>x;//ввід з клавіатури

cout<<x;//вивід на монітор

Складена команда – використовується для об’єднання кількох команд в одну. Приклад:

{int x=1; cout<<x;}

Керуючі команди - призначені для зміни порядку виконання команд програми. Це команди безумовного переходу, розгалуження, циклу.

Команда безумовного переходу (goto) – використовується для переходу до виконання позначеної команди і наступних за нею команд (с.36). Приклад:

goto a;//перейти на мітку а

a:y=3;//команда під міткою а

Команди розгалуження (if-else, switch) – використовуються для переходу до виконання команд в залежності від значення певного логічного виразу (с.36). Приклад:

if (x>1) x=0;else x=1;//якщо x>1 то x=0, інакше x=1

Команди циклу (for, while, do-while) – використовуються для повтору команд задану кількість раз в залежності від значення певного логічного виразу (с.37). Приклад:

for (x=1;x<5;x++) cout<<x;//вивести на екран: 1234

Статична пам’ять – пам’ять, яка виділяється для збереження даних на початку роботи програми і зберігається до її завершення. Приклад:

int x=1;

Динамічна пам’ять - пам’ять, яка виділяється для збереження даних у динамічних змінних і вивільняється під час роботи програми. Це дозволяє економно використовувати оперативну пам’ять (с.39). Приклад:

int *pi=new int(2);

Файл – це сукупність даних, які розміщені у постійному запам'ятовуючому пристрої. Для роботи з файлом необхідно відкрити для доступу фізичний файл і пов’язати з ним файлову змінну (об’єкт), виконати операції вводу-виводу і закрити файл. Файли бувають послідовного доступу і довільного (прямого), текстові (містять символи форматування тексту) і бінарні.

Файл послідовного доступу – файл, доступ до записів якого виконується послідовно з першого по останній (с.67).

Файл довільного доступу – файл, доступ до кожного запису якого може виконуватись напряму (с.68).

Підпрограма - це пойменована частина програми, яка містить групу команд і може викликатися з інших частин програми потрібну кількість раз. У підпрограму можуть передаватись дані для обробки (аргументи, фактичні параметри). Підпрограми поділяються на процедури і функції. Результатом виконання функції, на відміну від процедури, є якесь значення. В мові С++ усі підпрограми є функціями (с.41). Приклад:

int sum1(int a,int b)//визначення функції sum1

{return a+b;}//функція повертає значення a+b цілого типу

Прототип функції – опис функції з параметрами і типом результату, але без її реалізації. Приклад:

int sum1(int a,int b=0);

Формальні параметри підпрограми – її локальні змінні, які приймають значення аргументів підпрограми. Приклад:

int sum1(int a,int b)//a,b – формальні параметри

Фактичні параметри – значення даних, або їх адреси, які передаються в підпрограму. Приклад:

cout<<sum1(5,6);//5,6 – фактичні параметри

Передача параметрів по значенню – формальному параметру присвоюється копія значення аргументу (фактичного параметра). Приклад:

cout<<sum1(a=5,b=6);//передача параметрів по значенню

Передача параметрів по посиланню – формальному параметру присвоюється адреса аргументу. У цьому випадку зміна формального параметру впливає на аргумент. Приклад:

cout<<sum2(&a,&b);//передача параметрів по посиланню

Локальна змінна – володіє областю видимості тільки в тій функції або блоці команд де вона оголошена (с.42).

Глобальна змінна - володіє областю видимості в усій програмі (с.42).

Статична змінна (static) – зберігає своє значення після виходу з функції де вона оголошена (с.42). Приклад:

static int k=0;

Простір імен (namespace) – область видимості імен ідентифікаторів, яка використовується для запобігання конфлікту між однаковими іменами. Приклад:

namespace My {int x=1;}//простір імен My

void main()

{cout<<My::x;//вказати область видимості змінної x

using namespace My;//використовувати простір імен My

cout<<x;}

Головна функція (main) – функція, з якої починається виконання програми (с.31). Приклад пустої функції:

void main() {}

Вбудовувана функція (inline) – функція, код якої вкладається в кожній точці виклику. Приклад:

inline int s(int x){return x+2;}

Рекурсія – алгоритмічна конструкція, в якій підпрограма викликає саму себе. Приклад:

long int fact(int x)//рекурсивна функція визначення факторіалу

{if (x>1) return x*fact(x-1);else return 1;}

Масив – іменований впорядкований набір даних одного типу, які зберігаються в послідовно розташованих комірках пам’яті (с.39). Масив складається з елементів, кожен з яких має унікальний індекс. Масиви можуть бути одновимірні і багатовимірні. Приклад:

float A[3];//масив А дійсних чисел розміром 3

A[0]=2.5;//присвоїти елементу масиву А з індексом 0 число 2.5

Рядки – дані або набір даних, які містять сукупність символів. Наприклад, масиви символів (с.43) або рядкові контейнерні класи. Наприклад:

char s[20]="cpp";//масив символів

#include <string>

string s("hello");//об’єкт s класу string

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

Помилки компіляції виникають на етапі компіляції програми і виявляються компілятором. Приклади:

inte x=1;//невизначений символ inte

int x:=1;//синтаксична помилка

Помилки виконання, або виключні ситуації (exception) виникають на етапі виконання програми та призводять до її аварійного завершення або неправильного функціонування. В мові С++ обробляються за допомогою конструкції try-catch-throw (с.45).

Логічні помилки виникають на етапі виконання програми та не призводять до її аварійного завершення, але до неправильного функціонування. Виявляються важко, за допомогою засобів налагодження і тестування.

 

 

Найпростіша програма

//директива підстановки файлу iostream.h,//в якому описаний об’єкт cout і оператор <<#include <iostream.h>void main()//головна функція{cout<<"Hello world!"; //команда виводу рядка на екран}

Директиви препроцесора

//директива підстановки файлу iostream.h#include <iostream.h>//директива визначення макросу K#define K 15//директива визначення макросу F#define F(x) x*x+K//директива підстановки файлу File1.h#include "File1.h"//головна функціяvoid main(){x=2;prn;//макропідстановка//директива підстановки файлу File2.h#include "File2.h"prn;//макропідстановка} // File1.h//директива визначення макросу prn#define prn cout<<F(x)<<endlfloat x;//оголошення глобальної змінної // File2.h//директива видалення визначення макросу F#undef F//директива визначення макросу F(x)#define F(x) x*x+2

2.3 Основні типи даних С++

#include <iostream.h>void main(){//оголошення і ініціалізація константconst k1=7,k2=9;const int j=3;const float pi=3.14;//оголошення зміннихint i=-2,l;//цілого типуshort int n;//короткого цілого типуunsigned int m;//беззнакового цілого типуfloat x;//дійсного типуdouble y,z=3.25e-2;//дійсного типу подвійної точностіchar c1,c2='B';//символьного типуbool b1=true,b2;//булевого (логічного) типуtypedef unsigned short int uint;//визначення типу uintuint u;//оголошення змінної типу uint//присвоєння змінним значеньi=5;l=-12;n=3;m=17;x=25.751;y=383.321;c1='A';c1=65;c1=0x41;cout<<c1;b2=false;u=13;}

Оператор switch

#include <iostream.h>void main(){int x;float y;cin>>x;switch (x){case 1:y=x;break;//якщо x=1 то y=xcase 2:y=x*x;break;//якщо x=2 то y=x*xcase 3:y=x*x*x;break;//якщо x=3 то y=x*x*xdefault: y=0;//у інших випадках y=0}cout<<y;}

2.13 Тернарний оператор?:

#include <iostream.h>void main(){float x,y;cin>>x;//якщо x>2 або x==0 то y=x*x, інакше y=x*x+2y=(x>2||x==0)?x*x:x*x+2;cout<<y;}

Цикл з лічильником for

#include <iostream.h>void main(){float x,y;//повторювати від 0 з кроком 0.1 поки x<2 for(x=0;x<2;x+=0.1){y=x*x;cout<<y<<endl;}}

Оператори break і continue

#include <iostream.h>void main(){float x,y;//циклfor(x=0;x<2;x+=0.1){y=x*x;//якщо y>=2 то вийти з циклу, інакше - продовжитиif (y>=2)break;else continue;}cout<<x<<endl;}

Вказівники і адреси даних

#include <iostream.h>void main(){int i=2;//оголошення і ініціалізація змінної i цілого типуint *pi;//оголошення вказівника pi цілого типуpi=&i;//вказівник указує на адресу змінної i*pi=3;//записати за адресою pi число 3cout<<pi<<endl;//адреса змінної icout<<*pi<<endl;//значення по адресі pi, дорівнює 3cout<<i<<endl;//значення змінної i, дорівнює 3}

Масиви

#include <iostream.h>void main(){//оголошення масиву дійсних чисел A розміром 3float A[3];//оголошення і ініціалізація масиву цілих чисел B розміром 3int B[3]={1,3,5};//оголошення і ініціалізація масиву дійсних чисел Cfloat C[]={1.1,0.2,3.5};//оголошення і ініціалізація масиву цілих чисел D розміром 2х2int D[2][2]={4,5,1,3};A[0]=1.2;//присвоєння першому елементу масиву A 1.2A[1]=1.7;//присвоєння другому елементу масиву A 1.7A[2]=0.5;D[0][1]=2;//вивід вмісту масивів A,B,Cfor(int i=0;i<3;i++)cout<<A[i]<<" "<<B[i]<<" "<<C[i]<<endl;//вивід вмісту масиву Dfor(int i=0;i<2;i++){for(int j=0;j<2;j++)cout<<D[i][j]<<" ";cout<<endl;}}

Динамічні масиви

#include <iostream.h>void main(){//динамічно виділити пам’ять//для масиву цілих чисел A розміром 3int *A=new int[3];//заповнити масив числами 0,1,2 і вивести йогоfor(int i=0;i<3;i++){*(A+i)=i;//присвоїти елементам масиву icout<<A[i]<<endl;}//динамічно виділити пам’ять//для масиву *B розміром 2int **B=new int*[2];int k=0;//заповнити двовимірний динамічний масив 2х3for(int i=0;i<2;i++){//динамічно виділити пам’ять//для масиву B[i] розміром 3B[i]=new int[3];for(int j=0;j<3;j++){*(B[i]+j)=k++;//присвоїти елементам масиву k cout<<*(B[i]+j)<<" ";//вивести елемент//або cout<<*(*(B+i)+j)<<" ";//або cout<<B[i][j]<<" ";}delete[]B[i];//вивільнити пам’ять для масиву B[i]cout<<endl;}delete[]A;//вивільнити пам’ять для масиву Adelete[]*B;//вивільнити пам’ять для масиву *B}

Перерахований тип enum

#include <iostream.h>void main(){//перерахований тип daysenum days {sun=1,mon,tues,wed,thur,fri,sat};int day;//вивести 1234567cout<<sun<<mon<<tues<<wed<<thur<<fri<<sat<<endl;cin>>day;if (day==sun||day==sat) cout<<"weekend";else cout<<"not weekend";}

2.23 Створення функцій С++

#include <iostream.h>int sum1(int a,int b=0);//оголошення функції sum1int sum2(int *a,int *b) //оголошення функції sum2//параметри функції - вказівники{int c=*a+*b;//оголошення локальної змінної с*a=2;*b=2;//зміна аргументівreturn c;//функція повертає значення c цілого типу}int sum3(int &a,int &b) //оголошення функції sum3//параметри функції - посилання{int c=a+b;//оголошення локальної змінної сa=3;b=3;//зміна аргументівreturn c;//функція повертає значення c цілого типу}void main() //головна функція{cout<<sum1(5,6)<<endl;//передача аргументів по значенню, результат=11cout<<sum1(5)<<endl;//передача аргументів по значенню, результат=5int a=1,b=2; //оголошення локальних зміннихint *pa=&a,*pb=&b;//оголошення вказівників на ці змінніcout<<sum2(pa,pb)<<endl;//передача аргументів по посиланню, результат=3cout<<sum2(&a,&b)<<endl;//передача аргументів по посиланню, результат=4cout<<sum3(a,b)<<endl;//передача аргументів по посиланню, результат=4cout<<a<<","<<b<<endl;//результат=3,3}int sum1(int a,int b) //визначення функції sum1{return a+b;}//функція повертає значення a+b цілого типу

Масив як параметр функції

#include <iostream.h>int sum1(int A[5])//оголошення функції sum1{//тут можлива зміна масиву Vint s=0;for(int i=0;i<5;i++) s=s+A[i];return s;//повернути значення суми елементів масиву s}int sum2(int *A)//оголошення функції sum2{//тут можлива зміна масиву Vint s=0;for(int i=0;i<5;i++) s=s+A[i];return s;//повернути значення суми елементів масиву s}void main(){int V[5]={1,2,3,4,5};//оголошення локального масивуcout<<sum1(V)<<endl;//передача аргументів по посиланнюcout<<sum2(V)<<endl;//передача аргументів по посиланню}

Структури

#include <iostream.h>struct A//структура А (тип даних){char Name[10];//поле типу масив символівint Year;//поле цілого типуbool Sex;//поле логічного типу};//функція для виводу вмісту об'єктаvoid prn(A *ps){cout<<ps->Name<<endl;cout<<ps->Year<<endl;cout<<ps->Sex<<endl;}void main(){//оголошення і ініціалізація об'єкта s1A s1={"Ivan",1980,true};A s2;//оголошення об'єкта s2//присвоєння полям значеньstrcpy(s2.Name,"Vasyl");s2.Year=1981;s2.Sex=true;//динамічне створення структури//ps - вказівник на структуруA *ps=new A;//присвоєння полям значеньstrcpy(ps->Name,"Inna");ps->Year=1983;ps->Sex=false;//вивід вмісту об'єктівprn(&s1);prn(&s2);prn(ps);delete ps;//вивільнення ps}

Обробка виключних ситуацій

//слова try, throw, catch#include <iostream.h>#include <stdio.h>//клас виключної ситуаціїclass Ex{public:float x;//полеchar s[20];//полеEx(float a,char *str)//конструктор{x=a; strcpy(s,str);}};void main(){float a=1,b,c;do//початок циклу{cin>>b;//ввести b//блок, в якому можливе виникнення виключної ситуаціїtry {if (b<0) throw b;//генерувати виключну ситуацію floatif (b==0) throw "b=0";//генерувати виключну ситуацію char*if (b>1000) throw Ex(b," b>1000");//генерувати виключну ситуацію Exif (b==1) throw true;//генерувати виключну ситуацію boolc=a/b;cout<<c<<endl;//вивести с} //перехоплення виключної ситуації floatcatch (float x){cout<<"b="<<x<<endl;}//перехоплення виключної ситуації char*catch (const char *s){cout<<s<<endl;}//перехоплення виключної ситуації Excatch (Ex obj) {cout<<obj.x<<obj.s<<endl;}//перехоплення інших виключних ситуаційcatch (...){cout<<"warning! exception!\n";}}while(getchar()!='q');//поки не натиснуто q}

3 Об’єктно-орієнтоване програмування мовою C++

Простий клас

#include <iostream.h>//клас Aclass A{//відкриті члени класуpublic:int a;//поле цілого типу avoid print()//метод print{cout<<a<<endl;}};void main(){A obj;//оголошення об’єкту obj типу Aobj.a=2;//присвоїти полю a об’єкта obj 2obj.print();//виклик методу print об’єкта obj}

Структура



Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 324; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.211.66 (0.168 с.)