Розробка уроку

Тема: початки мови програмування C++.

Мета:

По завершенню вивчення учень має уявлення про: yміє:

розуміє як використовувати різні типи даних.

Обладнання: комп’ютери зі встановленими ОС та середовищем програмування CodeBlocks, (дана) інструкція.

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Вивчення нового матеріалу.
  4. Закріплення вивченого матеріалу.
  5. Підведення підсумків уроку.
  6. Домашнє завдання.

Хід уроку
1. Організаційний момент
Привітання з учнями. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання. Оголошення теми й мети уроку.

2. Актуалізація опорних знань
Дати означення понять, виділені жирним шрифтом.

Алгоритмце запис скінченої послідовності вказівок, виконання яких призводить до розв'язання певної задачі.

Вказівка (алгоритму) — це спонукальне речення, що вказує, яку дію має виконати виконавець алгоритму.

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

Система вказівок виконавцяце множина (сукупність) всіх вказівок, які може виконувати даний виконавець.

Середовище виконання алгоритму — об'єкти, з якими працює виконавець у процесі виконання алгоритму.

Властивості алгоритму: дискретність, визначеність, виконуваність, скінченність, результативність, масовість, ефективність.

Дискретність (латинською discretus — розділений, розривний) алгоритму означає, що виконання алгоритму зводиться до виконання окремих дій (кроків) у певній послідовності. Причому, кожну вказівку алгоритму виконують за скінченний проміжок часу.

Визначеність (однозначність) означає, що алгоритм однозначно визначає порядок дій виконавця, результат цих дій і не потребує додаткового тлумачення..

Виконуваність означає, що алгоритм, призначений для певного виконавця, може містити лише вказівки, які входять до системи вказівок цього виконавця.

Скінченність означає, що виконання алгоритму закінчиться після скінченної (можливо, досить великої) кількості кроків і за скінченний час для довільних вхідних даних.

Результативність алгоритму означає, що після закінчення виконання алгоритму обов’язково:

Масовість алгоритму означає, що алгоритм можна застосувати до цілого класу однотипних задач, для яких спільними є умова та хід розв’язування та які відрізняються лише початковими (вхідними) даними. Наприклад, алгоритмом дій, складеним для одного касира, можуть успішно скористатися всі касири супермаркету. А програмою пошуку коду і підрахунку суми вартостей товарів, придбаних покупцем, — усі комп'ютери супермаркету

Ефективність алгоритму описує час виконання і об'єм ресурсів, необхідних для виконання алгоритму: чим менше часу (часова ефективність) і ресурсів (просторова ефективність), тим ефективність вища.

  1. Як називають такий порядок дій?
    1. Завантажити середовище Code::Blocks.
    2. Ввести текст програми.
    3. Запустити програму на компіляцію та виконання.
    4. Ввести два довільних натуральних 2-цифрових числа через пробіл.
    5. Натиснути клавішу Enter.
    6. Дочекатися виведення добутку введених чисел.
    7. Натиснути клавішу Enter.
  2. Звичайною мовою кажуть, що все йде за програмою, якщо:
    • дії виконують за допомогою комп'ютера;
    • дії відбуваються у повній відповідності з планом;
    • виконують дії до задачі.
  3. Процес роботи комп'ютера полягає у виконанні (чого?)
  4. Програми створюють люди за фахом ...
  5. Де виконують програми?

3. Вивчення нового матеріалу

У театрі хід подій на сцені попередньо визначено у найдрібніших деталях:

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

Робота комп'ютера полягає у виконанні програми — набору певних дій у певному порядку. Програма є алгоритмом дій комп’ютера, записаним зрозумілою для нього мовою.

Щоб задати комп'ютеру послідовність дій, потрібно задати послідовність двійкових кодів відповідних вказівок. Писати такі програми — дуже складна й марудна справа.

Простіше писати програму деякою мовою, наближеною до природної людської мови, а переклад у машинні коди доручити комп'ютеру. Так з'явилися мови, призначені спеціально для написання програм — мови програмування, що на відміну від розмовної мови не допускають двозначностей чи вільного тлумачення.

Мова програмування (англійською programming language) — це система позначень для опису алгоритмів та структур даних.

Будь-яка мова програмування має такі 3 основні складові: абетку, синтаксис (правила написання) і семантику (правила тлумачення й виконання).

Алфавіт мови C++ включає:

Літери українського алфавіту можна використовувати лише для запису коментарів.

Коментарце частина тексту програми для пояснення програми чи окремих вказівок і не впливає на виконання програми.

Коментар мовою С++ записують так:
// текст коментаря до кінця рядка
/* текст коментаря */

Компілятордопоміжна програма для компіляції — створення машинного коду, тобто перекладу мовою вказівок комп'ютера.

Програмний кодтекст програми — складається з вказівок, описів змінних, сталих, приєднаних бібліотек тощо, які будують з лексем.

Лексеманеподільний елемент мови (слово, число, символи операцій).

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

Ідентифікатор записують латинськими літерами, цифрами і знаком підкреслення. Розпочинають ідентифікатори з латинських літер та знаку підкреслення:

При написаннні ідентифікатора у мові С++ враховую регістр: MAX, Max і max — три різні ідентифікатори.

Ключові словаце зарезервовані ідентифікатори, які використовують для написання вказівок: alignas, alignof, and, and_eq, asm, auto, bitand, bitor, bool, break, case, catch, char, char16_t, char32_t, class, compl, const, constexpr, const_cast, continue, decltype, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, noexcept, not, not_eq, nullptr, operator, or, or_eq, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_assert, static_cast, struct, switch, template, this, thread_local, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while, xor, xor_eq

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

Директиви препроцесора розпочинають символом #:

Структура програми мовою C++
Істотною особливістю мови С++ є те, що програма складається з функцій, які відповідають підпрограмам (процедурам) в інших мовах програмування.

Головна функція, яка має бути в кожній програмі, — це функція такого вигляду:

int main()
{
 тіло функції;
}


Найпростіша програма мовою С++ має такий загальний вигляд:

#include <назва файлу 1.розширення> …
#include <назва файлу N.розширення>
int main()
 {
  тіло функції;
 }


Зазвичай програми мають і інші об'єкти: дані (змінні та сталі), функції (стандартні та створені користувачем) тощо. Всі дані, які використовують у програмі, необхідно зазделегідь описати для розподілу оперативної пам'яті згідно з описами.

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

#include <iostream>
#include <clocale>
using namespace std;
int main()
{
    setlocale(LC_CTYPE,"rus");
    int a,b;
    cout<<"Введiть два цiлi числа: ";
    cin>>a>>b;
    cout<<"Їхнiй добуток: "<< a*b;
    return 0;
}

Cлушне запитання: «Як виконати написану програму?» Бо текст програми, написаний на аркуші паперу, не буде виконано.

Для зручності роботи користувача створено інтерактивне інтегроване середовище програмування, у якому об'єднано можливості:

і в якому передбачено можливість запуску програми на виконання в разі успішної компіляції. Інтерактивним середовище називають тому, що воно працює в режимі постійного спілкування з користувачем, а інтегрованим тому, що об'єднує в собі одночасно всі згадані вище можливості. Такими середовищами є, наприклад, платформно незалежне і вільно поширюване середовище CodeBlocks, яке ми будемо вивчати на наступних уроках. Зручно використовувати також online середовища програмування, які не вимагають встановлення програмного забезпечення.

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

Завдання 1. Змінити подану вище програму таким чином, щоб обчислювати:

Поняття величини є одним з найважливіших понять математики та фізики. Більшість з них є числовими. У програмуванні користуються таким визначенням.

Величинаодиниця даних, якими оперує програма. Вона має такі властивості:

З кожною величиною (або її складовою для структурованої величини) пов'язана ділянка оперативної пам’яті, куди її під час роботи програми заносять та у якій зберегають. Цю ділянку визначено її адресою. Тут під адресою розуміють адресу першого байту з послідовновних щодо адресації байтів, відведених для збереження величини. Назва змінної слугує назвою цієї послідовності байтів під час виконання програми.

У програмі С++ всі оголошення об'єктів і вказівки закінчують символом ; (крапка з комою).

Сталівид даних, значення яких заборонено змінювати протягом виконання програми. Їх описують після ключового слова const:

const тип назва_сталої = значення;

Зміннівид даних, значення яких дозволено змінювати протягом виконання програми.

Змінним можна надавати величину під час опису (оголошення). Елементи списків записують через кому. Наприклад,

int k, n = 0;


Величини потрібно описати до їхнього першого використання.

Тип даних характеризує допустимі величини для цих даних і сукупністю операцій над ними.

В мові С++ розрізнять прості та складні типи даних. До простих відносять числові, логічні та символьні типи даних.

Числові дані поділяють на цілі та дійсні.

Цілі типи

Назва типуОбсяг
(байтів)
Діапазон
signed char1 –128..127
unsigned char1 0..255
short2 –32768..32767
unsigned short2 0..65535
int4 –2147483648..2147483647
unsigned int4 0..4294967295
long long8 –9223372036854775808..
9223372036854775807
unsigned long long8 0..18446744073709551615

Дійсні типи

Назва типуОбсяг
(байтів)
Діапазон
float 4 3.4·10–38..3.4·10+38
double8 1.7·10–308..1.7·10+308
long double10 1.18·10–4932..1.18·10+4932

Для дійсних чисел вказано діапазони зміни абсолютнної величини (модуля). Дійсні числа можна записувати у форматі з фіксованою крапкою (2.56, –0.3) або у науковому форматі (з рухомою крапкою: –0.23e3=–230, 1.45e–2=0.0145)

Логічний тип bool. Змінні цього типу можуть набувати лише два значення:

Вони займають 1 байт у пам'яті і до них можна застосувати логічні операції (див. далі опис найпоширеніших).

Логічні операції в C++

ПріорітетОпераціяНазва
1 ! заперечення
2 && логічне «і»
3 || логічне «або»

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

Логічне «і» (кон'юнкція) справджується тоді й лише тоді, коли справджуються обидва її аргументи — висловлювання, записані безпосередньо до і після знаку операції.

Логічне «або» (диз'юнкція) — справджується тоді й лише тоді, коли справджується хоча б один з двох її аргументів — висловлювань, записаних безпосередньо до і після знаку операції.

Таблиця істинності в іншій формі подає запроваджені означення. Тут A і B — логічні вирази або дані логічного типу.

AB!BA&&BA||B
00100
01001
10101
11011

Проста умоваце два арифметичних вирази, сполучені символом операції (відношення) порівняння.

Cкладені умовице прості умови, сполучені логічними операціями (в аксіоматичній теорії висловлювань їх називають логічними або пропозиційними зв'язками).

Прості і складені умови — частковий випадок висловлювань. Математична теорія висловлювань — складова університетського курсу математичної логіки — ґрунтується на аксіоматичному підході. Внаслідок високого рівня абстракції її не вивчають у школі. Тому будемо користуватися неформалізованими (наївними) уявленнями про висловлювання. Для висловлювань, записаних мовою програмування, будемо користуватися також назвою логічний вираз.

Примітка. Логічним виразом може бути ціле число: 0 — false, відмінне від 0 — true.

Логічні змінні й вирази зазвичай використовують як умови у вказівках галуження та циклу (див. далі).

Символьний тип char. Змінні цього типу можуть набувати лише величин з кодової таблиці комп'ютера ASCII.

Символьна стала це один символ, узятий в одинарні лапки, або число у 8-, 10- чи 16-й системі числення, яке є кодом символу у таблиці ASCII. Наприклад:

char s='f'; d=102;

Зауважимо: 102 — це десятковий код символу 'f'. Після такого опису:

char s='f'; int n=s;

змінна n набуде величини 102.

Вказівка надання значення має такий вигляд:

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

int b, a; float c;
a = 2; c = 4.9; b = a*c;

змінна b набуде величини 9 після неявного перетворення дійсного числа 9.8 у ціле.

Явне перетворення типів задають у круглих дужках перед змінною чи виразом.

Явне перетворення типів для поданого вище прикладу опису змінних:

ВказівкаРезультат виконання
b = (int)  c * a; b = (int) 4.9 * 2 = 4 * 2 = 8
b = (int) (c * a); b = (int) (4.9 * 2 ) = (int) 9.8 = 9

Вираз може містити дані різних числових типів (змішані вирази). Узгодження типів у виразах відбувається з урахуванням пріорітету типів:

Операції

ПозначенняЗміст
+ -надання знаку
*множення
/ділення
%лишок від ділення
+додавання
-віднімання
==дорівнює
!=не дорівнює
<менше
<=не більше
>більше
>=не менше

У поданому вище переліку операцій пріоритет тим вищий, чим темніше тло клітин таблиці. Для зміни пріорітету використовуються круглі дужки. Наприклад:

16 / 4 - 2 = 2;
16 / (4 - 2) = 8;


Операція інкременту (++) існує у двох формах:

Величину змінної при цьому збільшують на 1. Інакше кажучи, вказівки a++, ++a і a=a+1 — рівносильні. Але форма інкременту впливає на порядок виконання операцій. Наприклад:

Операція декременту (--) має такі самі форми і властивості, але діє як вказівка зменшення на 1.

Cуміщення вказівки надання величини з арифметичною операцією (між символами пропуску немає) у мові С++ використовують для скорочення коду програми. А саме:

ПозначенняЗміст
+=збільшити на …
-=зменшити на …
*=збільшити у таку кількість разів
/=зменшити у таку кількість разів
%=замінити на залишок від ділення на …

Наприклад, такі пари вказівок рівносильні:
a = a + 10;  i  a += 10;
b = 4 * b;  i  b *= 4;

Математичні функції (основні) описано у бібліотеці math.h, яку необхідно обов'язово підключати для використання цих функцій, серед яких є такі:

abs(x) — модуль числа х;
sqrt(x) — кадратний корінь числа х;
pow(x,y) — піднесення числа х до степеня y;
ceil(x) — заокруглення числа х до більшого цілого;
floor(x) — результат відкидання дробової частини числа х.

Якщо в арифметичному виразі використано функції, то спочатку обчислюють величини всіх функцій, а потім виконують операції згідно їх пріорітету та дужок (як в математиці). Вирази записують в один рядок, але можна записувати і в декілька рядків, «розриваючи» після символа арифметичної операції. Власне символ дублювати не потрібно.

Введення-виведення даних у мові С++ реалізовано з використанням концепції потоків, бо немає вбудованих вказівок введення-виведення. Під потоком розуміють процес уведення-виведення даних (як послідовності символів) у файл. Периферійні пристрої введення-виведення клавіатура і монітор розглядаються як текстові файли. Під час виконання будь-якої програми автоматично підключаються стандартні потоки для введення даних з клавіатури та виведення на монітор. При бажанні потоки можна перенаправити на інший пристрій, наприклад, файл жорсткого диску. Вказівки введення-виведення даних описано у бібліотеці iostream (Input / Output Stream — поток введення / виведення), яку необхідно підключати майже в кожній програмі. Цю бібліотеку включено у стандартну бібліотеку C++.

cin >> — вказівка введення даних із клавіатури — дає змогу вводити величину однієї або величини декількох змінних (вказівку >> застосовують перед кожною змінною). Наприклад:

cin >> a >> b;

При виконанні програми значення змінних вводяться через пропуск або натисненням клавіші Enter.

cout << — дає змогу виводити на монітор величини сталих, змінних або виразів.

Текстові повідомлення записують у подвійних лапках, але самі лапки на екран не виводяться.

У мові С++ є набір керівних послідовностей (символів), які записують у вказівках введення-виведення. Керівну послідовність "\n" викорис­товують для переходу на новий рядок перед або після потоку виведення даних. Наприклад:

cout <<"\n s="<<s; — виводить на монітор у новому рядку назву змінної та її значення.

Приклад 2. Подамо приклад програми знаходження кількості цифр введеного цілого числа.

#include <iostream>
#include <clocale>
using namespace std;
int main()
{ setlocale(LC_CTYPE,"rus");
  int n, k;
  cout<<"Введiть цiле число ";
  cin>>n;
  for ( k = 0 ; n > 0 ; k++) n = n / 10;
  cout<<"В цьому числi "<<k<<" цифр";
  return 0;
}

Тут вказівка

using namespace std;

замовляє простір назв std, який використовують майже всі стандартні бібліотеки С++.

Простір назвдеяке сховище чи середовище, створене для назв. Одну й ту саму назву можна незалежно означити (тлумачити) у кількох просторах. Тлумачення назви, визначеної у просторі назв, пов'язане саме з цим простором.

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

Примітка. В даному середовищі програмування не забезпечено вивід повідомлень кирилицею, для використання україно- чи російськомовних повідомлень недостатньо лише вказівки cout. Як це зробити при кодуванні файлів UTF-8 показано у наступному коді програми розв'язання такої задачі: за введеним роком народження людини визначити, чи у 2013 році вона була шкільного віку, тобто чи був її вік від 6 до 17 років включно.

#include <iostream>
#include <clocale>
using namespace std;
int main()
{
  setlocale(LC_ALL, "");
  wcout << L"Введiть рiк народження" << endl;
  int r,v;   bool s; // опис змінних
  cin >> r;          // введення r - року народження
  v=2013 - r;        // обчислення v - віку
  if ((s = v > 5) && (v < 18))
  wcout << L"Школяр" << endl;
  else
  wcout << L"Не школяр" << endl;
}

При цьому використано компілятор налаштовано таким чином.

Якщо в тексті програми є помилки, то їх можна переглянути на закладці Build messages, розташованій у нижній частині вікна під робочим полем.

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

Приклад 4. Наступна програма зчитує 3 цілих числа й порівнює кожне з них з сумою решти. У разі перевищення виводить 1, інакше — 0.

Код програми

#include <iostream>
#include <clocale>
using namespace std;
int main()
{
  setlocale(LC_ALL, "");
  wcout << L"Введiть цiлi числа a, b, c " << endl;
  int   a, b, c;
  bool la,lb,lc;
  cin  >> a >> b >> c;
  la=(a<b+c);
  lb=(b<c+a);
  lc=(c<a+b);
  cout << "a<b+c b<c+a c<a+b" << endl;
  cout << "  " << la << "     "
               << lb << "     " << lc << endl;
}

Вікно користувача після запуску програми й уведення чисел 8 5 2 має такий вигляд.

4. Закріплення вивченого матеріалу

Завдання 1. Дати відповіді на запитання.

  1. З чого складається алфавіт мови С++?
  2. Що таке ідентифікатор?
  3. Які правила запису ідентифікатора?
  4. Що таке перепроцесор?
  5. Як записують директиви перепроцесора?
  6. Як записують коментарі мовою С++?
  7. Які типи даних використовують у мові С++?
  8. Яка структура програми мовою C++?
  9. Якою буде величина b після виконання такого коду?

    int a = 5, b;
    b = a / 2;
    c = a / 4 + b;
  10. Якими будуть величини c, d після виконання такого коду?

    int d, c;
    d = 2.6;
    c = pow(d,3);
    c += 2;
    d = 10*c++;
  11. Якими будуть величини c, d, якщо у попередньому завданні використати префіксну форму інкременту?

  12. Величини змінних o1, o2, o3, o4, o5 — річні оцінки учня. Записати логічний вираз, який справджується тоді й лише тоді, коли учень відмінник, тобто всі його оцінки перевищують 9. Описати всі використані змінні.

  13. Величини змінних o1, o2, o3, o4, o5 — річні оцінки учня. Записати логічний вираз, який справджується тоді й лише тоді, коли учень не встигає, тобто хоча б одна з оцінок менша від 4. Описати всі використані змінні.

Завдання 2. Перевірити у середовищі програмування отримані відповіді до завдання 1.

5. Підсумок уроку

Виставлення оцінок.

6. Домашнє завдання

Завдання 1. Дано вік людини. Скласти логічний вираз, який справджується тоді й лише тоді, коли ця людина не шкільного віку.

Завдання 2. Дано ціле число. Скласти логічний вираз, який справджується тоді й лише тоді, коли це двозначне число.

Завдання 3. Дано порядковий номер року. Скласти логічний вираз, який справджується тоді й лише тоді, коли цей рік високосний. Врахувати, що серед років, які кратні 4 не всі роки високосні. Високосними не є роки кратні 100, але кратні 400 — високосні.

Завдання 4. Поміняти величини двох змінних цілого типу без використання додаткових змінних і операцій введення-виведення. Скласти алгоритм та написати текст програми мовою С++.

Завдання 5. Вивчити навчальний матеріал уроку. Ознайомитися з наступними структурами мови С++ (подано структуру опису), щоб виробити уявлення про можливості мови програмування. У разі потреби використати довідникову літературу або ресурси Інтернету.


Галуження
if (умова) вказівка1 else вказівка2 — повна форма умовного оператора;
if (умова) вказівка — неповна форма умовного оператора;


switch (вираз)
{ case значення1 : вказівка1; break;
  case значення2 : вказівка2; break;
  …
  case значенняn : вказівкаn; break;
  default: вказівкаn + 1
};

{ вказівки } — об'єднання кількох вказівок в одну.

Цикли

for (дія до почату циклу;
     умова продовження циклу;
     дія в кінці кожної ітерації циклу;)
{ вказівка1;
  вказівка2;
  …
  вказівкаn;
}

while (умова) {вказівка} — з попередньою перевіркою умови.
do {вказівка} while (умова); — до справдження умови.

break — вихід з циклу.

continue — перехід до наступного кроку циклу й ігнорування вказівок, записаних після вказівки переходу.

return код виходу — припинення виконання програми.

Тип лінійного (одновимірного) масиву, що відповідає послідовності елементів:

тип назва масиву [кількість_елементів];

Зауважимо, що нумерація елементів масиву починається з нуля.

Тип двовимірного масиву, що відповідає прямокутній таблиці елементів:

тип назва_масиву [кількість_рядків] [кількість стовпчиків];

Структура — сукупність полів

struct назва_структури
{ тип_поля1 назва_поля1;
  тип_поля2 назва_поля2; …
} назва_змінної;

Структура особливо зручна при роботі з послідовністю елементів, що мають кілька властивостей різного типу. Якщо використовувати n масивів для опису n характеристик, то при переставленні двох членів послідовності потрібно використовувати кількість вказівок, що пропорційна n. При використанні структури для цього достатньо вказівку swap. Очевидний виграш у довжині коду і зменшення ймовірності припуститися помилки при наборі коду.

Можливість C++ працювати з множинами елементів різних типів проілюструємо таким прикладом: програма

#include <iostream>
#include <set>
#include <iterator>
#include <cstdlib>

using namespace std;
int main()
{ set <int> s;  // створення порожньої множини
  for( int j = 0; j < 10; j++) {s.insert(j);}
  cout << "Елементи множини цифр: ";
  copy( s.begin(), s.end(), ostream_iterator<int>(cout, " "));
  cout <<endl;
  s.erase(9);       // вилучення числа 9
  if (s.count(8)) {cout << "8-OK";}
  if (s.count(9)) {cout << "9-OK";}
  return 0;
}

має таке виведення на екран:

Елементи множини цифр: 0 1 2 3 4 5 6 7 8 9
8-OK

Робота з файлами засобами С++ передбачає використання специальнних типів даних — потоків:

При работі с текстовими файлами потрібно під'єднувати бібліотеку fstream.

Алгоритм зчитування з (текстового) файлу:

Алгоритм запису у (текстовий) файл:

  1. Описати змінну типу ofstream.
  2. Відкрити файл з допомогою функції open.
  3. Вивести інформацію у файл.
  4. Закрити файл.

Відкриття файлу можна здійснити за допомогою функції fopen(), яка повертає покажчик на структуру типу FILE, який можна використовувати для подальших операцій з файлом.

FILE * fopen (назва файлу, тип);

Тут тип визначає доступу до файлу при його відкритті:

Режим відкриття файлу встановлює характер використання файлу. Для визначення режиму у класі ios_base передбачені такі сталі:

Параметр режим можна не вказувати. У цьому випадку файл буде відкрито в режимі як усталено для даного потоку. Після вдалого відкриття файлу у файловій змінній буде збережено значення true, після невдалого — false. Це дає можливість перевірити коректність відкриття файлу.

Подамо три еквівалентні за результатом приклади здійснення кроків 1 і 2 для потоку F:

Примітка. Зверніть увагу на потребу писати додаткову косу риску в записі шляху до файлу.

Після відкриття файлу в режимі запису в нього можна виводити дані так само, як как и на экран. Але замість стандартного пристрою виведення cout необхідно вказати файлову змінну. Наприклад, F<<a; або F<<b<<c<<d;

Закриття потоку здійснюють оператором close. Наприклад, F.close();

Зчитування інформації з текстового файлу задають аналогічно запису, але з використанням типу ifstream (замість ofstream) і >> замість << — див. наступний приклад.

#include <iostream>
#include <fstream>
using namespace std;
int main()
{ int a,b;
  ifstream fi; //Оголошення потоку зчтитування з файлу fi
  ofstream fo; //Оголошення потоку запису у файл fo
  fi.open("input.txt");  //Прив'язування назви файлу до fi
  fo.open("output.txt"); //Прив'язування назви файлу до fo
  fi >> a >> b;         //Зчитування з файлу
  fo << a*b << endl;    //Запис у файл
  cout << a << " * " << b << " = " << a*b;
  fi.close();
  fo.close();
  return 0;
}

Якщо відомо лише тип, але не кількість величин у файлі, потрібно перед кожним зчитуванням перевіряти, чи досягнуто кінець файлу за допомогою булевої функції F.eof(), де F — назва потоку. Функція повертає true або false відповідно до того, досягнуто кінець файлу чи ні.

Рядок тексту
У мові С ++ немає певного типу, призначеного для роботи з рядками тексту, як, наприклад, у мові Pascal. Але замість цього використовують лінійний (одновимірний) масив символів, останнім елементом якого є ознака кінця рядка «\0». В описі рядка не обов'язково вказувати його розмір. Але обов'язково потрібно задати початкові значення. Тоді розмір рядка буде визначено автоматично, а в кінець рядка буде вставлено ознаку кінця рядка. Наприклад, таким чином:

char s[] = "abcdefghf";

Лінійний масив символів при цьому отримує властивості рядка: його можна використовувати як аргумент бібліотечних функцій для роботи з рядками або при виведенні рядка. Наприклад, таким чином: cout<<s;

Функції для роботи з рядками працюють при під'єднаній бібліотеці string. Пере­лічимо деякі з них:

Вказівка переходу на мітку має такий вигляд:

goto мітка;

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

мітка:

Породження псевдовипадкових чисел

srand(int)ініціалізує генератор псевдовипадкових чисел за допомогою аргументу — початкового значення, що однозначно визначає послідовність породжуваних псевдовипадкових чисел.

rand()повертає псевдовипадкове ціле число у діапазоні від 0 до RAND_MAX (сталої cstdlib).

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

#include <ctime>

і використати вказівку:

srand(time(NULL));

Динамічний розподіл пам'яті


Текст упорядкувала Домрачева Ольга Федорівна, вчитель Київського спортивного ліцею інтернату Солом'янського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 8.09.2014 по 26.12.2014.