Програмування циклічних процесів. Циклічні обчислювальні процеси Програмування циклічних обчислювальних процесів у access

Мета роботи:

Вивчити циклічні оператори for, while, do – while, навчитися складати та програмувати циклічні алгоритми.

Короткі теоретичні відомості

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

Оператор циклу for

Основна форма оператора циклу має вигляд

for (вираз_1; вираз_2; вираз_3)

оператор;

де вираз_1- Початкове значення параметра циклу;

вираз_2- Перевірка умови на продовження циклу;

вираз_3- Зміна параметра циклу (корекція);

оператор- Простий або складовий оператор мови С.

Схема роботи оператора наступна: лише один раз спочатку обчислюється вираз_1, потім перевіряється вираз_2, і якщо воно - «істина», то виконується циклічна ділянка програми, потім проводиться корекція параметра, і так доти, поки вираз_2 не набуде значення «брехня».

Наприклад: for (k=1; k<5; k++)

printf(“\n%d”, k);

Внаслідок виконання цього оператора друкуються у стовпчик цифри від 1 до 4.

Як параметр циклу можна використовувати змінну будь-якого базового типу.

Наприклад:

for(ch='a'; ch<=’z’; ch++) // Вывод на экран букв

printf(“%c”,ch); // Латинський алфавіт

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

Наприклад:

for(k=10; k>6;k++)

printf(“нескінченний цикл \n”);

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

За додатковою умовою;

Використовуючи такі оператори:

break;- вихід із циклу, в якому знаходиться break, управління передається на перший після циклу виконуваний оператор;

exit(int Kod);- вихід із програми;

return;- вихід із функції;

За допомогою оператора безумовного переходу goto<метка>;

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

Передавати керування ззовні всередину циклу забороняється.

Будь-який вираз циклу for у круглих дужках може бути відсутній, але символ «;» опускати не можна.

Наприклад:

for(; i<3; i++)

puts(“Hello!”);

Циклічні оператори while та do–while

Основна форма циклічного оператора while:

While (умова)

оператор;

де оператор

Цикл виконується до того часу, поки умова набуває значення «істина», тобто. вираз у дужках повертає ненульовий результат. Це цикл із передумовою – спочатку перевіряється умова, потім виконується оператор. Тому цикл while не виконається жодного разу, якщо спочатку результат обчислення умови дорівнюватиме 0.

Основна форма оператора do – while:

оператор;

while (умова);

де оператор– це простий, складений чи порожній оператор.

Оператор dowhile- Оператор циклу з постумовою, тобто. спочатку виконується оператор, а потім перевіряється умова істинності. Оскільки циклі do–while умова перевіряється наприкінці циклу, цикл буде виконано хоча б один раз.

У циклах типу while і do–while допустимі самі способи дострокового виходу з циклу і дострокове завершення поточного кроку циклу, як й у операторі for, але у разі на відміну циклу for управління передається на перевірку умови. Для запобігання безкінечному циклу всередині циклів while і do–while потрібно передбачити зміну змінних, що входять до умови.

Наприклад:

for (i=1;i<=300;i++) // Печать целых чисел, кратных 5

if (i%5!=0) continue;

printf("%5d",i);

Приклади нескінченних циклів:

оператор;

2) while (число_не_0) // Завжди істинно!

оператор;

оператор;

while(число_не_0); // Завжди істинно!

Серед операторів циклу обов'язково має бути умова виходу.

Вкладені цикли

У разі вкладених циклів один цикл знаходиться всередині іншого, наприклад:

for(i=nn;i

for(j=mn;j

оператор;

де оператор– це простий, складовий чи порожній оператор. Внутрішній цикл виконуватиметься для кожного значення параметра i, що відповідає умові зовнішнього циклу.

Приклад:

for(i=1;i<10;i++) // Печать таблицы умножения

for(j=1;j<4;j++)

printf(“\n %d*%d=%2d”, i, j, i*j);

printf(“\n”);

Приклад використання оператора for

Обчислити. На друк програма повинна виводити проміжні та остаточні результати.

Текст програми може мати вигляд

#include

#include

puts(“Введіть N”);

scanf(“%d”,&N);

for (s=0, k=1; k<=N; k++) // В заголовке цикла можно выпол-

( // няти і подвійне присвоєння

printf("\nk=%ds=%f", k,s);

printf("\n ВІДПОВІДЬ: s=%f, Press any key...",s);

Варіанти індивідуальних завдань

Скласти програму визначення таблиці значень функції уу довільному діапазоні [ a,b] зміни аргументу хз довільним кроком h. Значення a, b, hвводяться з клавіатури. Таблиця має містити такі стовпці: порядковий номер, значення аргументу x, значення функції, повідомлення про зростання або зменшення функції, різницю двох сусідніх значень функції.

Визначити максимальне та мінімальне значення функції.

1. a=-p; b = p; h = 0,4.

2. a=0,7; b = 1,8; h = 0,1.

3. a=-0,5; b = 2,5; h = 0,2.

4. a=-0,9; b = 2,7; h = 0,3.

5. a=-2; b = 0,8; h = 0,2.

6. a=-1,9; b = 2,7; h = 0,3.

7. a = -0,4 p; b = 0,4 p; h = 0,5.

8. a=-0,3p; b = 1,3p; h = p/10.

9. a=-p/2; b = p/2; h=p/10.

10. a=-3; b = 3; h = 0,5.

Лабораторна робота №2

"Програмування циклічних обчислювальних процесів"

Мета роботи

Вивчення операторів циклу у мові С++.

Теоретична частина

Цикл- Різновид керуючої конструкції у високорівневих мовах програмування, призначений для організації багаторазового виконання набору інструкцій. Також циклом може називатися будь-яка послідовність інструкцій, що багаторазово виконується, організована будь-яким способом.

Набір інструкцій, призначений для багаторазового виконання, називається тілом циклу . Одноразове виконання тіла циклу називається ітерацією . Вираз визначальний, в черговий раз виконуватиметься ітерація, або цикл завершиться, називається умовою виходу або умовою закінчення циклу. Змінна, що зберігає поточний номер ітерації, називається лічильником ітерацій циклу чи просто лічильником циклу. Цикл не обов'язково містить лічильник, лічильник може бути не один - умова виходу з циклу може залежати від кількох змінних, що змінюються в циклі.

Виконання будь-якого циклу включає початкову ініціалізацію змінних циклу, перевірку умови виходу, виконання тіла циклу та оновлення змінної циклу на кожній ітерації. Крім того, більшість мов програмування надають засоби для дострокового керування циклом, наприклад, оператори завершення циклу, тобто виходу з циклу незалежно від істинності умови виходу (у мові Сі - break) та оператори пропуску ітерації (у мові Сі - continue).

Розрізняють такі види циклів.


1. Безумовні цикли.Цикли , вихід із яких не передбачений логікою програми. Спеціальних синтаксичних засобів для створення нескінченних циклів, зважаючи на їх нетиповість, мови програмування не передбачають, тому такі цикли створюються за допомогою конструкцій, призначених для створення звичайних (або умовних) циклів. Наприклад, У мові С використовується цикл for(;;)із незаповненими секціями.

2. Умовні цикли.Це цикли, виконання яких керується деякою умовою, що перевіряється на початку або в кінці тіла циклу. Відповідно, умовні цикли бувають з передумовою та з постумовою. Цикл з передумовою - цикл, який виконується поки що істинно деяка умова, вказана перед його початком. Ця умова перевіряється довиконання тіла циклу, тому тіло може бути не виконано жодного разу (якщо умова від початку помилкова). У більшості процедурних мов програмування реалізується оператором while, Звідси його друга назва - while цикл. На мові С++ такий цикл має вигляд:

while(<условие>)

<тело цикла>

Цикл із постумовою -цикл, у якому умова перевіряється післявиконання тіла циклу. Звідси випливає, що цикл завжди виконується хоча б один раз. У мові Паскаль цей цикл реалізує оператор repeat..until, в Сі - do…while, наприклад:

<тело цикла>

while(<условие продолжения цикла>);

У різних мовах використання умови циклу з постумовою є деякі відмінності. У Паскалі та мовах, що походять від нього, умова такого циклу трактується як умова виходу- цикл завершується, коли умова є істинною. У Сі - як умова продовження(цикл завершується, коли умова хибна, такі цикли іноді називають цикл поки).

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

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

Цикл із лічильником - цикл, у якому деяка змінна змінює своє значення від заданого початкового значення до кінцевого значення з деяким кроком, і для кожного значення цієї змінної тіло циклу виконується один раз. У більшості процедурних мов програмування реалізується оператором for, в якому вказується лічильник (так звана «змінна циклу»), необхідна кількість проходів (або граничне значення лічильника) і, можливо, крок, з яким змінюється лічильник.

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


for (i = 0; i< 10; ++i)

Тіло циклу

фактично є іншою формою запису конструкції:

while (i< 10)

Тіло циклу

Тобто в конструкції for спочатку пишеться довільна пропозиція ініціалізації циклу, потім - умова продовження і, нарешті, деяка операція, що виконується після кожного тіла циклу (це не обов'язково має бути зміна лічильника; це може бути правка покажчика або якась зовсім стороння операція). Для мов такого виду вищеописана проблема вирішується дуже просто: змінна-лічильник поводиться абсолютно передбачувано і по завершенні циклу зберігає своє останнє значення.

Організація циклів у мові Сі++

1. Цикл for.

Цикл з використанням оператора for зручно використовувати, коли потрібне число ітерацій заздалегідь відомо. Синтаксис цього оператора має вигляд:

for (дія до початку циклу;

умова продовження циклу;

дії наприкінці кожної ітерації циклу) (

інструкція циклу;

інструкція циклу 2;

інструкція циклу N;

Існує окремий випадок цього запису (з лічильником):

for (лічильник = значення; лічильник< значение; шаг цикла)

тіло циклу;

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

Приклад: підрахунок суми всіх числа від 1 до 1000.

#include

using namespace std;

int i; // лічильник циклу

int sum = 0; / / Сума чисел від 1 до 1000.

setlocale(0, "");

for (i = 1; i<= 1000; i++) // задаем начальное значение 1, конечное 1000 и задаем шаг цикла - 1.

cout<< "Сумма чисел от 1 до 1000 = " << sum << endl;

2. Цикл while.

Організацію циклів whileабо do...whileзручно використовувати, коли необхідна кількість ітерацій наперед невідома. Синтаксис циклу while C++ виглядає наступним чином.

while (Умова) (

Тіло циклу;

Цей цикл буде виконуватися, поки умова, вказана в круглих дужках, є істинною. Приклад реалізації підсумовування чисел від 1 до 1000 за допомогою циклу while:

#include

using namespace std;

setlocale(0, "");

while (i< 1000)

cout<< "Сумма чисел от 1 до 1000 = " << sum << endl;

3. Цикл do while

Цикл do whileвідрізняється від whileтим, що з його виконанні циклу один прохід циклу буде виконаний незалежно від умови. Програма для вирішення задачі на пошук суми чисел від 1 до 1000 із застосуванням циклу do while:

#include

using namespace std;

setlocale(0, "");

int i = 0; // ініціалізуємо лічильник циклу.

int sum = 0; // ініціалізуємо лічильник суми.

do (// виконуємо цикл.

) while (i< 1000); // пока выполняется условие.

cout<< "Сумма чисел от 1 до 1000 = " << sum << endl;

1. Розробити програму мовою С++ на вирішення завдання, відповідної обраному варианту.

2. Ввести, налагодити та відкомпілювати програму. Перевірити правильність її роботи.

1. Блок-схема алгоритму програми.

2. Лістинг програми з коментарями.

3. Результати контрольних прогонів.

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

1. Дайте визначення циклу, тіла циклу, ітерації.

2. Що така умова виходу із циклу, лічильник ітерацій?

3. Які етапи включає виконання будь-якого циклу?

4. Як працює цикл із постумовою?

5. Як працює цикл із передумовою?

6. Як працює цикл із лічильником?

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

8. Як реалізується цикл з допомогою оператора while?

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

1. Вивести на екран наступну послідовність символів

2. Вводиться послідовність цілих чисел (0 – кінець послідовності), знайти різницю між найменшим серед позитивних та найбільшим серед негативних чисел.

3. Вводиться послідовність N цілих чисел, знайти різницю між добутком непарних чисел і найбільшим серед негативних чисел.

4. Вводиться послідовність цілих чисел, 0 – кінець послідовності. Визначити, чи послідовність містить хоча б два числа, кратних 3, 5 і 7.

5. Вводиться послідовність N цілих чисел. Визначити найбільше серед кратних 11.

6. Вводиться послідовність цілих чисел, 0 – кінець послідовності. Визначити, чи містить послідовність хоча б три негативні парні числа.

7. Вводиться послідовність N речовинних чисел. Визначити найменше число серед чисел більших 20.

8. Вводиться послідовність цілих чисел, 0 – кінець послідовності. Обчислити кількість позитивних чисел, кратних 7 і кратних 5, і суму негативних елементів послідовності.

9. Вводиться послідовність N речовинних чисел. Визначити середнє арифметичне серед елементів послідовності, кратних 7.

10. Вводиться послідовність чисел, 0 – кінець послідовності. Визначити чи є послідовність строго спадаючою.

12. Вводиться послідовність цілих чисел, 0 – кінець послідовності. Визначити, чи містить послідовність хоча б два позитивних числа, що стоять поруч.

13. Вводиться послідовність N речовинних чисел. Визначити, чи є послідовність знакочередної.

14. Вводиться послідовність N речовинних чисел. Визначити різницю між мінімальним позитивним та максимальним негативним елементами послідовності.

15. Знайти останні три числа кратні чотирьом у діапазоні від 1 до N. Обчислити суму цих чисел.

16. Вивести на екран наступну послідовність символів

18. Обчислити добуток останніх трьох чисел кратних 5 в діапазоні від N1 до N2.

19. Обчислити середнє арифметичне парних чисел, неразових чотирьом у діапазоні від 1 до K.

Натиснувши на кнопку "Завантажити архів", ви завантажуєте потрібний вам файл безкоштовно.
Перед скачуванням даного файлу згадайте про ті хороші реферати, контрольні, курсові, дипломні роботи, статті та інші документи, які лежать незатребуваними у вашому комп'ютері. Це ваша праця, вона повинна брати участь у розвитку суспільства та приносити користь людям. Знайдіть ці роботи та відправте в базу знань.
Ми та всі студенти, аспіранти, молоді вчені, які використовують базу знань у своєму навчанні та роботі, будемо вам дуже вдячні.

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

Подібні документи

    Складання звітної відомості Магазини в Excel 2013. Робота з таблицями сімейства Microsoft Office. Побудова кругової діаграми та гістограми, графіків. Розробка процедур для табулювання функцій. Програмування функцій користувача VBA.

    курсова робота , доданий 03.04.2014

    Microsoft Office пакет. електронна таблиця MS Excel. Створення екранної форми та введення даних. Формули та функції. Пояснення функцій користувача MS Excel. Фізична постановка задач. Завдання граничних умов допустимих значень змінних.

    курсова робота , доданий 07.06.2015

    Особливості використання інтегрованих функцій Microsoft Excel. Створення таблиць, їх наповнення даними, побудова графіків. Застосування математичних формул для виконання запитів за допомогою пакетів прикладних програм. Технічні вимоги до комп'ютера.

    курсова робота , доданий 25.04.2013

    Організація файлів та доступ до них. Файлові операції. Програмування з використанням вбудованих функцій вводу-виводу; лінійних, розгалужуваних та циклічних обчислювальних процесів з використанням If-else, оператора вибору Case; масивів та матриць.

    курсова робота , доданий 24.05.2014

    Процесор електронних таблиць Microsoft Excel – прикладна програма, призначена для автоматизації процесу обробки економічної інформації, представленої у вигляді таблиць; застосування формул та функцій для виробництва розрахунків; побудова графіків.

    реферат, доданий 03.02.2013

    Програмування обчислювальних процесів мовою FORTRAN задля забезпечення взаємодії системи " Людина-Виробництво-Природа". Використання масивів для складання циклів підрахунку рівня екологічного забруднення, витрат на переробку відходів.

    курсова робота , доданий 30.05.2014

    Створення додатку, який буде виробляти побудова графіків функцій за заданим математичним виразом. Розробка програми "Генератор математичних функцій". Створення майстра функцій для введення математичного вираження, тестування.

    дипломна робота , доданий 16.02.2016

У програмуванні часто зустрічаються завдання, що вимагають багаторазового виконання однієї й тієї групи операторів програми з різними значеннями їх операндов. Такі процеси називаються циклічнимиабо просто циклами.Група операторів, що циклічно повторюються, утворює так зване тіло циклу, Яке може бути представлене як простим, так і складовим виразом. Одноразове виконання тіла циклу називатимемо ітерацією.

Тілу циклу у програмі завжди передує заголовок циклу, що містить позначення оператора циклуі вираз, що визначає (прямо чи опосередковано) кількість ітерацій. Зауважимо, що тіло циклу є операндом оператора циклу, отже, заголовок і тіло циклу становлять неподільну структурну одиницю програми. Надалі, використовуючи термін " оператор циклу", Маємо на увазі і заголовок, і тіло циклу.

Для організації циклів у всіх системах програмування існують спеціалізовані оператори циклів, Застосування яких позбавляє програміста необхідності програмувати цикли "вручну". MathCAD підтримує два види таких операторів – цикл із приреченням For (званий також циклом із лічильником) та цикл із передумовою While . Опис структури цих операторів наведено у таблиці 5.

5.4.1 Оператор For

Цей оператор слід використовувати у випадках, коли кількість ітерацій зумовлено, тобто відомо заздалегідь.

Заголовок циклуцього оператора (правий операнд) містить змінну, звану параметром(або лічильником) циклу, і список значеньцього параметра. Число елементів списку визначає і кількість ітерацій – при виконанні кожної ітерації параметр циклу набуває чергового значення зі списку, заданого в заголовку.

Параметр циклумає статус внутрішньої змінної програми та має всі її властивості (описані в параграфі 5.1.4). Як правило, параметр циклу використовується у правій частині виразів, що входять до складу тіла циклу, хоча формально і не заборонено використання його в лівій частині виразів (тобто зліва від оператора локального визначення "f"). При цьому слід пам'ятати, що якщо параметр був змінений у тілі циклу, його змінене значення буде діяти лише до кінця поточної ітерації, оскільки перед початком наступної ітерації параметр все одно отримає чергове значення зі списку, вказаного в заголовку циклу.

Формально допускається взагалі використовувати параметр циклу у виразах тіла циклу – у разі список значень параметра грає жодної ролі - істотна лише довжина цього списку, визначальна кількість (можливо безглуздих) ітерацій.

Після завершення останньої ітерації виконуватиметься оператор програми, наступний після оператора циклу. При цьому змінна, використана як параметр завершеного циклу, зберігає значення, яке вона мала в останній реально виконанійітерації [*]. Зауважимо, що це значення не завжди збігається з останнім значенням зі списку, заданого в заголовку циклу, оскільки можливий "достроковий" вихід із циклу при спрацюванні оператора Break включеного в тіло циклу.

Список значеньпараметр циклу записується в заголовку циклу після символу " Î ", що позначає приналежність множині (цей символ не потрібно вводити "вручну" – він буде автоматично відображений при введенні оператора") For ). MathCAD допускає використання трьох формзапису цього списку: пряме перерахування- Елементи списку явно вказуються через кому, параметр отримує значення зі списку в порядку їх прямування; у стилі ранжованої змінної –елементи списку утворюють відповідний арифметичний ряд; масив- Елементи списку послідовно отримують значення елементів масиву в порядку прямування їх індексів (спочатку - стовпці зліва направо, потім - рядки зверху вниз).

Три програми, наведені малюнку 21, ілюструють різні варіанти використання оператора For .

Програма Fact(n) обчислює факторіал числа n . Оператор циклу в цій програмі входить до складу складового виразу, який, своєю чергою, є операндом умовного оператора Otherwise. Параметр циклу k отримує значення з цілого арифметичного ряду.

Програма Ch(V,N,p) обробляє вхідний вектор V , замінюючи у ньому значення p елементи, індекси яких задані елементами другого вхідного вектора N . У цьому прикладі перелік значень параметра циклу i заданий безліччю елементів вектора N . Зауважимо, що ці програми здійснюють вхідний контроль даних і блокують виконання основного алгоритму у разі, якщо фактичні аргументи програми задані некоректно.

Програма L(M,z) , наведена у прикладі в ), супроводжується докладними коментарями та не вимагає пояснень. Ця програма ілюструє можливість використання кількох операторів циклу, один із яких включений до числа операторів тілаіншого. Використання вкладених циклів- Типовий прийом, що використовується для обробки багатовимірних масивів.

Рисунок 21 – Приклади програмування циклів For


Малюнок 22 ілюструє використання операторів Break і Continue у тілі циклу. Як правило, ці оператори самі є операндами умовних операторів. If або Otherwise .

Оператор Break ("перервати") перериваєвиконання циклу та передає управління оператору, наступному після перерваного оператора циклу. Зауважимо, що якщо оператором Break перерваний вкладений цикл, виконання зовнішнього циклу буде продовжено.

Оператор Continue ("продовжити") діє інакше - він перериває лише поточну ітерацію циклуі передає керування заголовку цього циклу, після чого виконання циклу продовжуєтьсяз наступної ітерації (якщо, звісно, ​​перервана ітерація була останньої).

Оператор Break допускається використовувати та позатіла циклу. У цьому випадку переривається виконання всієї підпрограми, і повертається результат обчислення останнього фактично виконаного виразу.

Рисунок 22 – Приклади використання операторів Break і Continue

Функція SumN(V) підсумовує ті елементи вектора, які містять скалярні дані числового типу, а інші елементи пропускаються. Функція Inverse(V) формує вектор, елементи якого значення, зворотні значенням відповідних елементів вихідного вектора. При цьому якщо черговий елемент містить число "0" або не є скаляром числового типу, цикл переривається. Зауважимо, що оператор Break в останньому прикладі не перериває роботи програми, а передає управління оператору Return , наступному безпосередньо після оператора For .

5.4.3 Оператор While

На відміну від оператора For , заголовок оператора While (в перекладі - " Бувай") не містить явних вказівок на кількість ітерацій - він містить логічний вираз, значення якого автоматично обчислюється перед початкомвиконання кожної чергової ітерації [†]. Поки цей вислів "істинно", ітерації циклу продовжуватимуться; як тільки після завершення чергової ітерації вираз стане "хибним", наступна ітерація циклу не буде виконана, і управління отримає оператор програми, наступний після оператора While .

Очевидно, що якщо в заголовок циклу помістити тотожно хибний логічний вираз, цей цикл не виконає жодної своєї ітерації, а якщо цей вираз тотожно істинний, цикл буде нескінченним (останню ситуацію називають зациклюваннямпрограми). Для того, щоб уникнути подібних ситуацій, до числа операндів логічного виразу повинні бути включені одна або більше змінних, що змінюють свої значення у тілі циклутаким чином, щоб цикл був кінцевим (для запобігання зацикленню можуть використовуватися й інші засоби – наприклад, примусовий вихід із циклу оператором Break ).

Приклади використання оператора While наведено на малюнку 23. Наведено три варіанти вирішення однієї і тієї ж задачі: кожна з програм F0 , F1 і F2 повертає індекс першого з елементів вихідного вектораV , що перевищує задане значенняz .

Перша програма (приклад а ) додає одиницю до лічильника k у тілі циклу While доки черговий k -й елемент вихідного вектора не перевищить заданого значення z . Після цього цикл завершується, і програма повертає останнє змінене значення змінної k , яке є рішенням задачі. Зазначимо, що на відміну від циклу For , лічильник k тут необхідно обробляти окремими операторами: ініціалізувати (тобто надавати йому початкове значення) перед оператором циклу та змінювати його значення в тілі циклу.

Неважко помітити, що варіант а ) програми має суттєвий недолік: він не запобігає зацикленню програми у разі, коли завдання не має рішення, тобто коли параметр z перевищує значення найбільшого елемента вектора V . У цьому прикладі зациклювання в такій ситуації реально не відбудеться – але це заслуга не нашої програми, а системи MathCAD, яка проконтролює вихід індексу вектора V за межі допустимих значень та видасть повідомлення про помилку.

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

Можливо, найбільш ефективним варіантом вирішення цього завдання є варіант в ), який взагалі не використовує оператор While . У цій програмі змінна k використана тільки для дотримання "чистоти стилю" – щоб унеможливити обробку параметра циклу i поза оператором For .

Рисунок 23 – Приклади програмування циклів While

ПРОГРАМУВАННЯ ЦИКЛІЧНИХ ВИЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

Основні відомості

Процес, у якому один оператор чи група операторів виконуються багаторазово за різних значеннях аргументу, називається циклічним процесом. У VBA для виконання дій, що повторюються використовуються оператори циклу, які бувають наступних типів:

оператор циклу з параметром For – Next , конструкція якого використовується, якщо заздалегідь відомо, скільки разів має повторитись тіло циклу:

For лічильник = початкове_значення Те кінцеве_значення Step крок блок_операторів

Next з чітчик

оператори циклу з передумовоюабо постумовою, що використовуються для організації циклу з невідомим заздалегідь числом повторень тіла циклу:

Конструкція циклу

Конструкція циклу

з передумовою має вигляд:

з постумовою має вигляд:

Do While умова

блок_операторів

блок_операторів

Loop While умова

Do Until умова

блок_операторів

блок_операторів

Loop Until умова

While умова

блок_операторів

Розробимо форму користувача і складемо програму для визначення індексу рентабельності запропонованого інвестиційного проекту оновлення обладнання, якщо сума початкових вкладень (ПВ) складає 10 000 тис. р., ставка дисконтування r = 10 %, а передбачувані грошові потоки:

Грошовий потік (ДПk B), B тис. н.

Нехай користувальницька форма матиме вигляд (рис. 1), а значення величин грошових потоків в 1-му - 5-х роках зчитуються з осередків робочого листа «Приклад 1» (рис. 2).

Властивості об'єктів форми представлені у таблиці 1.

Мал. 1. Форма «Індекс рентабельності

рентабельності

інвестиційного проекту»

розраховується за формулою

∑n

ДПk

ІР =

k = 1 (1+ r)

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

Мал. 2. Таблиця розподілу грошових потоків

Таблиця 1

Властивість

Властивість

Caption = Індекс рента-

Caption = Розмір первіс-

бельності інвестиційно-

них вкладень

го проекту

Caption = Ставка дисконтує-

Caption = Індекс рентабельності

Caption = Очистити

Caption = Вихід

Для обробки події натискання кнопки "Розрахувати" введемо наступний

Private Sub calc_Click()

'завдання типу змінних

Dim pv, dp, i, n As Integer

Dim r, s As Single

'зчитування значень змінних

pv = Val(txtPV.Text)

r = Val(txtSD.Text)/100

n = Val(InputBox("Введіть кількість років, протягом яких будуть

приходити

грошові

надходження ", "Введення даних"))

'зчитування значень грошових потоків

dp = Cells(2, i + 2)

'підсумовування

txtIR.Text = Round(s / pv, 2) 'округлення та виведення результату

Функція Round (N, k) округляє число N до знаків після коми.

Далі за допомогою елемента Кнопка панелі інструментів Елементи керуванняРозмістимо нижче таблиці кнопку "Відкрити форму" для запуску процедури "ФормаІндексРентабельності" (рис. 3). Код цієї процедури має вигляд:

Private Sub ФормаІндексРентабельності_Click ()

Мал. 3. Визначення індексу рентабельності інвестиційного проекту

За допомогою створеної кнопки «Відкрити форму» запустимо форму та розрахуємо індекс рентабельності інвестиційного проекту (рис. 3).

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

Для створення даної форми користувача перейдемо в редактор VB (залишимось у тій же робочій книзі MS Excel, що і в прикладі 1) і додамо ще одну форму (рис. 4).

Властивості об'єктів форми представлені у таблиці 2.

Для обробки подій натискання кнопок

наступний код:

Private Sub calc_Click()

Мал. 4. Форма для прикладу 2

Label2.Caption = ""

'визначення першої цифри двозначного числа

визначення другої цифри двозначного числа

If (i1^2+i2^2) Mod 13=0 Then Label2.Caption = Label2.Caption+Str(i)+" "

Private Sub clean_Click()

Label2.Caption = ""

Private Sub exitForm_Click()

Таблиця 2

Властивість

Caption = Приклад 2

Caption = Двозначні числа, сума

квадратів цифр яких поділяється на 13

TextAlign = 2-fmTextAlignCenter

Caption = “ ”

AutoSize = False

Властивість

Caption = Очистити

Caption = Вихід

На робочому аркуші «Приклад 2» розмістимо

кнопку «Відкрити форму» для виклику форми

"Приклад 2" і запустимо цю форму (рис.

Розробимо

користувальницький

інтерфейс

і складемо

програму для ви-

суми ряду:

чищення з точністю ε = 10P

k + 2

S = ∑

(− 1)

k = 1

Залишимось у тій самій робочій книзі Excel,

що і в прикладах 1 і 2. За допомогою інстру-

Мал. 5. Двозначні числа, сума квад-

ментів «Напис», «Поле» та «Кнопка» па-

рот цифр яких ділиться на 13

чи інструментів

Елементи

управління

Розмістимо на робочому аркуші «Приклад 3» відповідні об'єкти (рис. 6).

Властивості об'єктів аркуша Приклад 3 представлені в таблиці 3.

Таблиця 3

Властивість

Властивість

Caption = Сума ряду

Caption = Очистити

Для обробки подій натискання кнопок «Розрахувати» та «Очистити» введемо в модулі «Лист3(Приклад 3)» наступний програмний код:

eps = Val(InputBox("Задайте точність", "Введення даних"))

a = (-1) ^ (k + 2) / (f * 2 ^ k) s = s + a

Loop txtS.Text = s

Private Sub clean_Click() txtS.Text = ""

Тут тіло циклу Do While – Loop буде

виконуватися,

доданок

абсолютної

k + 2

n− 1

k + 2

n+ 2

величині (т.

(− 1)

−∑

(− 1)

(− 1)

) буде

Мал. 6. Обчислення суми

k = 1

k = 1

перевищувати задану точність 10 P

Перевіримо роботу програми (рис. 7).

Розробимо

користувальницьку

складемо програму на вирішення наступного завдання.

При аналізі господарської діяльності перед-

встановлена

наступна

закономірність: у січні 2004 р. прибуток даного

підприємства становила 573 тис. н. і протягом

наступних 5 років щомісячно збільшувалася на i %,

де i – номер місяця (тобто у лютому – на 2 %, у березні

- на 3% і т. д.), в порівнянні з сумою прибутку в

Мал. 7. Результат обчислення

попередньому місяці.

Визначити отримані перед-

суми ряду

прийняттям суми прибутку за 2004, 2005, …, 2008, а також загальну суму прибутку за ці 5 років.

Для створення даної форми користувача перейдемо в редактор VB (залишимось у тій же робочій книзі MS Excel, що і в прикладах 1–3) і додамо ще одну форму (рис. 8). Виведення обчислених значень прибутку підприємства здійснюватиметься як у полі об'єкта список (ListBox), розміщеного на формі, так і в осередку робочого листа «Приклад 4» (рис. 9).

Мал. 8. Форма «Прибуток підприємства» Мал. 9. Таблиця для прикладу 4

Властивості об'єктів форми представлені у таблиці 4.

Таблиця 4

Властивість

Властивість

Caption = Прибуток підприємства

Caption = Очистити

Caption = Вихід

Примітка. Властивість ColumnCount визначає кількість колонок об'єкта ListBox.

Для обробки подій натискання кнопок «Розрахувати», «Очистити» та «Ви-

хід» введемо наступний код:

Private Sub calc_Click() Dim i, j As Integer

Dim PrM, prG, sPr As Single

PrM = Val(InputBox("Введіть прибуток, отриманий у січні 2004 р.", "Введення даних"))

ListBox використовується метод AddItem, призначений для додавання елементів до списку

Ім'яСписку.AddItem Вираз , Індекс

де Вираз – елемент списку, який треба додати; Індекс – порядковий номер елемента списку (нумерація елементів списку починається з 0).

А властивість List (НомерРядки, НомерСтовпця) об'єкта ListBox повертає (привласнює) елемент списку, що стоїть на перетині вказаних рядків та стовпців.

На робочому аркуші «Приклад 4» розмістимо кнопку «Відкрити форму» для виклику форми «Прибуток підприємства» та запустимо цю форму (рис. 10).

Тепер можна додати до робочої книги MS Excel ще один лист з ім'ям «Зміст», на якому, наприклад, за допомогою інструмента Кнопка панелі інструментів Форми створимо чотири кнопки: «Індекс рентабельності», «Двозначні числа», «Сума ряду», «Прибуток підприємства».

У редакторі VB додамо новий модуль (Insert → Module), у якому введемо наступний код:

Public Sub ЛистПриклад1()

Worksheets("Приклад 1").Activate

ListPr.AddItem "Рік", 0

'завдання початкових підписів та даних

ListPr.List(0, 1) = "Прибуток, тис. р."

'цикл за роками

цикл по місяцях кожного року

If (i = 4) And (j = 1) Then

PrM = PrM * (1 + j / 100)