
Лабораторна робота № 3
Тема: Програмування арифметичних циклів
Мета роботи: Набуття навичок використання мови С++ для програмування арифметичних циклів.
Теоретичні відомості
Цикл з параметром for. Загальний вид даного оператора:
for ( I; V; M ) O;
I - ініціалізація;
V - вираз;
M - модифікація;
O - оператор.
Ініціалізація використовується для оголошення і присвоєння початкових значень величинам, що використовуються в циклі. В частині I можна записувати кілька операторів розділених комою. Наприклад:
for ( int i=0,j=1; ...
int k,m;
for ( k=1,m=1; ...
Область дії змінних, оголошених в частині ініціалізації циклу – даний цикл.
Вираз – логічний вираз визначає умову виконання циклу. true – цикл виконується, в противному випадку (false) цикл не виконується. Цикл з параметром реалізований як цикл з передумовою. Наведемо приклад:
for ( int i=1; i<n; ...
Тут логічний вираз - i<n. Цикл буде виконуватись до тих пір, поки i залишається меншим n.
Модифікація – виконується після кожної ітерації циклу, і служить для зміни параметра циклу. Доповнимо попередній приклад частиною модифікації:
for ( int i=1; i<n; i=i+1) ...
Тут модифікація - вираз i=i+1. Він модифікує, тобто змінює i. У даному випадку в кожному наступному циклі i збільшується на 1. i=i+1 можна замінити на операцію інкремента i++.
В частині модифікації можна записувати кілька операторів через кому. Наприклад:
for ( int i=0,j=0; i<n; i++,j++) ...
Оператор – це тіло циклу. якщо тіло циклу це кілька операторів, то вони заключаються у блок { ...}.
Наведемо приклад обчислення суми чисел від 1 до n:
int s=0;
for ( int i=1; i<=n; i++) s=s+i;
У даному прикладі простий оператор присвоєння s=s+i; можна замінити на складний оператор присвоєння s+=i;.
Будь-яка частина оператора for може бути опущена, але ; потрібно залишити. Так у наведеному прикладі модифікацію, тобто інкремент, можна перенести у оператор. І тоді наведений фрагмент програми буде виглядіти так:
int s=0;
for ( int i=1; i<=n; ) s+=i++;
Таким чином, до оператора складного присвоєння ”причеплений” інкремент, а частина модифікації відсутня. Побудовану конструкцію s+=i++ можна перенести на місце модифікації:
int s=0;
for ( int i=1; i<=n; s+=i++) ;
Тепер у нас відсутній оператор.
Ініціалізацію також можна винести з оператора for наперед, і тоді фрагмент програми буде мати вид:
int s=0,i=1;
for ( ; i<=n; ) s+=i++;
Така зміна не є оптимальною, оскільки опис і ініціалізацію змінної, згідно стилю С++, потрібно по максимуму наближати до місця її використання. Змінна i використовується тільки всередині оператора for, і тому доцільно її всередині оператора for описати та ініціалізувати.
Приклад 1. Обчислити суму чисел від 1 до n:
Остаточний текст програми, фрагмен до якої наводились вище:
#include <iostream>
using namespace std;
Void main()
{
int n;
cout << "n="; cin >> n;
int s=0;
for (int i=1; i<=n; i++) s+=i;
cout << " s=" << s << endl;
}
Не дивлячись на широкі можливості мови С++, наведений текст програми є найбільш оптимальним. В ньому враховані як можливості мови, так і прийнятий стиль програмування в С++.
Приклад 2. Обчислити n!
По постановці дана задача подібна до попередньої. Тоді для її розв’язання можна запропонувати наступну програму:
#include <iostream>
using namespace std;