Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Робочий зошит_КІ.doc
Скачиваний:
12
Добавлен:
09.11.2018
Размер:
2.72 Mб
Скачать

Команда циклу з лічильником for.

Команда for має вигляд

for (<вираз 1>; <логічний вираз 2>; <вираз 3>) <команда 1>;

Вираз 1 призначений для підготовки циклу і виконується один раз. Переважно тут задають початкові значення змінних циклу (підготовляють цикл). У виразі 2 записують умову виходу із циклу. У виразі 3 – команди зміни параметрів циклу. Якщо за допомогою одного із виразів необхідно виконати декілька дій, то використовують команду "кома". Вирази 1 і 3 або один із них у команді for можуть бути відсутні. У цьому випадку опускати символ ";" не можна. Наприклад, for ( ; і < 10; ) і++;.

Дія команди.

  1. Обчислюються значення виразів 1 і 2.

  2. Якщо значення виразу 2 істинне – виконується команда 1. Якщо хибне – виконавець програми переходить до наступної після for команди.

  3. Обчислюються значення виразів 3 та 2 і перевіряється пункт 2).

Приклад 1. Суму цілих чисел з проміжку від 1 до 15 можна обчислити одним із способів:

  1. int n = 1, S = 0;

for ( ; n < 16; n++) S += n;

  1. for (int n = 1, S = 0; n < 16; n++) S += n;

  2. for (int n = 1, S = 0; n < 16; S += n++);

  3. for (int n = 1, S = 0; n < 16; S += n, n++);

У результаті виконання команд змінній S буде присвоєно значення 120. Зауважимо, що у способі 4) for (int n = 1, S = 0; n < 16; S += n, n++); змінні S і п ініціалізовано (оголошено) безпосередньо у команді циклу for.

Приклад 2. Кількість і добуток усіх парних цілих чисел із проміжку від 4 до 11 можна обчислити так:

int n, D, kil;

for (D = 1, kil = 0, n = 4; n <=11; n += 2)

{

D *= n; kil++;

}

У результаті виконання програми одержимо D = 1920, kil = 4.

Побудувати до даного прикладу блок-схему

Зауваження 1. Часто у циклах корисно застосовувати команди break і continue. Команда break достроково припиняє роботу циклу і забезпечує перехід до наступної після циклу команди. Команда continue припиняє виконання поточної ітерації та починає виконувати наступну ітерацію (повторення) циклу. Зазвичай ці команди належать до деякої умовної команди. Наприклад, якщо виконуватиметься певна умова, то буде вихід з циклу, або, якщо умова не виконуватиметься, то буде перехід до наступної ітерації тощо.

Задача 1 (про таблицю мір). Побудувати таблицю відповідності між унціями та рамами, якщо 1 унція = 28,353495 г. Початкове значення кількості унцій (uncia), крок зміни (krok) цього значення та кількість рядків (kil) у таблиці задати самостійно у режимі діалогу.

// Програма відповідності мір

#include <iostream.h>

#include <conio.h>

void main()

{

float uncial, gram, krok; __________________________________

int kil, n;

cout << “Введіть початкове значення унцій, \n”

<< “крок зміни та кількість рядків у таблиці \n”;

cin >> uncial >> krok >> kil;_______________________________

cout << “________________” << “\n”;

cout << “Унції Грами” << “\n”;

cout << “________________” << “\n”;

for (n = 1; n <= kil; n++)____________________________________

{

gram = 28.353495 * uncial;_____________________________

cout << uncial << “\t” << gram << endl;___________________

uncial += krok;________________________________________

}

cout << “________________” << “\n”;

getch();

}

Задача 2 (про випадкову величину). Нехай випадкова величина Х отримує значення з деякими ймовірностями

1,0

1,5

2,0

2,5

0,1

0,4

0,3

0,2

Обчислити математичне сподівання , і середнє квадратичне відхилення випадкової величини Х.

// Математична статистика

#include <iostream.h>

#include <conio.h>

#include <math.h>

#define N 4

void 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 = sgrt(D);

cout.precision(3); // Для заокруглення до трьох знаків після коми

cout << “\n D =” << D << “\n Sigma =” << S;

getch();

}

У результаті виконання програми одержимо М = 1,8; D = 0,21; Sigma = 0,458.

Дописати дану програму таким чином, щоб значення були лише в межах від 0 до 1

Задача 3 (про табулювання функції і пошук даних). Протабулювати функцію y = 2sinx на проміжку [0; 2,5] з кроком h = 0,1 та обчислити середнє арифметичне (s1) значень функції більших ніж 0,5, і менших ніж 1,5.

// Табулювання функції

#include <iostream.h>

#include <conio.h>

#include <math.h>

void 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 << x << “\t” << y << “\n”;

if (y > 0.5 && y < 1.5)________________________________________

{

n ++; s1 += y;____________________________________

}

}

if (n)______________________________________________________

{

s1 /= n;________________________________________________

cout << “S =” << s1;_____________________________________

}

else

cout << “\a Таких значень немає”;

getch();

}

Зауваження 2. Ураховуючи специфіку комп’ютерної арифметики, щоб не втратити останнього значення функції, у будові циклу for до останнього значення (х = 2,5) додаємо деяке зміщення, у цьому випадку h / 2.

Команда циклу з передумовою (while) має вигляд

while (<вираз>) <команда 1>;

Дія команди.

  1. Обчислюється значення виразу. Якщо воно істинне, то переходимо до пункту 2), якщо хибне – до пункту 3).

  2. Виконується команда 1 і відбувається перехід до пункту 1).

  3. Відбувається перехід до наступної після while команди.

Виразом може бути довільний логічний вираз, стала або змінна цілого типу. Якщо треба перевірити декілька умов, то застосовують команду "кома". Команда 1 може бути порожньою, простою або складеною.

Команда while може бути виконана один раз, декілька разів або не бути виконана жодного разу.

Приклад 3. Нехай х = 4, s = 0, d = 1. Після виконання команд

while (x <= 8) {s += x; x++}

while (x > 10) d *= x;

s = 0 + 4 + 5 + 6 + 7 + 8 = 30, х = 9, а змінна d свого значення (1) не змінить, оскільки значення виразу х > 10 хибне, і тому команда d *= x у циклі while виконуватись не буде.

Задача 4 (про суму цифр натурального числа). Для заданого натурального числа п підрахувати суму його цифр

#include <iostream.h>

void 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.h>

#include <conio.h>

#include <math.h>

getch();

}

Команда циклу з післяумовою do-while має вигляд

do <команда 1>;

while (<вираз>);

Дія команди.

  1. Виконується команда 1 і обчислюється значення виразу.

  2. Якщо значення виразу істинне, то див. пункт 1), якщо значення виразу хибне – відбувається перехід до наступної після do-while команди.

Команда 1 у циклі do-while, на відміну від циклу while, буде виконуватись хоча б один раз завжди.

Приклад 4. Нехай цілі змінні х, у мають значення х = 5, у = 0. У результаті виконання команд

do

{

y += x; z = 2 * x; x -= 2;

}

while (x > 1);

змінні x, y, z набудуть значень: y = _______ , z = _____, x = ____.

Задача 6 (про розклад числа на прості множники). Розкласти на прості множники задане натуральне число. Кількість виведень кожного множника дорівнює його кратності у розкладі.

#include <iostream.h>

}

Задача 7 (про максимальне значення функції). Протабулювати функцію y = 2cosx на проміжку [-π; π] з кроком h = π / 4. Результати обчислень вивести на екран або у файл за вибором виконавця у вигляді таблиці. Визначити найбільше значення функції (max) на цьому проміжку, а також з’ясувати, для якого х (xmax) воно досягається.

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

// Табулювання функції

#include <fstream.h>

#include <conio.h>

#include <math.h>

void main()

{

ofstream tabfile (“tabul.txt”, ios::out);_________________________________

const float pi = 3.1415926;___________________________________________

float x = -pi, h = pi / 4, y, max, xmax;_________________________________

max = 2*cos (x);___________________________________________________

xmax = x;_______________________________________________________

cout.precision(2);__________________________________________________

cout << “X Y” << “\n”;____________________________________________

tabfile << “X Y” << “\n”;__________________________________________

do_____________________________________________________________

{

y = 2*cos (x) + 1.75;___________________________________________

cout << x << “\t” << y << “\n”;_________________________________

tabfile << x << “\t” << y << “\n”_____________________________

if (y > max)_______________________________________________

{

max = y;__________________________________________________

xmax = x;________________________________________________

}

x += h;_______________________________________________________

}

while (x <= pi + h / 2);______________________________________________

cout << “\n Max =” << max << “\n”;___________________________________

cout << “xmax =” << xmax << “\n”;____________________________________

tabfile << ”\n Max =” << max << ”\n”;__________________________________

tabfile << “xmax =” << xmax << “\n”;__________________________________

tabfile.close();_____________________________________________________

getch();

}

Порівняйте результати, виведені на екран і у файл

Зауваження 4. У попередній програмі замість оголошення сталої const float pi = 3.1415926 можна було використати стандартну сталу М_РІ, яка описана у модулі math.h.