- •§ 2. Типи даних
- •§ 3. Присвоєння
- •§ 5. Потоки. Введення - виведення даних
- •§ 6. Адреси даних. Вказівники. Динамічна пам'ять
- •§ 7. Файли
- •§ 8. Розгалуження
- •§ 9. Цикли
- •§ 10. Функції (1)
- •§ 11. Функції (2)
- •§ 12. Масиви
- •§ 13. Рядки
- •§ 14. Структури, списки, стеки, черги, об'єднання
- •§ 15. Графіка
- •§ 16. Вступ до об'єктно-орієнтованого програмування
- •§ 1. Вступ до візуального програмування
- •§ 2. Задача про анкету
- •§ 3. Задача про обмін валюти
- •§ 4. Задача табулювання функції
- •§ 5. Створення навчальної програми
§ 3. Присвоєння
1. Проста програма. Програма - це послідовність команд, за допомогою яких записують алгоритм розв'язування конкретної задачі.
Задача 1 (про прямокутний трикутник). Нехай задано катети прямокутного трикутника а = З, b = 4. Знайти периметр і площу трикутника.
// Програма Трикутникі
#include <iosrtream.h>
#Include<math.h>
Void main()
{
int а = З, b = 4, с, р, s; // Задаємо довжини сторін
с = sqrt(а * а + b * b) // Обчислюємо гіпотенузу
р = а + b + с; // Обчислюємо периметр
s = а * b / 2; // Обчислюємо площу
cout « "р =” « р« "\n"; // Виводимо значення периметра
cout« "s = " « s « "\n"; // та площі на екран
cout « "Виконав Квакін В."
}
Символ “*” позначає операцію множення, а "/" - ділення.
Функція sqrt() призначена для обчислення квадратного кореня.
Ця функцыя визначена у бібліотеці Math.h яку під'єднують
На початку програми. Після виконання програми на екрані
Отримаємо
Р = 12
S = 6
Виконав Квакін В.
Команда присвоєння. Правила узгодженіїп ТИПІВ. Команда присвоєння має такий загальний вигляд:
-
<назва змінної> = <вираз>
або
-
<назва змінної 1> = <назва змінної 2> = ... = <назва змінної N> = <вираз>
Дія команди. Обчислюється вираз і його значення надається змінній або декільком змінним. Вираз призначений для описування формул, за якими виконуватимуться обчислення. Вираз може містити числа, сталі, змінні, назви функцій, з'єднані символами операцій.
Розглянемо приклади написання команд приспоашя: а = 8-2; с = d = а + 4; c = d / 5 + с;
Змінна і вираз не обов'язково повинні бути одного типу. Крім того, у виразі можуть бути дані різних числови є типів (змішані вирази). Якщо тип змінної не збігаетьоя з ТИПОМ виразу, то у С++ відбувається автоматичне перетворення (узгодження) типів.
Розрізняють явне та неявне узгодження ТИПІВ, з якими ознайомимося на прикладах.
Надалі поза командами імена змінних подаватимемо курсивом.
Приклад 1. Розглянемо програму, де значення змінної а типу int треба помножити на значення змінної с типу float (відповідні числа вводитимемо з клавіатури) і результат надати змінній b типу int:
// Множення чисел
#include <iostream.h>
void main()
{
int b, а; float с;
cout « "Введіть ціле число \n";
сіп » а; // Вводимо значення а з клавіатури
cout « "Введіть дійсне числo \п";
сіn » с; // Вводимо значення с з клавіатури
b = с * а;
cout« "а = " « а « "\n";
сout« "с = " « с « "\n";
сout « "b = "; cout « b « "\n";
}
Для введення значення змінної з клавіатури використовується конструкція сin ».
Якщо ввести дані так: а — 2, с = 3.8, то після виконання програми на екрані отримаємо
а = 2 с = 3.8
b = 7
Спочатку відбулося множення (с* а = 3.8*2 = 7.6). Оскільки змінна b цілого типу, то дробову частину числа 7,6 було відкинено і змінній b надано значення 7. Відбулося неявне перетворення типів (перетворення за замовчуванням). Якщо у попередній програмі змінну b оголосити як змінну типу float, то отримаємо b = 7,6.
Для явного перетворення типів новий тип задають у круглих дужках перед змінною або виразом. Якщо у програмі вище записати команду
b = (int)с * а;
то під час обчислення виразу спочатку відбудеться перетворення даного с до цілого типу (3), а потім - множення (с* а = 3*2 = 6). Отримаємо а = 2, с = 3.8, b = 6.
Якщо ж у програмі цю команду записати так:
Ь = (int)(с * а);
то спочатку відбудеться множення (с*а = 3.8*2 = 7,6),а пізніше результат буде перетворений до цілого числа (b = 7). Отримаємо а = 2, с = 3.8, b = 7.
Отже, у випадку використання явного перетворення типів потрібно стежити, до яких елементів виразу воно застосовується. Узгодження типів у виразах відбувається з урахуванням пріоритетів типів. Зазначимо пріоритети типів за їхнім спаданням: Double, float, long, int, short. За замовчуванням результат перетворюється до старшого типу.
Вправи
1. Розглянувши програми Трикутник1 і Множення чисел як зразки, розв’яжіть. задачу № 1 вашого варіанта з розділу "Задачі." трьома способами:
а) задайте вхідні дані під час оголошення змінних;
б) задайте вхідні дані командами присвоєння;
в) введіть вхідні дані з клавіатури.
2. Складіть програму розв'язування задачі № 1 з розділу "Задачі" наступного після вашого варіанта. Дані введіть із клавіатури.
Розглянемо операції порівняння. Операція == означає дорівнює, != — не дорівнює, <= — менше або дорівнює, >= — більше або дорівнює.
Виконання кожної операції здійснюється з урахуванням їхніх пріоритетів (тут 1 - найвищий). Для зміни звичайного порядку виконання операцій використовують круглі дужки.
Приклад 1. Розглянемо результати виконання операцій
2 * -5 + 4 = -6; 12 / 4 - 2=1;
2 * (-5 + 4) = -2; 12 / (4 - 2) = 6;
7 % 3 = 1; 7 % 3 * -5 = -5.
Приклад 2. Нехай х — З, у = 5. Дано вираз х == у. Значенням цього виразу буде false (хибність), оскільки значення змінних х та у не рівні між собою, а значенням виразу х != у - true (істина), значеннями виразів х > у, х <= (у - 2) - відповідно false та true.
2. Операції інкременту (++) та декременту (--). Операції інкременту і декременту існують у двох формах - префіксній та постфіксній. Якщо символи ++ (--) записані перед змінною - то це інкремент (декремент) у префіксній формі, а якщо після змінної - у постфіксній. Операція інкременту має такий вигляд:
-
++<змінна> або <змінна>++
Дія операції. Значення змінної збільшується на одиницю. Команди ++а, а++ рівносильні команді а = а + 1. Форма інкременту (декременту) впливає на порядок виконання операцій у виразах. Розглянемо це на прикладах.
Приклад 3. Результати виконання команд
а = 2;
b = 3 * ++а;
будуть такими: а = З, b = 3 • 3 = 9. Тут використано операцію інкременту у префіксній формі: спочатку збільшується значення змінної а на одиницю, а пізніше обчислюється вираз.
Приклад 4. Розглянемо команди
с = 5; d = (с++) + 4;
Тут спочатку обчислюється вираз (для (d) з с = 5, а потім збільшується значення змінної с на одиницю. Тобто d = с + 4 = 5 + 4 = 9, с=с+1=5+1=6 (це операція інкременту у постфіксній формі). Оскільки у виразі записано три знаки плюс "+" підряд, то для однозначного задання порядку операцій використано круглі дужки.
Аналогічно операція декременту має такий вид:
-
--<змінна> або <змінна>--
Значення змінної зменшується на одиницю. Команди --а та а-- діють як і команда а = а - 1.
Приклад 5. Результати виконання команд х = 4;
У = 15 / --х;
будуть такими: x = 3,у = 15 / 3 = 5. Тут спочатку значення змінної х зменшується на одиницю, а пізніше обчислюється вираз для у.
Приклад 6. Під час виконання команд
f = 20;
g = (f--) -10; змінним f, g будуть надані значення 19 і 10 відповідно.
3. Команда присвоєння, суміщена з арифметичною операцією. Щоб надати значення змінній, можна скористатися ко-
мандою присвоєння, суміщено з деякою арифметичною операцією, а саме +=, -=, *=, /=, %=. Загальний вигляд команди присвоєння, суміщеної з арифметичною операцією, такий:
-
<змінна> <символ арифметичгої операції>= <вираз>
Зауважимо, що між символом арифметичної операції та символом " = " пропуск не допускається (це лексема). Наприклад, команди
а = а + 10 та а+=10
рівносильні. Виконавши їх одержимо однаковий результат, хоча оптимальніше використовувати а += 10. А замість команди b = 4 * b можна писати b *= 4.
4. Математичні функції. Усі стандартні математичні функції у С++ описані у бібліотеці math.h. Тому, якщо вони використовуються, на початку програми необхідно записати рядок під'єднання потрібного файлу заголовків #include<math.h>;.
Основні математичні функції бібліотеки таіЬ.п наведені у табл. 4. Аргументи функцій записують у круглих дужках.
Усі наведені функції, крім abs(х) і pow10(х), мають тип аргументу і результату double. Для функцій abs(х) та pow10(х) типом аргументу і результату є int.
Приклад 7. Нехай оголошено змінні
Imt х = -2, х1,а = 3;
float рі = 3.1415926, m = 16, kut, k;
Тоді у результаті виконання команд
х1 = аbs(х); а=pow10(а); kut = соз(2 * рі); k = pow(m, 1/4); m = sqrt(m);
змінним х1, а, kut, k, m будуть надані наступні значення:
х1 = аbs(-2) = І-2І = 2;
а = роw10(3) = 103=1000;
kut = соз(2* 3.1415926) = 1;
k = роw(16, 1./4) = 161/4=2;
m=sqrt(16)=
=4.
Приклад 8. Нехай у програмі оголошені змінні b, b1, b2 типу double і нехай b = 7.6. Тоді після виконання команд
b1 = ceil(b); b2 = floor(b);
змінна b1 набуде значення 8, а змінна b2 - значення 7.
Усі інші математичні функції можна виразити через основні. Наприклад, ctgx = 1 / tgx, logba = ln(а) / ln(b) тощо.
Послідовність виконання операцій у виразах така ж, як у математиці, й визначається правилом пріоритетів:
обчислюються значення всіх функцій, які входять у вираз;
виконуються операції присвоєння знака, множення, ділення та остачі від ділення;
виконуються операції додавання та віднімання.
Операції одного рівня виконуються послідовно зліва направо. Для зміни порядку виконання операцій використовують круглі дужки. Спочатку обчислюються вирази у дужках - найперше у внутрішніх, пізніше - у зовнішніх. Кількість відкритих і закритих дужок у виразі повинна бути однаковою.
Усі елементи виразів (дроби, показник степеня, індекси) записують у горизонтальному рядку. У багатьох випадках їх беруть у дужки. Вирази можна записувати у декількох рядках. "Розривати" вирази можна, наприклад, після символу арифметичної операції. Власне символ дублювати не потрібно.
Приклад 9. Складемо програму, яка обчислює значення
функції
#include <iosrtream.h>
#Include<math.h>
Void main()
{
const float pi = 3.1415926;
float x = 2, y;
y = pow(x * x +7.2? 1./5) – Fabs(x-5) + sin(pi * x/3);
cout << “ \n y = “ << y << “\n”;
}
Результат виконання програми такий: у = -0.512748.
Вправи
Користуючись програмою Обчислення виразу як зразком, складіть програму для обчислення значення функції вашого варіанта з розділу "Задачі" для деякого значення аргументу. Виконайте програму тричі для трьох різних значень аргументу. Занотуйте результати.
Запишіть мовою С++ такі вирази:
