1. Способи побудови циклічних обчислювальних процесів у програмах.

2. У комп'ютер вводитьсяNдійсних чисел. Скласти програму, що видає на екран середнє арифметичне значення набору.

Вступ

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

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

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

У організації циклу можна назвати такі этапы:

підготовка (ініціалізація) циклу (І);

виконання обчислень циклу (тіло циклу) (Т);

модифікація параметрів (М);

перевірка умови закінчення циклу (У).

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


У разі циклу з верхнім закінченням тіло циклу може не виконатися жодного разу, якщо відразу дотримується умова виходу.

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

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

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

Загальний вигляд циклу n разів

У загальному вигляді цикл n разів записується так:

нц число повторень раз

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

Число повторень – довільне ціле число.

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

Загальний вид циклу поки

У загальному вигляді цикл поки що записується так:

нц поки умова

| тіло циклу (послідовність команд)

Під час виконання циклу комп'ютер повторює такі дії:

а) перевіряє записану після службового слова поки що умову;

б) якщо умова не дотримується, виконання циклу завершується і комп'ютер починає виконувати команди, записані після кц. Якщо ж умова дотримується, комп'ютер виконує тіло циклу, знову перевіряє умову тощо.

Загальний вид циклу для

нц для i від i1 до i2

| тіло циклу (послідовність команд)

Тут i – ім'я величини цілого типу, i1, i2 – довільні цілі числа чи вирази із цілими значеннями. Тіло циклу послідовно виконується для i = i1, i = i1 + 1, i1 + 2, … i = i2.

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

Цикл n разів і цикл поки

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

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

Звідси зрозуміло, у яких випадках який цикл слід використати. Якщо на момент початку циклу кількість повторень відома, зручно скористатися циклом n разів. Якщо кількість повторень заздалегідь визначити не можна, необхідний цикл поки.

Наприклад, програма автоматичного управління має структуру, зображену на рис. 1. Модулі, що входять до циклу(а також модулі обробки переривань), з одним входом і одним виходом кожен зазвичай мають характерну особливість: модулі містять статичні змінні, яким присвоюється значення в поточному циклі, а аналіз цих змінних виконується в наступному циклі. Таким чином, згадані змінні характеризують стан модуля на кінець поточного або початок наступного циклу програми. Надалі розглядатимемо лише такі модулі циклічних програм і позначатимемо їх коротко МЦП.


Рис.1. Типова структура керуючої програми із нескінченним циклом.

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

2. Фрагменти модулів циклічних програм

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

Запропоновано метод незалежних фрагментів для синтезу структури модулів, що реалізують таблиці рішень. При цьому незалежним вважається такий фрагмент, який можна вставити будь-де послідовності фрагментів модуля. Незалежність розташування такого фрагмента обумовлена ​​тим, що аналізовані в ньому дані не формуються у зазначеній послідовності фрагментів, а дані, що формуються в незалежному фрагменті, не аналізуються в даній послідовності фрагментів. Тому незалежні фрагменти можуть виконуватися паралельно (псевдопаралельно). На рис. 2 показані можливі варіанти реалізації модуля із двома незалежними фрагментами. У разі “а” і “б” фрагменти переставлені місцями без спотворення істоти програми; у варіанті "в" фрагменти реалізуються паралельно.


Рис.2. Варіанти реалізації модуля із незалежними фрагментами:

а) та б) - послідовна реалізація,

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

Залежним фрагментом є такий, розташування якого залежить від розташування іншого (інших) фрагмента в модулі. Розрізнятимемо зверху- і знизу залежні фрагменти. Зверху-залежний фрагмент повинен бути розташований завжди нижче за деякий фрагмент, в якому формуються змінні, що використовуються в даному (залежному) фрагменті. Знизу-залежний фрагмент повинен розміщуватися завжди вище фрагмента, в якому використовуються змінні, що формуються в даному фрагменті. Два залежні фрагменти, один з яких є зверху залежним від другого, а другий знизу залежним від першого, називатимемо взаємно залежними фрагментами. Їх не можна міняти місцями та не можна реалізовувати паралельно. На рис. 3 наведено приклад модуля із взаємно залежними фрагментами. Між взаємно залежними фрагментами можуть бути інші, залежні чи залежні від них. Рис.3. Модуль із залежними фрагментами.

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

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

Лабораторна робота №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.

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

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

Процес, у якому один оператор чи група операторів виконуються багаторазово за різних значеннях аргументу, називається циклічним процесом. У 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)

У програмуванні ми часто стикаємося із завданнями, в яких зустрічаються повторювані процеси. Тому ми повинні знати та вміти користуватися таким поняттям як « циклічні обчислювальні процеси».

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

Що таке цикл у програмуванні?

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

З поняттям цикл ми зустрічаємося у програмуванні. У багатьох сферах нашого життя існують цикли.

Наприклад - кругообіг води в природі, це природний цикл у нашому житті.

А тепер розглянемо загальні правила та поняття, які використовуються в обчислювальних циклах.

Етапи циклічного процесу

У загальному випадку цикл має бути реалізований за 4 етапи:
  • 1 етап – підготовка циклу (ініціалізація).
    Завдання початкового значення параметру та змінної циклу.
    Параметр циклу- Ця величина, яка вважає число кроків циклу (число повторень циклу).
    Змінна циклу- Це величина, яка змінює своє значення на кожному етапі циклу.
    Ініціалізація– це завдання початкових значень параметра та змінної циклу.
  • 2 етап – тіло циклу.
    Це багаторазове повторення дія в циклі або обчислень за одним і тим самим математичним залежностям з різними значеннями змінних.
  • 3 етап – модифікація (зміна) циклу.
  • 4 етап – управління циклом.
    Це перевірка умови продовження чи початок циклу.
У pascal існує 3 оператори циклу, які можуть реалізувати будь-яку алгоритмічно – циклічну структуру :
  1. Оператор циклу із параметром
  2. Оператор циклу з передумовою
  3. Оператор циклу з постумовою
Детально їх ми розглянемо у наступних статтях.

Мета роботи:

Вивчити циклічні оператори 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.