- •Int main() /* головна обов’язкова функція, де ключове слово int означає, що функція main() повертатиме у точку виклику результат цілого типу*/ 6
- •Засоби розробки с програм
- •Директиви препроцесора.
- •Using namespace std; // вказуємо, що будемо працювати з іменами із стандартної бібліотеки
- •Запитання
- •Тема 2. Данні
- •Команда присвоєння. Правила узгодження типів.
- •Запитання
- •Тема 3. Операції та вирази
- •Тема 4. Потоки. Введення - виведення даних
- •Форматування даних
- •Введення-виведенні засобами бібліотеки сstdіo
- •Тема 5. Адреси даних. Вказівники. Динамічна пам’ять
- •Тема 6. Файли
- •Тема 7. Розгалуження
- •Логічні вирази та логічні операції.
- •Команда ?
- •Тема 8. Цикли
- •Команда циклу з післяумовою do-while має вигляд
- •Тема 9. Функції (1)
- •Тема 10. Функції (2)
- •Тема 11. Масиви
- •Тема 12. Рядки
- •Тема 13. Структури, списки, стеки, черги, об’єднання
- •Тема 14. Виняткові ситуації
- •Http://www.Rate1.Com.Ua/strannosti/2633/ Самі фатальні помилки в програмному забезпеченні
- •Помилки під час виконання (виняткові ситуації, виключення) Exceptions - це помилки, що виникають у випадку, коли програма намагається виконати неприпустиму операцію.
- •Тема 15. Графіка
- •Написание простых графических программ
- •Http://www.Rsdn.Ru/article/opengl/ogltut2.Xml Графическая библиотека OpenGl
Тема 7. Розгалуження
1. Складена команда. Під час написання програми може виникнути потреба трактувати декілька команд як одну. Така каманда називається складеною.
Складена команда - це конструкція такого вигляду:
{
<команда 1>;
<команда N>;
}
Перед закриваючою дужкою “;” ставити обов’язково. Після дужки - не обов’язково.
Зауваження 1. Запис ;; називається порожньою командою. Якщо у складеній команді поставити символ після закриваючої дужки, то компілятор це розглядатиме як порожню команду, що не впливає на результат виконання програми.
Надалі під командою будемо розуміти порожню, просту або складену команду.
Кома як команда. Кому як команду використовують тоді, коли необхідно інтерпретувати декілька виразів або команд як одне ціле. Вона має вигляд
Дія команди. Послідовно обчислюються значення виразу 1 (виконується команда 1) та виразу 2 (команда 2).
Цю команду зручно використовувати у командах циклу, умовних командах тощо. Наприклад, if (k += 2, k< 7) ...
Тут спочатку значення змінної k буде збільшено на 2, а потім це значення порівнюватиметься із числом 7. Результат команди - true, якщо значення змінної k менше, ніж 7, у протилежному випадку - false.
Логічні вирази та логічні операції.
Логічний вираз - це засіб записування умов у задачах відшукання даних, що задовольняють деякий критерій. Логічний вираз може набувати значення true (істинність) або false (хибність). Логічні вирази бувають прості та складені. Простий — це два арифметичні вирази, з’єднані символом відношення, а складений — це прості логічні вирази, з’єднані логічними операціями:
!— не,
&& — і,
||— або.
Логічні вирази обчислюються з урахуванням пріоритету логічних операцій (1 — найвищий). Однакові логічні операції виконуються послідовно зліва направо. Для зміни порядку ми конання логічних операцій, як і для звичайних арифметичних, використовують круглі дужки.
У табл. 7 наведені означення логічних операцій.
Таблиця 7. Логічні операції
Вираз |
Значення |
|
Вираз |
Значення |
! true |
false |
|
! false |
true |
true && true |
true |
|
true || true |
true |
true && false |
false |
|
true || false |
true |
false && true |
false |
|
false || true |
true |
false && false |
false |
|
false || false |
false |
Логічним виразом може бути ціле число. Якщо воно не дорівнює нулю, то значення логічного виразу - true, якщо це число 0 — false.
Приклад 1. Розглянемо деякі логічні вирази та їхні знамення. Нехай а = 1, b = 7, тоді:
Вираз |
Значення |
|
Вираз |
Значення |
a == b |
false |
|
a > =3 && a <= 2 |
true |
! (a == b) |
true |
|
a >= 0 && b <= 4 |
false |
a >= b |
false |
|
b < 9 || b > 15 |
true |
a != b |
true |
|
!(a < 1 || b >=10) |
true |
a + 6 == b |
true |
|
a !=b || a+15 > b && b < 0 |
true |
a < (b = 1) |
false |
|
(a != b || a + 15 < b) && b < 0 |
false |
2 |
true |
|
0 |
false |
b |
true |
|
!b |
false |
Побітові логічні операції та операції зсуву. Одиницею виміру пам’яті комп’ютера є байт. Кожний байт складається із восьми бітів. У кожному біті можна розмістити одне з двох чисел: 0 та 1. У одному байті можна зобразити ціле число з діапазону від 0 до 255. Щоб занести значення деякого даного в пам’ять комп’ютера, необхідно це дане перетворити у двійковий код. Зазвичай відповідні програми це роблять автоматично. Однак інколи на практиці, наприклад, під час створення графічних зображень чи в задачах архівування інших, виникає потреба порівнювати не значення двох даних, а їхні біти. Для цього у мові С++ є побітові логічні операції.(табл. 8): & (І), | (АБО), ^ (виключне АБО), ~ (НЕ).
Таблиця 8. Побітові логічні операції
B1 |
B2 |
B1&B2 |
B|| B2 |
B1 ^ B2 |
~ B1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
Приклад 2. Нехай b1 = 00110011,
b2 = 11110101. Тоді
b1 &b2 = 00110001, b1||b2 = 11110111,
b1 ^ b2 = 11000110, ~ b1 = 11001100.
Кожний байт можна зобразити у вигляді послідовності з восьми нулів та одиниць. Для того, щоб зсунути біти послідовності вправо чи вліво на деяку фіксовану кількість, використовують спеціальні операції зсуву >> та <<. Під час зсуву на порожні місця дописують нулі. Наприклад, нехай b = 00100101, с = 10110010, тоді під час виконання команд
b = b << 2; с = с >> 1;
змінна b набуде значення 10010100, а с- 01011001.
Зауваження 2. Під час зсуву цифр цілого числа на n позицій вліво відбувається множення цього числа на 2n, а на n позицій вправо — ділення на 2п.
Зауваження 3. Подібно до команд присвоєння з арифметичними операціями можна використовувати команди присвоєння p логічними побітовими операціями: &=, |=, ^= та команди присвоєння з побітовим зсувом: >>=, <<+.
Таблица Примеры использования побитовых операторов |
||
Выражение |
Значение |
Пояснение |
5 & 3 |
1 |
В двоичном представлении число 5 имеет вид 101, а число 3 представляется как 011. Побитовое сравнение чисел 101 и 011 с помощью побитового И & дает 001, что в десятичной системе соответствует числу 1. |
5 | 3 |
7 |
Применение оператора побитового ИЛИ | для сравнения чисел 101 и 011 дает 111, что в десятичной системе соответствует числу 7. |
5 ^ 3 |
6 |
Применение оператора побитового исключающего ИЛИ ^ для сравнения чисел 101 и 011 дает 110, что в десятичной системе соответствует числу 6. |
~5 |
-6 |
После применения операции побитового инвертирования ~ к числу 5 требует особых пояснений. На самом деле в 8-битовом представлении число 5 имеет вид 00000101. В предыдущих случаях нулевые старшие разряды роли не играли, поэтому они явно не указывались. При инвертировании наличие старших нулевых битов важно. Инвертирование дает 11111010. Это не что иное, как представление в двоичном машинном коде числа -6. Последнее читатель может проверить самостоятельно. |
5 >> 2 |
1 |
После сдвига вправо на две позиции для числа 5(двоичный код 101) получаем 001. В десятичной системе это число 1. |
5 << 2 |
20 |
После сдвига влево на две позиции для числа 5(двоичный код 101) получаем 00100. В десятичной системе это число 20. |
Звертаємо увагу на особливості застосування операції побітового зсуву до відємнихчисел.
Наприклад, результатом виразу -6 >> 5 є число -1. Справа в тому, що в бінарному коді 11111010 для числа -6 при зсуві вправо на 5 позицій за умови збереження значення став біта знака отримуємо код 11111111. Це код числа -1.
Особливості операцій в двійковій системі такі, що зсув в побітового представленні числа на одну позицію вліво означає множення цього числа на 2. Варто тільки пам'ятати, що з певного моменту при зсуві вправо губляться старші біти.
Уявімо, що число задається 8 бітами.
Якщо скористатися командним 1 << 6, отримаємо в якості результату значення 26 = 64.
Дійсно, десяткове число 1 в двійковій системі в 8-бітовому представленні задається як 00000001. після зсуву вліво на 6 позицій отримуємо 01000000, що в десятковій системі відповідає числу 64.
Однак якщо скористатися командою 1 << 7, отримаємо в якості результату -128.
Пояснюється це наступним обставиною
Після зсуву вліво на 7 позицій з числа 00000001, отримуємо число 10000000.
Це від‘ємне число, про що свідчить старший одиничний біт.
Здійснюючи перевідцього числа в десяткову систему, спочатку інвертуємо бінарний код і отримуємо 01111111. Це код числа 127. Щоб отримати кінцеве значення, необхідно додати до цього результату 1 і додати мінус - в результаті приходимо до значення -128.
Команда розгалуження if (якщо). Команда розгалуження if має дві форми: повну та коротку. Повна така:
if (<логічний вираз>) <команда 1>; else <команда 2>;
Дія команди. Обчислюється значення логічного виразу. Якщо це значення істинне, то виконується команда 1, у протилежному випадку - команда 2. Команда 1 та команда 2 можуть бути порожніми, простими або складеними.
Приклад 3. Нехай х = 9. Унаслідок виконання команд
if (х > 7) у = pow(x, 2); else у = sqrt(x);
if (х <= 5) z = ехр(х); else z = ++x;
отримаємо у = 81, x = 10, z = 10.
Після цього виконання команд
if (x) у = x -10; // оскільки х ≠ 0(х=10), у=0
if (у) у+= 2; else у = 15; // змінна у набуде значення 15
Приклад 4. Проаналізуємо команди
if (0) cout<< "Hello!"; — виведення на екран не буде
if (5) cout << "Hello! "; — буде виведене слово Hello!
if (!5) cout <<"Hello!"; — виведення не буде
if (!0) cout <<"Hello! "; — буде виведене слово Hello!
if (log(1)) cout << "Hello! "; - виведення нe буде lg1=0
Задача 1 (про обчислення складеної функції). Обчислити і вивести на екран значення складеної функції у у деякій наданій користувачем точці х, якщо
// Обчислення виразу
#include <iostream>
#include <cmath>
#include <conio.h>
int main()
{
float x, y;
std::cout << "Vvedit x\n";
std::cin >>x;
if (x < 0) y = tan(fabs(x)); else
if (0 <= x && x < 5) y = pow(x, 3); else y = log(x) / log(5);
std::cout <<"\n у = " << y;
getch();
}
Коротка команда розгалуження if має вигляд
if (<логічний вираз>) <команда 1>;
Дія команди. Обчислюється значення логічного виразу. Якщо воно істинне, то виконується команда 1, інакше виконуються команда, яка записана після команди if.
Приклад 5. Нехай а = 7. Розглянемо команди
if (а > 7)
{
у = а++; z = а + 5;
}
іf (а <= 9) z= ++а /2; у = z + а;
Оскільки значення виразу а > 7 - false, то відразу виконується друга команда if.
Значення виразу а <= 9 - true,
тому z = (а +1) / 2 = (7 + 1) / 2 = 4,
значення а = 7 + 1 = 8,
отже, у = 4 + 8 = 12, а = 8.
