- •§ 2. Типи даних
- •§ 3. Присвоєння
- •§ 5. Потоки. Введення - виведення даних
- •§ 6. Адреси даних. Вказівники. Динамічна пам'ять
- •§ 7. Файли
- •§ 8. Розгалуження
- •§ 9. Цикли
- •§ 10. Функції (1)
- •§ 11. Функції (2)
- •§ 12. Масиви
- •§ 13. Рядки
- •§ 14. Структури, списки, стеки, черги, об'єднання
- •§ 15. Графіка
- •§ 16. Вступ до об'єктно-орієнтованого програмування
- •§ 1. Вступ до візуального програмування
- •§ 2. Задача про анкету
- •§ 3. Задача про обмін валюти
- •§ 4. Задача табулювання функції
- •§ 5. Створення навчальної програми
Розділ 1
МОВА ПРОГРАМУВАННЯ С++ § 1. ОСНОВНІ ПОНЯТТЯ
1. Стандарт мови. Мову програмування С++ на початку 80-х років створив Бьяртні Страуструп на базі популярної серед професіоналів-програмістів мови С, яку розробив Деніс Рітчі. Мова одержала назву від О та операції інкременту (++), визначеної лише у ній. Така операція збільшує на одиницю значення змінної, до якої її застосовують.
С++ є розширенням мови С. Окрім стандартних команд, сюди увійшли засоби для об'єктно-орієнтованого й узагальненого програмування. С++ - це перша у світі мова об'єктно-орієнтованого програмування, суть якого полягає в об'єднанні даних та алгоритмів їх опрацювання у єдине ціле.
Узагальнене програмування, яке також підтримується мовою С++, - це ще один спосіб програмування, де код програми створюють незалежно від типу даних, що суттєво, наприклад, для задач упорядкування даних, об'єднання списків тощо.
Оскільки С++ є розширенням мови С, то всі програми, складені мовою С, коректно транслюються компіляторами С++, тому що бібліотеки, які належать до складу мови С, є також і в С++.
Текст будь-якої програми складається з команд, описів змінних, сталих, приєднань бібліотек тощо. Такий текст часто називають програмним кодом. Програмний код необхідно перекласти на внутрішню мову комп'ютера, тобто створити машинний код. Цю операцію виконує компілятор мови програмування.
Для комп'ютерів різних класів, а також для різних операційних систем створено багато компіляторів мови С++. Наприклад, АТ&Т Кеіеаве 3.0 С++ (використовується операційною системою ІІпіх), TurboС++, Воrland С++ 3.1 (для Мs DOS), Вогland С++ Вuilder (візуальне програмування у Windows), Metrowerks Code Warrior, Symantec С++ (використовується на комп'ютерах фірми Macintosh).
Програми, складені мовою С++, є мобільними, тобто можуть бути виконані на комп'ютерах різних виробників і в різних операційних системах , завдяки чому С++ є особливо популярною. Для узгодженнях всіх реалізацій мови у 1990 році Американський інститут національних стандартів (ANSI) створив комітет для прийняття стандарту мови С++. Пізніше відповідна комісія була створена й у Міжнародній організації стандартів (ISO). Ці дві організації, які називаються ISO/ANSI у 1998 році виробили остаточний міжнародний стандарт ДЛЯ
С++. У книжці мова розглядатиметься згідно із стандартом ISO/ANSI.
2. Алфавіт і ключові слова. Мови програмування, яфк і розмовні, мають власний алфавіт - набір допустимих СИМВОЛІВ. Алфавіт мови С++ складається з:
великих і малих літер латинського алфавіту: "A", ...,"Z", "а", ..., "z";
цифр 0, 1, ..., 9;
спеціальних символів: "' ( ) [ ] { } < > - , ; : ? ! ' * '' — = / \ | # % $ & ~ ^ @ та символу підкреслення _.
Програми складаються із синтаксичних конструкцій, які називаються командами (інші назви - оператори, вказівки, речення). Команди будуються з лексем - неподільних елементів мови: слів, чисел, символів операцій.
Слова поділяють на ключові слова й ідентифікатори. Ідентифікатор - це назва (ім'я), яку користувач надає об'єктам, наприклад, змінним, сталим, функціям. Усі слова можуть складатися з рядкових чи прописних літер англійського алфавіту, цифр, а також містити символ підкреслення. Ідентифікатор завжди починається з букви або із символу підкреслення.
Зауваження 1. Однакові за змістом малі та великі літери у мові С++ вважаються різними символами. Наприклад, імена МуИате та тупате позначають різні об'єкти.
Зарезервовані ідентифікатори називаються ключовими словами. Вони використовуються для написання команд. Змінити призначення ключового слова у програмі не можна. Основні ключові слова мови С++:
Asm double mutable switch
Auto еlsе new template
Bool enum орегаtог this
3. Директиви препроцесора. Препроцесор - це програма, яка опрацьовує директиви. Директиви препроцесора - це
команди компілятора відповідної мови програмування, які виконуються на початку компіляції програми. Директиви мови С++ починаються із символу #. Розглянемо декілька типів директив.
Директива #include означає, що до програми необхідно приєднати програмний код із зазначеного після неї файлу.
Файли, які приєднують директивою #include, називаються файлами заголовків (Ьеасіег-файлами, бібліотеками, модулями). У таких файлах зазвичай оголошують сталі й змінні, заголовки (сигнатури) функцій тощо.
Усі стандартні команди та функції мови С++ визначенні у файлах заголовків. Щоб приєднати модуль до програми користувача, директиву препроцесора необхідно зазначити на початку програми так:
-
#іпсІис1е <назва файлу.розширення>
або так:
-
#іпсІисіе "шлях до файлу\назва файлу.розширення"
Зазвичай усі стандартні бібліотеки розміщені у папці INCLUDE середовища С++. У такому випадку назва файлу є параметром директиви, її зазначають у кутових дужках <наз-ва>,наприклад
#include <math.h>.
Якщо ж потрібний файл розміщений не у папці INCLUDE, то назву файлу із зазначенням шляху пишуть у лапках "...". Наприклад, якщо деякий файл MyBib.h є у папці stud на диску d:, то треба писати так: #include "d:\stud\MyBib.h".
Зауваження 2. Згідно зі стандартом ISO/АМSI файли заголовків у директиві #include прийнято записувати без розширення, наприклад #include<math.h>. Файли заголовкін мови C які використовуються у С++ — програмах, починаються з літери с, наприклад #include <сstdio>. Ця можливість реалізована у сучасних компіляторах мови.
Директива #define має подвійне значення. По-перше, вона може задати стале значенню (оголошує сталу). Наприклад, якщо у програмі задано #define N 25, то N під час виконання програми матиме значення 25. По-друге, вони даг амору описати макроси - короткі команди (переозначити команди) чи записати функції, наприклад, так:
#define Р(а, b, с) ((b) * (b) - 4 * (а) * (c)). Тепер скрізь для обчислення дискримінанта замість команди
d = b*b-4*а*с
можна записувати
d = D(а, b ,с).
Директива #undef скасовує дію директиви #define. Наприклад,
#define D(а,b,с) ((b) * (b) - 4 * (а) * (с))
#undefine D
# define D(а,b,с) ((а) * (b) * (с))
Решта директив описані у § 17.
4. Перша програма. Суттєвою особливістю мони С++ порівняно з іншими мовами є те, що програми складаються з функцій, які відіграють роль підпрограм в інших мовах. Головна функція, яка має бути у кожній програмі, це функція вигляду
-
main(void)
{
тіло функції з командою return 0
}
де main() - заголовок функції. Ключове слово void означає, що функція не залежить від параметрів, його записувати не обов'язково. Функцію з параметрами розглядатимемо нижче. У тілі функції містяться команди та виклики інших функцій. Команди одну від одної відокремлюють символом ";" (крапка з комою). Текст функції закінчується командою повернення return. Тіло функції (усі команди після заголовка) записується
у фігурних дужках { }.
Розглянемо програму, у результаті виконання якої на екран буде виведено повідомлення: Привіт, студенте! Я С++!
// Моя перша програма мовою С++
#include <iostream.h>
int main()
{
cout << Привіт, студенте! Я С++!";
геіигп 0:
}
Розглянемо елементи програми. У першому рядку є коментар. Коментар - це фрагмент тексту програми, який слугує для пояснення призначення програми чи окремих команд і не впливає на виконання команд. Його записують так: //текст коментарю або так: /* текст коментарю */. У першому випадку коментар має бути або у кінці рядка, або єдиним у рядку. Другий спосіб більш універсальний: коментар можна записувати будь-де, не розриваючи лексем.
Директива #include <iostream.h> під'єднує бібліотечний файл iostream.h. Саме у цьому файлі описані функції, які дають змогу виконувати операції введення-виведення даних.
Далі у програмі записана обов'язкова функція (). Ключове слово іпі означає, що функція таіп() повертатиме у точку виклику результат цілого типу.
Конструкція cout « забезпечує виведення на екран монітора повідомлення „Привіт, студенте! Я С++!".
Команда return слугує для виходу з функції main(). Числовий параметр після return є результатом (значенням) функції (у цій програмі - 0).
Зауваження 3. Функцію main() можна застосувати так:
-
Void main()
{
тіло функції;
}
Така функція називається функцією main() типу void. Вона не повертає у програму жодних значень, тому команду return писати не треба.
5. Загальна структура програми. Найпростіша програма мовою С++ має такий загальний вигляд:
-
// коментарі
#include 'Назва бібліотечного файла>
void main()
{
<тіло функції>;
}
Зауваження 4. Ви вже знаєте, що в кутових дужках < > записують значення параметра директиви, які у програмі пропускати не можна. Крім цього, у кутових дужках описуватимемо словами загальні конструкції мови, замість яких у реальній програмі будуть конкретні команди. У цьому разі у програмі кутові дужки не пишуть.
Зазвичай складніші програми містять значну кількість функцій та додаткових елементів. Тому у загальному випадку програма мовою С++ має такий вигляд:
-
// коментарі
#include <назва бібліотечного файлу 1>
…
#include <назва бібліотечного файлу N>
<інші директиви препроцесора>
<оголошення глобальних змінних>;
<оголошення глобальних сталих>;
<оголошення та створення функцій користувача>;
…
<тип результату функції main(опис формальних параметрів)
{
<оголошення локальних змінних>; <оголошення локальних сталих>; <команди>; }
Розрізняють глобальні та локальні дані. Дані, визначені для всіх функцій, тут називатимемо глобальними, а дані, які використовуються лише в окремих функціях чи блоках, - локальними.
6. Сталі та змінні. Змінна чи стала — це пойменована ділянка оперативної пам'яті комп'ютера, де зберігається значення деякої величини.
Змінні і сталі (їх прийнято називати даними) мають такі властивості: назву (ім'я), значення, тип. Назву дає програміст.
Для роботи з даними слід зарезервувати певний обсяг оперативної пам'яті комп'ютера, де зберігатимуться їхні значення. Тому всі дані, які використовуються у програмі, потрібно заздалегідь описати (оголосити), оскільки компілятор розподіляє пам'ять згідно з описами.
Якщо значення деякої величини (даного) не змінюватиметься протягом виконання усієї програми, то таке дане варто задати як сталу (константу, const). Це можна зробити так:
-
const <назва сталої 1> = значення сталої 1>;
або так:
-
const <тип> <назва сталої 2> = Значення сталої 2>;
Сталу 2 називають типованою сталою. За замовчуванням числова стала належить до цілого типу. Під час виконання програми значення сталих змінювати не можна.
Приклад 1. Оголосимо три сталі
Const vik = 20, rist = 176;
Const float g = 2,78;
Для сталої g задано тип - float і значення 2,78.
Зауваження 5. У С++ є такі стандартні сталі: число π є сталою М_РІ, π / 2 - М_РІ_2, π І 4 - М_РІ_4, 1/ π - М_1_РІ, 1 / √ π -М_1_SQRTРІ тощо. Ці сталі можна безпосередньо використовувати у програмі, заздалегідь підключивши модуль math.h.
Дані, які під час виконання програми можуть набувати різних значень, називаються змінними. їх оголошують так:
-
<тип змінних 1 > <список змінних1>; <тип змінних N> <список змінних NІ>;
Елементи списків записують через кому. Наприклад, змінні оголошують так:
Int a, c; Float b, d, z; char w;
Змінним можна задавати початкові значення відразу під час оголошення. Це називається ініціалізацією даних. Наприклад, float b, d = 2.5, а = 4; char w = “t”;.
Отже, у загальному випадку змінні одного типу оголошують так:
-
<тип змінних> <назва змінної 1> = оначення 1>;
…
<назва змінної N> = оначення N>, <список інших змінних;»;
Запитання
З чого складається алфавіт мови?
Що таке ключове слово? Які ви знаєте ключові слова?
Що таке процессор?
Що такедиректива процессора? Які ви знаєте директиви?
Що таке файл заголовків?
Опишіть загальну структуру програми.
Що таке коментар?
Що таке стала?
Що таке змінна?
Як оголосити змінну?
Вправи
За зразком першої програми з тексту складіть і виконайти програми виведення на екран:
а) відомостей про себе; б) розкладу занять у понеділок; в) вашої адреси; г) імітації діалогу між користувачем і системою.
§ 2. Типи даних
1. Типи даних. Усі дані, які беруть участь у розв'язуванні задачі, ретельно класифікують за типами. Тип визначає допустимі значення даного, операції, які можна над ним виконувати, й обсяг оперативної пам'яті, який резервується для нього.
Зауваження 1. Обсяг може залежати також від різновиду операційної системи комп'ютера.
Визначити, який обсяг пам'яті компілятор надає даному того чи іншого типу, можна за допомогою команди sizeof{(<наз-ва типу>). Наприклад, команда cout sizeof(short int) виведе на екран монітора цифру 2. Це означає, що дане типу short int займає у пам'яті комп'ютера 2 байти.
У табл. 1, 2 наведені назви основних числових типів, обсяги пам'яті, які резервуються для екземплярів даних цих типів, і діапазони допустимих значень даних.
Числові дані поділяють на цілочисельні (цілі) та дійсні.
2. Цілі тини. Цілі типи описані в табл. 1.
Приклад 1 Оголосимо три змінні цілого типу:
Int x, y; short int z;
На етапі компіляції для змінних х, y, z буде надано певний обсяг оперативної пам’яті.
Надати значення цим змінним можна на етапі виконання
Програми за допомогою команд присвоєння, наприклад, так: х = 157 у = -68; z = 15;. У ділянку пам'яті, надану для змінної х, буде занесено число 157, для у - -68, а для z - 15.
Під час виконання програми значення змінних можна попити. Наприклад, команда присвоєння х = 2003 занесе у відповідну для змінної х ділянку пам'яті число 2003 (попереднє значення 157 вилучається автоматично).
Приклад 2. Сталі цілого типу можна оголосити так:
Const int a = 145;
Const long int b = 365978.
Значення даних а та b у програмі змінювати не можна.
3. Дійсні типи. Дійсні типи описані в табл. 2.
Зауваження 2. У десяткових числах ціла і дробова частини числа відокремлюються крапкою.
Приклад 3. Розглянемо фрагмент програми
Float h, рі = 3.1415926; double V = 365.976;
Const float w = -12, h = 23.4;
Тут оголошено дві змінні (h, рі) типу float і змінну V типу double, а також сталі w = -12; h ='23.4 типу float.
Дійсні числа можна записувати у форматі з фіксованою крапкою, наприклад -2.3, 5.0041, або у науковому форматі (у форматі з рухомою крапкою), наприклад, -0.2е+2 (це є число -20), 3.27е-3 (це є 0,00327).
Запис пе ± т означає множення числа п на 10 у степені ± т, тобто за означенням
пе±т = п* 10±m
Знак "+" можна не зазначати, знак "-" писати обов'язково.
4. Символьний тип (char). Символний тип – це множина символів кодової таблиці ASCII. Символьна стала – це один символ (1 байт), узятий у лапки на зразок апострофа, або число у 8-, 10-, 16-й системі счислення, яка ї коом символу в таблиці ASCII.
Приклад 4. Розглянемо описи символьних змінних, де мінним m1, m2, m3, і m4 надамо значення латинської літери ”A” чотирма способами:
Char m1 = ‘A’, m2 = 0101, m3 = 65, m4 = 0x41;
Число 65 - це десятковий код символу 'А', 101 - вісімко вий, 41 - шістнадцятковий. На початку останніх двох кодів (101, 41) записують префікси "0" чи "0х" відповідно.
Приклад 5. Розглянемо спосіб визначення десяткового ASCII-коду деякого символу, наприклад 'А':
char с = 'А'; int n =с;. Змінна n набуде значення 65.
5. Логічний тип (bооl). Логічний тип характеризується двома значеннями даних: false (хибність) і true (істина). Наприклад, boоl b = true. Змінні цього типу займають 1 байт у пам'яті комп'ютера. У С++ значення змінних типу int можна асоціювати з логічними значеннями: нулю відповідає значення false, усім іншим числам - true.
Зауважимо, що не всі компілятори підтримують тип даних bооl. Тому, перед тим як його використовувати, варто з'ясувати можливості компілятора.
Службове слово void. Службове слово void дописують до назв функцій, які не повертають значення у точку виклику або до функцій без параметрів.
Типи користувача. Крім вище описаних стандартних типів даних, можна створювати типи користувача
-
typedef <опис типу> <назва нового типу>;
Приклад 6. Опишемо тип kilkist для позначення коротких цілих даних без знаку:
Typedef unsigned short int kilkist;.
Змінні (Kil1, Kil2)типу у програмі можна оголосити так: Kilkist Kil1, Kil2
Запитання
Що таке тип даних?
Які ви знаєте типи даних?
Які ви знаєте числові типи даних?
Які ви знаєте цілочислені типи даних?
Які ви знаєте типи даних для дійсних чисел?
У яких формах можна записати дійсне число?
Які значення мають числа 12,5е1, 12.5е-2, 0.125е4, 125е-3?
Які значення мають числа 8.5е-1, 92.5е2, -0.45е3, -4е-2?
З чого утворюється символьний тип?
Як одержати на екрані ASCII-код символу?
З яких даних складається логічний тип?
Як утворити тип даних користувача?
Вправи
Опишіть: а) дві змінні х та а цілого типу; б) дві змінні дійсного типу; в) дві змінні символьного типу. Проініціалізуйте описані змінні.
Створіть тип даних користувача сіпа, значеннями даних якого є
Невід’ємні цілі числа. Якому діапазону можуть належати значення
даних описаного типу?
3. Які значення можуть набувати змінні типу Vaga, якщо Typedef unsigned long int Vaga?
4. Опишіть тип користувача balans із допустимими значеннями даних з діапазону від -32 000 до 32 000.