Завдання на лабораторну роботу

Теоретичні основи

Загальні положення

У більшості мов програмування оператор for називають оператором циклу з параметром, маючи на увазі те, що його використання рекомендуєть­ся в тих випадках, коли тіло циклу необхідно виконувати для послідовних значень деякої змінної якого-небудь дискретного типу, що є параметром ци­клу. Цей варіант використання даного оператора типовий і для мови C++, хо­ча в C++ цикл for має значно більше можливостей і фактично є ще одним оператором циклу із передумовою, що може повністю замінювати оператор while.

Особливості оператора for

Формат циклу for у загальному випадку можна записати у такий спосіб:

for (ініціалізація_циклу; вираз_умова; список_виразів)
тіло_циклу

Тут ініціалізація_циклу – послідовність виразів, поді­люваних комами, або опис декількох змінних одного типу з можливою їх ініціалізацією;

вираз_умова – скалярний вираз, що визначає умову продовження вико­нання тіла циклу (аналогічний тому, що записується в заголовку циклу while);

список_виразів – поділювані комами вирази, значення яких обчислюють­ся на кожному кроці циклу після виконання операторів тіла_циклу і перед на­ступним обчисленням значення виразу_умови;

тіло_циклу – простий оператор (у тому числі порожній), складений опе­ратор або блок.

У першій секції заголовка циклу for можна або записати один чи декілька виразів зі змінними, оголошеними раніше, або здійснити опис однієї чи декількох змінних. Таким чином, правильними є такі заголовки циклу for:

for (double x = 7.5; x <= 20; x += 0.5)
for (int i = 0, j, k = 7; i + k <= 15; i++)

Після операторів опису змінних

double h = 0.1, b = 20, x;
int i;

можливий такий заголовок циклу for:

for (i = 0, x = b / 2; x < b; x += h)

У той же час наступний заголовок циклу for компілюватиметься з помилками:

for (int i = 0, double x = 0.5; i < 10; i++)

Помилковим буде і такий фрагмент програми:

int i;
for (i = 0, double x = 0.5; i < 10; i++)

Особливості виконання циклу for:

Ø при вході в цикл у першу чергу обчислюються всі вирази, що вхо­дять у секцію ініціалізація_циклу, причому це робиться тільки один раз (най­частіше в цій секції заголовка циклу for установлюються по­чаткові значення параметрів циклу та різних лічильників);

Ø далі обчислюється значення виразу_умови і у випадку його істиннос­ті виконується тіло_циклу, після чого обчислюються значення виразів з третьої секції заголовка циклу і здійснюється повернення до обробки його другої секції.

Усередині тіла циклу можуть бути присутнім оператори break та continue, дія яких аналогічна їхній дії в операторах while та do … while.

У різних версіях мови C++ сфера дії описів, записаних у першій секції за­головка оператора for, може бути різною. Так, у VC++ вона розпов­сюджується тільки на заголовок циклу і його тіло. Тому в VC++, на­приклад, оператор

for (int s = 0, i = 1; i <= 10; i++)
s += i;

забезпечить правильне обчислення суми перших 10 натуральних чисел, але ця сума виявиться недоступною поза цим оператором, оскільки змінна s, використовувана для обчислення суми, у цій версії мови неві­дома поза циклом.

Будь-яка з секцій заголовка (у тому числі й всі три) може бути опу­щена, однак у випадку відсутності якої-небудь із них наступний за нею символ «крапка з комою» повинен бути збережений. Зокрема, відсутність виразу_умови позначає нескінченний цикл, з якого можливий тільки приму­со­вий вихід. Отже, припустимим є навіть такий оператор:

for ( ; ;) ; // Нескінченний цикл

У кожному з наступних шести рядків програмного коду оператор for використовується для організації обчислення суми перших 10 натуральних чисел:

int s = 0; for (int i = 1; i <= 10; i++ ) s += i;
int s = 0; for (int i = 1; i <= 10; i++, s += i);
int s = 0; for (int i = 1; i <= 10; s += i++);
int s = 0; for (int i = 1; i <= 10; ) s += i++;
int s = 0, i = 1; for ( ; i <= 10; ) s += i++;
int s = 0, i = 0; for ( ; ++i <= 10; ) s += i;

Щоб цикл for не виявився нескінченним, необхідно забезпечити змі­нення значення хоча б однієї змінної, що присутня у виразі_умові. Це змінення може бути здійснено або при обчисленні безпосередньо виразу_умови (див. вище шостий приклад), або при виконанні операторів тіла_циклу (див. вище чет­вертий і п’ятий приклади), або при обчисленні виразів зі списку третьої секції заго­ловка (див. вище перші три приклади).

Якщо вираз_умова не змінює своє значення, то цикл буде нескінченним. Наприклад, задача підсумовування перших 10 натуральних чисел може бу­ти розв’язана так:

int s = 0, i = 1;
for ( ; 1; )
{
s += i++;
if (i == 11)
break;
}

Як й інші оператори циклу, оператор for допускає довільну кількість рівнів вкладеності, причому дозволяється комбінування будь-яких операторів циклу. Типовою помилкою при використанні вкладених операторів for є використання однієї й тієї ж змінної для організації зовнішнього та внутріш­нього циклів. Наприклад, фрагмент програми, аналогічний наведеному ниж­че фрагменту, будучи синтаксично правильним, практично завжди є помил­ковим:

int i;
for (i = 1; i <= 10; i++)
{
// ...
for (i = 0; i <= 25; i++)
{
// ...
}
// ...
}

Вкладені оператори for, в яких у секції ініціалізація_циклу описується та сама змінна, у багатьох випадках можуть бути виправдані, але вони в такому випадку погано сприймаються людиною. Мова йде про оператори наступно­го вигляду:

for (int i = 1; i <= 10; i++)
{
// ...
for (int i = 0; i <= 25; i++)
{
// ...
}
// ...
}

Конструкції подібного роду варто уникати в розроблюваних програмах.

Приклади програм

Приклад 1. Дано натуральне число n і послідовність дійсних чисел завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru . Обчислити

завдання на лабораторну роботу - student2.ru .

Розв’язок.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
double a, Sum;
int i, n;
cout << "Enter the number of sequence members: n = ";
cin >> n;
Sum = 0; // Початкове значення суми
for (i = 1; i <= n; i++) // Цикл уведення чисел та їх
{ // підсумовування
cout << "Enter member " << i << ": ";
cin >> a;
Sum += a;
}
cout << "The output is " << cos(Sum)<< endl;
cout << "Press any key";
_getch();
return 0;
}

Приклад 2. Дано натуральні числа m, n. Обчислити

завдання на лабораторну роботу - student2.ru .

Розв’язок.

#include <iostream>
#include <conio.h>

using namespace std;
int main()
{
int m, n;
int i, j, k;
double Sum, Sum_j;
cout << "m = ";
cin >> m;
cout << "n = ";
cin >> n;
k = 1; // Нульовий степінь числа -1
Sum = 0; // Початкове значення суми
for (i = 1; i <= m; i++) // Цикл обчислення
{ // загальної суми
Sum_j = 0; // Початкове значення внутрішньої суми
for (j = 1; j <= n; j++) // Цикл для обчислення
Sum_j += double(i) / (i + j); // внутрішньої суми
Sum += k * (i + 1) * Sum_j;
k = -k; // Наступний степінь числа -1
}
cout << "The sum is " << Sum << endl;
cout << "Press any key";
_getch();
return 0;
}

Завдання на лабораторну роботу

За час, відведений для виконання лабораторної роботи (2 академічні години), студент повинен:

1. Розробити алгоритм розв’язання задачі, запропонованої для програ­мування.

2. Здійснити програмну реалізацію розробленого алгоритму.

3. Здійснити налаштування програми, виправивши синтаксичні та ло­гічні помилки.

4. Підібрати тестові дані для перевірки програми, включаючи ви­нят­кові випадки.

5. Оформити звіт до лабораторної роботи.

6. Відповісти на контрольні запитання.

7. Здати викладачу працездатну програму з демонстрацією її робо­ти на декількох варіантах вихідних даних.

Варіанти задач

1. Дано натуральне число n. Обчислити

завдання на лабораторну роботу - student2.ru .

2. Дано дійсні числа x, a, натуральне число n. Обчислити значення наступного виразу:

завдання на лабораторну роботу - student2.ru .

3. Дано натуральне число n і дійсне число x. Обчислити значення виразу

завдання на лабораторну роботу - student2.ru .

4. Дано натуральне число n і дійсне число x. Обчислити значення такого виразу:

завдання на лабораторну роботу - student2.ru .

5. Дано натуральне число n і дійсне число x. Обчислити значення виразу

завдання на лабораторну роботу - student2.ru

6. Послідовність чисел Фібоначчі завдання на лабораторну роботу - student2.ru утворюється за законом завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru Дано ціле невід’ємне чис­ло завдання на лабораторну роботу - student2.ru . Одержати завдання на лабораторну роботу - student2.ru .

7. Дано ціле невід’ємне число n. Одержати послідовність завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru , утво­рену за законом

завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru ,

де завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , … – послідовність Фібоначчі: завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru

8. Дано натуральне число n, завдання на лабораторну роботу - student2.ru . Обчислити

завдання на лабораторну роботу - student2.ru .

9. Дано натуральне число n і дійсне число x. Обчислити

завдання на лабораторну роботу - student2.ru .

10. Нехай завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru Дано дійсні числа r, s і натуральне число n. Знайти значення

завдання на лабораторну роботу - student2.ru .

11. Нехай завдання на лабораторну роботу - student2.ru ; завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru Дано натуральне число n ( завдання на лабораторну роботу - student2.ru ). Знайти значення

завдання на лабораторну роботу - student2.ru .

12. Дано натуральні числа m, n. Одержати всі їх натуральні спільні кратні, менші mn.

13. Дано дійсне число a і натуральне число n. Обчислити

завдання на лабораторну роботу - student2.ru .

14. Дано натуральне число n і дійсне число x. Обчислити значення такого виразу:

завдання на лабораторну роботу - student2.ru .

15. Дано натуральне число n і дійсне число x. Обчислити значення наступного виразу:

завдання на лабораторну роботу - student2.ru .

16. Дано натуральне число n. Обчислити добуток перших n співмножників:

завдання на лабораторну роботу - student2.ru

17. Обчислити

завдання на лабораторну роботу - student2.ru ,

де завдання на лабораторну роботу - student2.ru завдання на лабораторну роботу - student2.ru

18. Дано натуральне число n і дійсні числа завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru . Ви­зна­чити завдання на лабораторну роботу - student2.ru .

19. Дано натуральне число n і послідовність дійсних чисел завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru . Знайти довжину найменшого відрізка числової осі, що містить всі числа цієї послідовності.

20. Дано натуральне число n. Одержати всі його натуральні дільники.

21. Дано натуральне число n і дійсні числа завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru . Чи вірно, що від’ємних членів у послідовності завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru мен­ше, ніж додатних?

22. Дано натуральне число n і дійсні числа завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru . У по­слідовності завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru визначити кількість сусідства двох чисел різного знака.

23. Дано натуральне число n і дійсні числа завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru . У по­слідовності завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru визначити кількість сусідства двох чисел одного знака таких, що модуль першого числа менше модуля другого числа.

24. Дано натуральне число n, дійсні числа завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru . Об­числити суму чисел завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru , які перевищують за величиною всі числа завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru .

25. Дано натуральне число n. Для виразу

завдання на лабораторну роботу - student2.ru

обчислити добуток перших n співмножників з тих, знаменники яких не кратні трьом.

26. Нехай здійснюється оцінювання результатів виступу спорт­сменів. Систе­ма оцінювання така. Якщо є n оцінок, то виключається найбільша з них (якщо їх декілька, то виключається тільки одна). Ана­логічно виключаєть­ся найменша з оцінок. Як підсумкова оцінка береться середнє арифме­тичне оцінок, що залишилися після виключення.

Дано натуральні числа n, завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru ( завдання на лабораторну роботу - student2.ru ). Вважаючи, що числа завдання на лабораторну роботу - student2.ru , завдання на лабораторну роботу - student2.ru , …, завдання на лабораторну роботу - student2.ru – це оцінки, виставлені суддями одному з учас­ників змагань, визначити його підсумкову оцінку.

27. Дано натуральне число n. Здійснити генерування n натуральних ви­­падкових чисел з інтервалу [0, 99] і виконати перевірку того, що кількість непарних чисел при цьому становить ( завдання на лабораторну роботу - student2.ru ) % від їхньої загальної кількості. Відповіддю повинне бути одне з повідомлень Yes і No.

28. Дано натуральне число n. Обчислити

а) завдання на лабораторну роботу - student2.ru ; б) завдання на лабораторну роботу - student2.ru ;
в) завдання на лабораторну роботу - student2.ru ; г) завдання на лабораторну роботу - student2.ru .

29. Дано дійсне число x і натуральне число n. Обчислити

а) завдання на лабораторну роботу - student2.ru ; б) завдання на лабораторну роботу - student2.ru ;
в) завдання на лабораторну роботу - student2.ru ; г) завдання на лабораторну роботу - student2.ru .

30. Дано натуральне число p. Вивести в порядку зростання всі укладені між 0 і 1 прості нескоротні дроби, знаменники яких не перевищують p.

5. Контрольні запитання

1. Як у загальному випадку записується оператор for? Охарактеризуйте призначення основних його складових частин.

2. У чому особливості виконання оператора for?

3. Коли використання оператора for є доцільним?

4. Чи може в операторі for бути опущена секція ініціалізація_циклу? При пози­тивній відповіді на запитання, поясніть особливості роботи оператора в цьому випадку.

5. Чи може в операторі for бути опущена секція ініціалізація_циклу? При пози­тивній відповіді на запитання, поясніть особливості роботи операто­ра в цьому випадку.

6. Чи може в операторі for бути опущена секція список_виразів? При пози­тивній відповіді на запитання, поясніть особливості роботи оператора в цьому випадку.

7. Чи може в операторі for бути опущено тіло_циклу? При позитивній від­повіді на запитання, поясніть особливості роботи оператора в цьому ви­падку.

8. Як в операторі for виконуються оператори break і continue?

9. Як організується нескінченний цикл за допомогою оператора for?

10. Чи можливе використання вкладених операторів for?

11. Знайдіть помилку в наведеному нижче фрагменті програми:

int s = 0, i = 0;
for ( ; ++i <= 10; );
s += i;

12. Знайдіть помилку в наведеному нижче фрагменті програми:

for (int sum = 0, c = 50; c < 10; c--)
sum += c;

13. Знайдіть помилку в наведеному нижче фрагменті програми:

for (int sum = 0, k = 11; k < 40; +k)
sum += k;

Список літератури

1. Страуструп, Б. Язык программирования Си++ : Второе издание / Б. Страуструп. – К. : ДиаСофт, 1993. – Ч. 1. – 264 с. ; Ч. 2. – 296 с.

2. Керниган, Б. Язык программирования Си / Б. Керниган, Д. Ритчи. – М. : Финансы и статистика, 1992. – 272 с.

3. Либерти, Джесс. Освой самостоятельно С++ за 21 день : учеб. пособ. / Джесс Либерти. – М. : Вильямс, 2001. – 816 с.

4. Подбельский, В. В. Программирование на языке Си / В. В. Подбельский, С. С. Фомин. – М. : Финансы и статистика, 1999. – 600 с.

5. Подбельский, В. В. Язык Си++ / В. В. Подбельский. – М. : Финансы и ста­тистика, 1999. – 560 с.

6. Савитч, Уолтер. Язык C++. Курс объектно-ориентиро­ван­ного програм­­мирования / Уолтер Савитч. – М. : Вильямс, 2001. – 704 с.

Навчальне видання

Методичні вказівки

до лабораторної роботи
«Керування процесом обчислень за до­помогою
оператора for у програмах мовою C++»

з курсу «Програмування» для студентів напряму 6.040302 – Інформатика
і курсу «Програмування та алгоритмічні мови» для студентів напряму
6.040303 – Системний аналіз

Укладачі: БЕЗМЕНОВ Микола Іванович,

БЕЗМЕНОВА Ольга Миколаївна

Відповідальний за випуск О. С. Куценко

Роботу до видання рекомендував О. В. Горелий

За авторською редакцією

План 2013 р., поз. 10/40–13

Підписано до друку __.__.2013 р. Формат 60´84 1/16. Папір офсетний.

Друк – ризографія. Гарнітура Таймс. Ум. друк. арк. _______.

Обл.-вид. арк. 0,8. Тираж 50 прим. Зам. №___ . Ціна договірна.

________________________________________________________

Видавничий центр НТУ «ХПІ».

Свідоцтво про державну реєстрацію ДК№ 116 від 10.07.2000 р.

61002, Харків, вул. Фрунзе, 21.

________________________________________________________

Друкарня НТУ «ХПІ»

61002, Харків, вул. Фрунзе, 21.

Наши рекомендации