русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-11-28; переглядів: 1946.


Команда 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;

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

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

4) for(intn = 1, S = 0; n < 16; S += n, n++);

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

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

intn, 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>

voidmain()

{

float uncial, gram, krok; __________________________________

intkil, 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

voidmain()

{

floatx, 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>

voidmain()

{

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>

voidmain()

{

intS = 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()

{

ofstreamtabfile (“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 floatpi = 3.1415926 можна було використати стандартну сталу М_РІ, яка описана у модулі math.h.

В С++ є чотири оператора, які змінюють нормальний порядок виконання обчислень:

· оператор безумовного переходу goto;

· оператор виходу з циклу break;

· оператор переходу до наступної ітерації циклу continue;

· оператор повернення з функції return;

Оператор безумовного переходу goto має наступний формат:

goto мітка;

В тілі тієї ж функції повинна бути присутня рівно одна конструкція типу:

мітка: оператор;

Оператор goto передає управління на помічений оператор. Мітка – це звичайний ідентифікатор, областю видимості якого є функція, в тілі якої він заданий.

Використання оператора безумовного переходу виправдане в двох випадках:

· вимушений вихід вниз по тексту програми з декількох вкладених циклів або перемикачів;

· перехід з декількох місць функції в одне (наприклад, якщо перед виходом з функції необхідно завжди виконувати певні дії).

У будь-якому випадку не доцільно передавати управління всередину операторів if, switch і циклів. Неможна переходити всередину блоків, що мітять ініціалізацію змінних, на оператори, що розташовані після неї, оскільки в цьому випадку ініціалізація не буде виконана.

int k;

goto metka;

{

int a=3, b=4;

k=a+b;

metka: int m=k+1;

}

Після виконання цього фрагменту програми значення змінної m не визначене.

 

Оператор break використовується всередині операторів if або switch для забезпечення переходу в точку програми, що знаходиться безпосередньо за оператором, всередині якого знаходиться break.


<== попередня лекція | наступна лекція ==>
Завдання 4. | Приклад.


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн