- •1. Кроки для створення виконання програми
- •2. Змінні та константи
- •3. Символьні масиви і рядки
- •4. Директиви препроцесора
- •Тема 2: введення-виведення даних план
- •Аргументи для setiosflags і resetiosflags
- •2. Функція printf
- •2. Операції відношення
- •3. Логічні операції
- •4. Додаткові операції
- •5. Порозрядні операції
- •Тема 4: організація циклів план
- •1. Організація циклів за допомогою while і do...While
- •2. Організація циклів із використанням оператора for
- •3. Оператори switch і goto
- •Тема 5: створення функцій план
- •1. Створення функцій
- •2. Видимість змінних
- •3. Передача значень
- •4. Повертаємі значення і прототипи функцій
- •Тема 6: зовнішні пристрої і символьне введення/виведення план
- •1. Загальна концепція
- •2. Функції символьного введення-виведення
- •3. Символьні функції
- •4. Рядкові функції
- •5. Числові функції
- •6. Функції роботи з датою та часом
- •Тема 7: масиви план
- •1. Одномірні масиви, їхня ініціалізація
- •2. Сортування масивів
- •3. Розміщення одномірного масиву в пам’яті
- •4. Багатомірні масиви і їхнє розміщення в пам’яті
- •Тема 8. Вказівки і посилання план
- •1. Вказівки
- •2. Масиви і вказівки
- •Тема 9: робота з файлами план
- •1. Загальна характеристика роботи з файлами
- •2. Послідовні файли
- •Можливі режими доступу
- •3. Файли довільного доступу (із випадковим доступом)
- •Тема 10. Структури план
- •1. Загальна характеристика структури
- •2. Масиви структур
- •3. Використання масивів, як елементів структур
- •2. Робота зі структурами є універсальною, передбачено додавання записів до файлу (флаг ios:app). Для підрахунку кількості структур на диску приведемо наступні рядки програми:
- •Список літератури
2. Операції відношення
== дорівнює
> більше
< менше
>= більше або дорівнює
<= менше або дорівнює
!= не дорівнює
Результатом виразу відношення є: 0 - неправда або 1 - істина
cout << 2 == 2 == 2 // 0 - неправда
cout << 2 < 3 // 1 - істина
Вираз відношення - два арифметичних вирази, з’єднані операцією відношення.
Оператор if
Синтаксис:
if ( <вираз> )
{ блок з одного або більш операторів }
Якщо після if стоїть 1 оператор, фігурні дужки можна не ставити.
Оператор if ...else
Синтаксис:
if ( <вираз> )
{ блок з одного або більш операторів }
else
{ блок з одного або більш операторів С++ }
if (Х > 0) Y = X * X;
else Y = 2 * X;
У логічному виразі обчислення виконуються зліва на право. Обчислення припиняються, як тільки результат стає визначеним. Такий засіб називається усіканням.
if ( a > b || c > d || e > f ) – переривається, як тільки обчислюється, що a > b, або c > d.
3. Логічні операції
&& - I
|| - АБО
! - НЕ
!( var1 = = var2 ) – те ж саме var1 ! = var2
Приклад:
if ( ( a< b ) & & ( c > d ) )
cout << 3;
Пріоритетність операцій:
арифметичні операції;
операцій відношення;
логічні операцій.
Усікання може бути використане для коректного обчислення.
Наприклад:
if ( b ! = 0 && a / b > 12.4 ) - коректно, ділення на нуль не буде.
Якщо записати if (a / b > 12.4 && b ! = 0 ) - небезпечно, може бути ділення на нуль.
Логічні вирази повертають значення типу int. Будь-яке ненульове значення розглядається як істина.
4. Додаткові операції
Умовна операція ?
Ця операція може використовуватися замість if ... else
Синтаксис:
результат = вираз1 ? вираз2 : вираз3
Приклад:
int i = 6, j = 8;
int res = ( i < j ) ? i : j;
cout << res << ’\n’; // 6
char rs[10];
strcpy(rs, (i < j) ? "Менше" : "Не менше");
cout << rs; //Менше
Операція інкремент ( ++ ) і декремент ( -- )
Ця операція збільшує або зменшує значення змінної.
При цьому в залежності від розташування справа або зліва від змінної інкремент ++ і -- називають префіксним або постфіксним.
++i означає i = i + 1 або i += 1;
--i означає i = i - 1 або i -= 1;
Якщо змінна має префіксну операцію, вона змінює своє значення перед тим, як буде використана у виразі. Якщо використовується постфіксна операція, то змінна змінить своє значення після обробки виразу:
a = 6;
b = a++ -1 // a = 7 b = 5
Префіксна операція має вищий пріоритет, ніж будь-яка інша операція.
s = ++(a + b ) → Помилка!!!
Операція застосовується тільки до змінної.
Приклад:
int i = 1, j = 2, k = 3;
a = i++ + j - --k;
cout << a << i << k // 122
Операція sizeof()
Формат: sizeof ( дані )
sizeof ( тип даних )
sizeof повертає розмір у байтах даних або типів даних.
cout sizeof (float) //4
5. Порозрядні операції
Таблиця 4
Основні порозрядні операції
Операція |
Значення |
& |
Порозрядне І |
| |
Порозрядне АБО |
^ |
Порозрядне виключаюче АБО |
~ |
Порозрядне заперечення (доповнення до 1) |
Таблиця 5
Характеристика основних порозрядних операцій
1-й біт |
Операція |
2-й біт |
Результат |
1 |
& |
1 |
1 |
1 |
& |
0 |
0 |
0 |
& |
1 |
0 |
0 |
& |
0 |
0 |
1 |
| |
1 |
1 |
1 |
| |
0 |
1 |
0 |
| |
1 |
1 |
0 |
| |
0 |
0 |
1 |
^ |
1 |
0 |
1 |
^ |
0 |
1 |
0 |
^ |
1 |
1 |
0 |
^ |
0 |
0 |
|
~ |
1 |
0 |
|
~ |
0 |
1 |
9 & 14 // 8
1 0 0 1 |
1 1 1 0 |
1 0 0 0 |
9 | 14 // 15
1 0 0 1 |
1 1 1 0 |
1 1 1 1 |
9 ^ 14 // 7
1 0 0 1 |
1 1 1 0 |
0 1 1 1 |
~ 9 // 6
1 0 0 1 |
0 1 1 0 |
unsigned char u1 = ~9; // 246
signed char u2 = ~9; // -10
unsigned int u3 = ~9; // 65526
signed int u4 = ~9; // -10
unsigned long u5 = ~9; // 4294967286
signed long u5 = ~9; // -10
Приклад визначення парного або непарного значення
#include <iostream.h>
void main()
{
int input;
cin>> input;
if(input & 1) // Істина, якщо число непарне
cout<< input << “Число непарне”;
else
cout<< input << “Число парне”;
}
У ASCII кодах єдина відзнака між маленькими і великими буквами значення 0 або 1 у 5-му біті - для англійських букв.
Біт → 7 6 5 4 3 2 1 0
А → 0 1 0 0 0 0 0 1 → Шест. 41, Дес. 65
а → 0 1 1 0 0 0 0 1 → Шест. 61, Дес. 97
Щоб перетворити символ до верхнього регістру необхідно встановити 0 у 5-й біт.
Для цієї мети можна використовувати маску зі значенням
223(10) = DF(16) = 1 1 0 1 1 1 1 1(2) → бітова маска.
Якщо 5-й біт 0 - не зміниться, якщо 1 - перетвориться в 0.
Приклад:
#include <iostream.h>
#define bitmas (0xDF) // 1 1 0 1 1 1 1 1
void main()
{
char a,b,c;
cin>>a; //g
cin>>b; //M
cin>>c; //p
a = a & bitmas;
b &= bitmas; // Складові поразрядні
c &= bitmas; // операції
cout<<a<<b<<c; //GMP
}
Для переключення заданого біта з 0 у 1 і навпаки, ефективно використовувати виключаюче АБО. Приклад із маскою, аналогічний попередньому.
Порозрядні операції зсуву.
Синтаксис:
a << b → зсув уліво
a >> b → зсув управо
Приклад:
29 << 3 // 232
0 0 0 1 1 1 0 1 // 29
1 1 1 0 1 0 0 0 // 232
← зсув на 3
Ця операція дорівнює 29∙ 23 = 232
Початковий знак від’ємного числа зберігається. При застосуванні порозрядного зсуву до від’ємного числа його знак зберігається, але старші розряди заміняються одиницею, а не нулем. Зсув управо (уліво) на n розрядів відповідно зменшує (збільшує) число в 2n разом.
Приклад порозрядних зсувів.
#include <iostream.h>
void main()
{
int num_1 = 25; // 00011001
int num_2 = 102; // 01100110
int shift_1, shift_2;
shift_1 = num_1 << 3; // 200
shift_2 = num_2 << 3; // 816
cout << shift_1 << «\n» << shift_2;
// 200
// 816
}
Може бути використана складова операція порозрядного зсуву:
<<= — складений порозрядний зсув уліво
>>= — складений порозрядний зсув управо
signed int num1 = 15;
unsigned int num2 = 15;
num1 <<= 4; //множення на 16
num2 >>= 3; //ділення на 8