Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Різні форми оператора циклу з умовою




Вправа

Вкладені цикли, зовнішній цикл, внутрішній цикл.

1. Доповніть програму прикладу 7.7 (малювання шахівниці) друкуванням номерів клітинок — від 1 до 64, — так, як показано на мал. 7.6.

Мал7.6. Шахівниця з пронумерованими клітинками

Підказка: Номер клітинки варто виразити через значення лічильників обох циклів: j + (i - 1) * nj.

Вказівка: Щоб номери друкувалися всередині, а не зовні клітки, у методі Line варто поміняти місцями координати двох кутів зображуваного прямокутника.

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

Змінимо, наприклад, умову задачі приклада 7.1 — будемо не тільки знаходити квадрати натуральних чисел від 1 до 100, але і підсумовувати квадрати цих чисел, а результат підсумовування на кожнім кроці циклу привласнювати змінній Сума типу Integer. Чи буде обчислена сума всіх 100 доданків? (Таким було 1-е запитання наприкінці розд. 7.1.)

Відповідь на це питання негативна. Справа в тому, що максимальним значенням змінної типу Integer є число 32767 (див. розд. 3.1). Якщо ми встановимо число повторень рівне 100, на якомусь кроці циклу виникне помилка, викликана спробою привласнити змінній Сума значення, що перевищує число 32767. Ця спроба викликає появу на екрані попереджуючого повідомлення (мал. 7.7).

Мал. 7.7. Повідомлення про помилку Overflow — спробу привласнити змінній типу Integer занадто велике значення (Overflow— буквально: переповнення (англ.).).

Це неприємно, тому що наша програма «зависне» і необхідно буде перервати її роботу.

Чи можна уникнути цього? Один із способів полягає в застосуванні оператора On Error GoTo... (У випадку помилки перейти...). Подробиці про цей оператор — у розд. 7.6.

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

Цикл з умовою — це багаторядковий оператор, перший рядок якого починається з ключового слова Do (Виконати), а останній рядок починається з ключового слова Loop (Петля).

Синтаксис циклу з умовою має дві форми.

Форма 1:

Do УмоваПовторюваніОператори Loop

Форма 2:

Do ПовторюваніОператори Loop Умова

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

Умова буває двох типів:

· с ключовим словом While; у цьому випадку вона називається умовою продовження циклу (умовою типу While);

· с ключовим словом Until; у цьому випадку вона називається умовою завершення циклу (умовою типу Until).

Після ключового слова While (чи Until) записується УмовнийВираз.

Якими бувають УмовніВирази, Ви знаєте — про них йшла мова в розд. 6.3.

Таким чином, можливі 4 варіанти:

Табл. 7.2.

Табл. 7.2.
       
Do While...... Loop Do Until...... Loop Do... Loop While... Do... Loop Until...

Тепер розглянемо логіку роботи циклу з умовою.

Випадок 1. Використання умови типу Whileпродовження циклу. ПовторюваніОператори виконуються, якщо значення УмовногоВиразу дорівнює True (Істина). У противному випадку цикл завершується.

Випадок 2. Використання умови типу Untilзавершення циклу. ПовторюваніОператори виконуються, якщо значення УмовногоВиразу дорівнює False (Неправда). У противному випадку цикл завершується.

Очевидно, що завжди можна замінити умову типу While умовою типу Until, і навпаки. Для цього потрібно використовувати логічне заперечення УмовногоВиразу (див. розд. 6.3).

Приклад 7.8. Ви хочете, щоб цикл завершився при виконанні наступного умови:
X > 100 Or Time > 600.

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

Not (X> 100 Or Time > 600),
що рівнозначно такому умовному виразу:
X<= 100 And Time<= 600.

Яку з двох умов використовувати:
Until X > 100 Or Time, > 600 чи While X <= 100 And Time <= 600,
справа смаку розробника.

А чим відрізняються варіанти 1 і 2 табл. 7.2 від варіантів 3 і 4?

Якщо умова стоїть у першому рядку, може трапитися так, що ПовторюваніОператори так жодного разу і не будуть виконані! Іноді це буває корисно. Нижче буде розглянутий приклад 7.9, у якому говориться і про цей випадок.

А якщо умова стоїть в останньому рядку, ПовторюваніОператори будуть виконані хоча б один раз!

Приклад 7.9. Розглянемо таку задачу. Петро Петрович купив мішок цукру. І вирішив для себе: щораз брати з цього мішка рівно одну десяту частину його вмісту, доки в мішку не залишиться менше 30 кг цукру. (Спочатку в мішку було 50 кг.)

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

Номер: Залишок:
   
  40.5
  36.45
... ...

Один з варіантів розв'язку:

Код 7.6

Очевидно, що замість Until Maca < 30 можна написати:
While Maca >= 30.

А що буде, якщо початкова маса мішка не 50, а 25 кг?

Буде помилково надруковано:

Номер: Залишок:
  22.5

(Незважаючи на те, що маса мішка менше 30 кг, Петро Петрович одного разу все-таки відсипле собі 2.5 кг цукру!)

Щоб програма так не помилялася, Умову потрібно перенести з останнього рядка циклу в її перший рядок:
Do Until Маса < 30... Loop

А тепер ми можемо показати Вам, як вирішується задача підсумовування квадратів, наведена на початку глави:

Код 7.7

Підсумовування буде продовжуватися, поки значення змінної Sum не досягне встановленого нами значення.

Таким чином, ми встановили «непрохідний бар'єр» для нескінченного повторення. Але наскільки надійний цей бар'єр? В останньому розділі цієї глави ми торкнемося цього питання.

Hові поняття:




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 578; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.