Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Цикл з передумовою

 

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

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

Program summa2; { варіант з використанням циклу з передумовою }

var i, sum : integer;

Begin

sum := 0;

i := 1; { початкове значення параметра циклу }

While i <= 100 do { цикл з передумовою! }

Begin

sum := sum + i; { до суми додаємо чергове число }

inc (i); { рівнозначно запису i := i+1 }

End; { кінець циклу }

Write ('S = ',sum);

Readln;

End.

Розшифруємо нове словосполучення, яке і є початком циклу з передумовою:

While i <= 100 do

перекладається так:

поки і менше або рівне 100 виконувати

Це і є спосіб організації циклу з передумовою. У загальному випадку цикл з передумовою записується так:

whileзмінна – умова do

На алгоритмічній мові цикл з параметром організовуються наступним чином (в застосуванні до нашої задачі):

поки і <= 100

пц

Sum := Sum +i

i := i+1

кц

У машинному розумінні цикл розшифровуються так: поки для змінної і виконується задана умова виконувати наступні інструкції. В умовах поставленої нами задачі в приведеній вище програмі розуміється наступне: поки змінна і менша або рівна 100 виконувати операцію додавання до змінної Sum значення змінної і та збільшувати параметр і на 1.

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

Оскільки в даній задачі ми змінюємо змінну і на одиницю, то даний цикл також виконуються 100 разів, але порахувати кількість разів виконання циклу ми вже не можемо застосовуючи якусь конкретну формулу. В загальному випадку цикл з передумовою може:

n не виконуватись жодного разу;

n виконуватись скінчену кількість разів;

n бути “вічним”.

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

Знову пояснимо логіку машинного мислення при виконанні циклу з передумовою. До початку організації циклу ми присвоюємо значення 0 шуканій сумі і крім того, обов’язково задаємо значення параметра циклу – змінної і. Цикл починається з значення параметру рівного 1, ПЕОМ перевіряє, чи 1<=100, отримує результат “так”, виконує операцію циклу Sum := Sum +1, в результаті якої значення Sum = 1, збільшує значення параметра і на 1, і стає рівним 2. Знову перевіряється умова 2<=100, отримується результат “так”, виконується операція циклу Sum := Sum +2, в результаті якої значення Sum = 3, збільшується значення параметра і на 1, і стає рівним 3 і т.д. На 99 кроці значення Sum було 4950 і параметр і став 100, перевіряється чи 100<=100, отримується результат “так”, виконується операція циклу Sum := Sum +100, в результаті якої значення Sum = 5050, збільшується значення параметра і на 1, і стає рівним 101. Перевіряється чи 101<=100, отримується результат “ні” і цикл на цьому закінчується. Наступною виконується операція, що йде за циклом: надрукувати результат. Весь хід приведених “машинних роздумів” зручно привести в такій таблиці.

і і <= 100 дія S
     
так +1
так +2
так +3
так +4
... ... ... ...
       
так +99
так +100
ні

На відміну від циклу з параметром у циклі з передумовою необхідно практично завжди ставити операторні дужки Begin ... End.

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

Задача 74. Знайти найбільший спільний дільник (НСД) двох чисел.

Розв’язання: Використаємо для розв’язання цієї задачі класичний спосіб великого математика минуло – так званий алгоритм Евкліда. Запропонований ним спосіб знаходження НСД двох чисел можна словесно сформулювати так: доки дві змінні різні, то від більшої змінної віднімай меншу і результат занось у меншу. Якщо ж змінні стали однаковими, то це і є НСД початкових двох чисел. Погодьтесь, що все геніальне – просте! Що ж реалізуємо програмно алгоритм Евкліда:

program nsd;

var a, b, a1, b1 : integer;

begin

write(’Введіть перше число: ’); readln(a);

write(’Введіть друге число: ’); readln(b);

a1 := a; b1 := b; {Зберегли початкові значення змінних }

while a1 <> b1 do { поки а1 № b1 то }

if a1 > b1 then a1 := a1 - b1 { якщо більше а1 то а1=а1–b1 }

else b1 := b1 - a1; { інакше b1 = b1 – a1 }

writeln(’НСД чисел ’,a,’ та ’,b,’ = ’,a1);

readln

end.

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

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

Знову робимо підсумки. Отже, для циклів з передумовою необхідно запам’ятати, що:


Читайте також:

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




Переглядів: 1133

<== попередня сторінка | наступна сторінка ==>
Цикл з параметром виконується строгу, наперед задану кількість разів | Цикл з передумовою може виконуватись яку завгодно кількість разів.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.004 сек.