Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Method_Lab_Work_ANSI_C__2010_lab1-10_v2.doc
Скачиваний:
39
Добавлен:
22.11.2018
Размер:
1.14 Mб
Скачать

3.1.2. Цикл із постумовою

Як і цикл із передумовою, цикл із постумовою застосовують тоді, коли кількість ітерацій циклу є невідомою до початку його виконання. Умова продовження циклу з постумовою записується після тіла циклу та вперше перевіряється після виконання операторів тіла. Цикл з постумовою за будь-яких обставин буде виконано принаймні один раз. Синтаксис оператора циклу з постумовою такий:

do { <оператор1;> ... <операторN;> } while ( <умова повторення циклу> );

Тут do, while — зарезервовані слова, <оператор1>;...<операторN>; — тіло циклу; <умова повторення циклу> — деякий булів вираз.

3.1.3. Цикл із лічильником

Відстежити істинність умови повторення циклу дозволяє спеціальний різновид параметра циклу, лічильник ітерацій. Лічильник — це змінна, що під час кожного повторення збільшується на одиницю. В операторі циклу з лічильником облік числа виконаних ітерацій вказується у заголовку, і тому цей оператор є зручною формою запису циклів із наперед визначеною кількістю повторень. Синтаксис оператора циклу з лічильником такий.

for ([<вираз1>]; [<вираз2>];[<вираз3>] ) <оператор;>

Тут for — зарезервоване слово («для»); <вираз1>  ініціалізує лічильник та виконується один раз на початку циклу; <вираз2> — деякий булів вираз, котрий визначає умову повторення циклу; <вираз3>  змінює значення лічильника циклу, найчастіше це просто операція інкремента чи декремента; <оператор> — простий або складений оператор, що є тілом циклу. Фраза for() є заголовком циклу, а зазначений після круглих дужок оператор — тілом циклу. Найчастіше <вираз1>  записують у вигляді <лічильник>=<початкове значення>; <вираз2> є виразом відношення (<, >, <=, >=, !=, ==), в якому порівнюються поточне та кінцеве значення лічильника. Початкове та кінцеве значення лічильника — це вирази того самого перелічуваного типу; лічильник — це змінна перелічуваного типу, що є узгодженим за присвоюванням з типом початкового та кінцевого значення.

3.1.4. Переривання та продовження циклу

У деяких програмах виникає потреба завершити цикл або його ітерацію передчасно. У мовах С/С++ цього ефекту можна досягти, використовуючи оператори break та continue.

Передчасний вихід із циклу означає, що умова повторення циклу під час виходу з нього є істинною. Для примусового переривання циклу слід виконати оператор break. Оператор continue здійснює пропуск усіх інструкцій, записаних після його виклику в тілі циклу. Таким чином, після виконання оператора continue завжди перевіряється умова продовження циклу.

Якщо використовуються вкладені цикли, то оператор break перериває той цикл, у якому він виконується. Після переривання внутрішнього циклу управління передається заголовку зовнішнього циклу для перевірки умови його продовження. Аналогічно працює і оператор continue: його виконання забезпечує дії нової ітерації того циклу, в якому цей оператор здійснено.

3.2. Приклад алгоритму та програми

Обчислити суму ряду, елемент котрого розраховується за формулою

//ex3.1

#include<iostream>

#include<iomanip>

#include<math.h>

using namespace std;

float x; //параметр зовнішньої суми

float k=0; //параметр внутрішньої суми

float sum=0;//сума ряду

float error; //точність розрахунків

float member; //елемент ряду

//=======обчислення факторіала числа=========

float factorial(int number)

{ //параметр number– число, факторіал котрого розраховується

float fact=1;

if (number==0) fact=1;

else

{

for(int i=1;i<=number;i++)

fact*=i;

}

return (float)fact;

}

///===========виведення поточних розрахунків===========

void OutputSum()

{

cout<<setw(5)<<x<<setw(10)<<k<<setw(20)<<member<<setw(15)<<sum<< endl;

}

//===========обчислення елемента ряду та суми==============

void MemberAndSum()

{

double Numerator; //чисельник елемента ряду

double Denominator; //знаменник елемента ряду

for (x=1;x<=5;x++)

{

k=0;

do

{

Numerator=pow(x,(2*k-1));

if(k>16) //floating point error - overflow

{

cout<<"overflow - break cycle with k"<<endl;

break;

}

else

{

Denominator=(2*k-1)*factorial(2*k+1);

member=(float)Numerator/Denominator;

member*=(-1);

sum+=member;

OutputSum();

k++;

}

}while(fabs(member)<error); //поки не досягнуто

// заданої точності

}

}

/////// головна функція////////////

int main()

{

cout<<"To calculate the sum of row "<<endl;

cout<<" 5 endlessness "<<endl;

cout<<" sum ( sum (((-1)^(k+1))*(x^(2k-1))/((2k-1)(2k+1)!)))" <<endl;

cout<<" x=1 k=0"<<endl;

cout<<"input error: ";

cin>>error;

cout<<"result of iterations"<<endl;

cout<<"=================================================="<<endl;

cout<<" x k member sum "<<endl;

cout<<"=================================================="<<endl;

MemberAndSum();

cout<<"=================================================="<<endl;

cout<<"sum="<<sum<<endl;

system("pause");

}

Рис. 3.1. Результати роботи програми ex3.1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]