- •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
Тема 8. Цикли
Цикл (повторення) - це процес виконання певного набору команд деяку кількість разів. У мові C++ є три команди циклу — for, while та do-while.
Команда циклу з лічильником for.
Команда for має вигляд
for (<вираз 1>; <логічний вираз 2>; <вираз 3>) <команда 1>;
Вираз 1 призначений для підготовки циклу і виконується один раз. Переважно тут задають початкові значення змінних циклу (підготовляють цикл).
У виразі 2 записують умову виходу із циклу.
У виразі 3 - команди зміни параметрів циклу. Якщо за допомогою одного із виразів необхідно виконати декілька дій, то використовують команду "кома". Вирази 1 і 3 або один із них у команді for можуть бути відсутні. У цьому випадку опускати символ ; не можна. Наприклад, for(; і<10 ;) і++;.
Дія команди.
Обчислюються значення виразів 1 і 2.
Якщо значення виразу 2 істинне - виконується команда 1. Якщо хибне — виконавець програми переходить до наступної після for команди.
Обчислюються значення виразів 3 та 2 і перевіряється пункт 2).
Приклад 1. Суму цілих чисел з проміжку від 1 до 15 можна обчислити одним із способів:
int n = 1, S = 0;
for ( ; n < 16; n++) S += n;
for (int n = 1,S = 0;n<16; n++) S += n;
for (int n = 1, S = 0; n < 16; S += n++);
for (int n = 1, S = 0; n < 16; S += n, n++);
У результаті виконання команд змінній S буде присвоєно значення 120. Зауважимо, що у способі 2) for (int n = 1, S = 0; n < 16; S += n, n++); змінні S і n ініціалізовано (оголошено) безпосередньо у команді циклу for.
Приклад 2. Кількість і добуток усіх парних цілих чисел із проміжку від 4 до 11 можна обчислити так:
int n, D, kil;
for (D = 1, kil = 0, n = 4; n <= 11; n += 2)
{
D*= n; кіl++;
}
У результаті виконання програми одержимо D = 1920, kil = 4. Враховуючи приклад 1, наведіть інші можливі способи написання команди for.
Зауваження 1. Часто у циклах корисно застосовувати команди break і continue. Команда break достроково припиняє роботу циклу і забезпечує перехід до наступної після циклу команди. Команда continue припиняє виконання поточної ітерації та починає виконувати наступну ітерацію (повторення) циклу. Зазвичай ці команди належать до деякої умовної команди. Наприклад, якщо виконуватиметься певна умова, то буде вихід з циклу, або, якщо умова не виконуватиметься, то буде перехід до наступної ітерації тощо.
Приклад 3. Визначити, чи число а просте (ділиться на себе або 1), можна так:
for (int n = 2, р = 1; n <= (int)sqrt((double)a); n ++)
// n – дорівнює першому простому числу 2; дільник чисела менший ніж корінь квадратний з цього числа (т.е. n<(а)^0.5)...
if (!(p = a % n)) break;
p ? cout<<"просте": cout<< "складне";
Задача 1 (про таблицю мір). Побудувати таблицю відповідності між унціями та грамами, якщо 1 унція = 28,353495 г. Початкове значення кількості унцій (uncia), крок зміни (krok) цього значення та кількість рядків (kil) у таблиці задати самостійно у режимі діалогу.
// Програма відповідності мір
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
float uncia, gram, krok; int kil, n;
cout << "Введіть початкове значення унцій, \n"
<<" крок зміни та кількість рядків у таблиці\n";
cin >> uncia >> krok >> kil;
cout<< " " << "\n";
cout <<"Унції Грами "<<"\n";
cout << " " << "\n";
for (n = 1; n <= kil; n++)
{
gram = 28.353495 * uncia;
cout<< uncia <<"\t" << gram << endl;
uncia += krok;
}
cout<< "_____________________" ;
getch();
}
Задача 2 (про випадкову величину). Нехай випадкова величина X отримує значення з деякими ймовірностями
xk |
1,0 |
1,5 |
2,0 |
2,5 |
Pk |
0,1 |
0,4 |
0,3 |
0,2 |
Обчислити
математичне сподівання
,
дисперсію
D
= MX2
- (MX)2,
де MX2
=
і середнє квадратичне відхилення
випадкової величини X.
//Математична статистика
#include <iostream>
#include <conio.h>
#include <math.h>
#define N 4
using namespace std;
int main()
{
float x, p, M = 0, M2 = 0, D, S;
for (int k = 1; k <= N; k++)
{
cout << "Введіть x " <<k << "-те та p" << k << "-те\n";
cin >> x >> p;
M += x * p;
M2 += pow(x, 2) * p;
}
cout << "\n M=" << M;
D = M2 - pow(M, 2); S = sqrt(D);
cout.precision(3); // Для заокруглення до трьох знаків після коми
cout<< "\n D=" << D << "\n Sigma=" << S;
getch();
}
У результаті виконання програми одержимо М = 1,8; D = 0,21; Sigma = 0,458
Задача 3 (про табулювання функції і пошук даних).
Протабулювати функцію у = 2sinx на проміжку [0; 2,5] з кроком h = 0,1 та обчислити середнє арифметичне (s1) значень функції більших ніж 0,5, і менших ніж 1,5.
// Табулювання функцїі
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
float x, h = 0.1, y, s1 =0;
float a = 0, b = 2.5 + h / 2; int n = 0;
cout << " X Y \n";
for(x = a; x <= b; x += h)
{
y = 2*sin(x); // Обчислюємо у
cout.precision(2); // Для заокруглення до двох знаків після коми
cout<< x << "\t" << y << "\n";
if (y > 0.5 && y < 1.5) // Обчислюємо суму та кількість значень функції у,
// які задовольняють задану умову
{
n++;
s1 += y;
}
}
if (n) // Якщо n не дорівнює 0, то обчислюємо та виводимо
{
s1 /= n; // на екран середнє арифметичне
cout << "S = " << s1; // шуканих значень функції
}
else // Якщо шукані дані відсутні, буде подано звуковий сигнал та
cout << "\а Таких значень немає"; // виведено відповідне повідомлення
getch();
}
Зауваження 2. Ураховуючи специфіку комп’ютерної арифметики, щоб не втратити останнього значення функції, у будові циклу while до останнього значення (х=2,5) додаємо деяке зміщення, у цьому випадку h / 2.
Команда циклу з передумовою (while) має вигляд
while (<вираз>) <команда 1>;
Дія команди.
Обчислюється значення виразу. Якщо воно істинне, то переходимо до пункту 2), якщо хибне - до пункту 3).
Виконується команда 1 і відбувається перехід до пункту 1).
Відбувається перехід до наступної після while команди. Виразом може бути довільний логічний вираз, стала або змінна цілого типу. Якщо треба перевірити декілька умов, то застосовують команду "кома". Команда 1 може бути порожньою, простою або складеною.
Команда while може бути виконана один раз, декілька разів або не бути виконана жодного разу.
Приклад 4. Нехай х = 4, s = 0, d = 1. Після виконання команд
while (х <= 8) {s += х; х++;}
while (х > 10) d *= х;
s = 0 + 4 + 5 + 6 + 7 + 8 = 30, х = 9, а змінна d свого значення (1) не змінить, оскільки значення виразу х > 10 хибне, і тому команда d *= х у циклі while виконуватись не буде.
Приклад 5. Визначити обсяг вільної у певний момент оперативної пам’яті можна так:
int n= 0;
while (new char) n++; або так:
for (int n = 0; new char; n++);.
Задача 4 (про суму цифр натурального числа).
Для заданого натурального числа n підрахувати суму його цифр
#include <iostream>
using namespace std;
int main()
{
int S = 0, n, m;
cout << "Введіть число";
cin>> n; m = n;
while (m > 0)
{
S+=m%10; m /= 10;
}
cout << "Сума цифр числа " << n << " дорівнює " << S;
}
Задача 5 (про суму елементів знакозмінного ряду, послідовності).
Нехай х - деяке число, яке необхідно ввести з клавіатури під час виконання програми, е = 0,001 - точність обчислень. Обчислити суму елементів знакозмінного ряду
Визначити
кількість доданків. Вивести на екран
результати обчислень.
// Програма Сума 1
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
const float e = 0.001;
float x,a, S = 0;
int n = 0, fact = 1;
cout << "Введіть x \n";
cin>> x;
a = -2 * x;
while (fabs(a) > e) // Умова закінчення обчислень
{
S+= a; n++; fact*= n; a = pow(-1, n) * pow(2 * x, n) / fact;
}
cout.precision(2);
cout << "S = " << S << "\n";
cout << "Кількість доданків = " << n;
getch();
}
Зауваження
3.
Розглянемо
ще один спосіб (більш економний)
розв’язування задачі 5. Для обчислення
значень послідовності ап
побудуємо рекурентну формулу, тобто
виразимо ап
через
ап-1.
Отже,
