Керуючі оператори. Керуючі структури в Visual Basic

Керуючими операторами (control statement) називаються виконувані оператори, що змінюють послідовність виконання інструкцій програми. З усіх операторів, що використовуються в мовах програмування, оператори управління викликали найбільше суперечок. Основним предметом дискусій є найпростіший оператор управління goto. Він дозволяє змінити порядок виконання програми і перейти до виконання програми, починаючи з певного місця, яке позначено ім'ям або числом. Отже, цей оператор є не чим іншим, як безпосереднім застосуванням команди переходу машинного мови. Наявність такого оператора в мові високого рівня дозволяє програмістам писати такі безсистемні программи1:

goto 40 20 Застосувати процедуру Evade

goto 70 40 if (KryptoniteLevel< LethalDose) then goto 60

60 Застосувати процедуру RescueDamsel 70 ...

тоді як всі ці дії можна записати за допомогою однієї структури:

if (KryptoniteLevel< LethalDose)

then (застосувати процедуру RescueDamsel) else (застосувати процедуру Evade)

Для того щоб уникнути таких складнощів, сучасні мови програмування містять такі оператори управління, які дозволяють записувати розгалужені структури за допомогою одного вираження. Деякі загальноприйняті розгалужені структури і відповідні їм в різних мовах програмування оператори управління зображені на рис. 5.7. Зверніть увагу на го, що з першими двома структурами ми вже зустрічалися в розділі 4. В нашому псевдокоді вони представлені операторами if-then-else і while. Третю структуру, яка називається вибором, можна розглядати як розширення структури i f-then-el se. Різниця між ними полягає в тому, що оператор if-then-else дозволяє вибирати з двох варіантів, а оператор case - з декількох.

Іншою поширеною структурою є оператор циклу for (рис. 5.8), подібний оператору while нашого псевдокоду. Різниця між ними полягає в тому, що ініціалізація, модифікація й перевірка умови завершення циклу об'єднані в одному операторі. Такий оператор зручно використовувати, коли тіло циклу потрібно виконати певну кількість разів - один раз для кожного значення змінної-лічильника в заданому інтервалі. Зокрема, оператор, зображений на рис. 5.8, наказує, щоб тіло циклу було виконано кілька разів: коли значення змінної Count дорівнює 1, потім коли її значення дорівнює 2 і останній раз, коли її значення дорівнює 3.

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


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

Коментарі

Досвід показує, що коли людина намагається зрозуміти програму великого розміру, не настільки важливо, наскільки добре продуманий мову програмування і як використовуються його властивості, як корисна або навіть обов'язкове додаткова інформація, представлена \u200b\u200bна нормальному людському мовою. Тому в мовах програмування передбачена можливість розміщення в програмі пояснюючих коментарів (comments). Транслятор ігнорує коментарі, тому їх присутність або відсутність ніяк не відбивається на програмі з точки зору машини. Версія програми на машинній мові, породжувана транслятором, залишається незмінною, з коментарями чи ні них. Але інформація, яку вони містять, є важливою для людини. Без неї неможливо було б зрозуміти великі і складні програми.

Visual Basic є об'єктно-орієнтованою мовою програмування. Він був розроблений компанією Microsoft як інструмент, за допомогою якого користувачі операційної системи Microsoft Windows могли б розробляти свій власний графічний користувальницький інтерфейс. Насправді Visual Basic - це більше, ніж просто мова програмування. Він являє собою повний пакет для розробки програмного забезпечення, який дозволяє програмісту створювати призначений для користувача інтерфейс з певних компонентів (таких як кнопки, прапорці, текстові поля, смуги прокрутки і т. Д.) І переробляти ці компоненти відповідно до своїх потреб, описуючи, як вони повинні реагувати на певні події. Наприклад, у випадку з кнопкою програміст може описати, що має відбуватися, якщо клацнути на ній мишею. Цей метод створення програмного забезпечення з заздалегідь визначених компонентів є сучасною тенденцією в розробці програмного забезпечення.

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

Існує два основних способи відділення коментарів від тексту програми. Один з них - укласти коментар в спеціальні дужки. Інший спосіб - позначити початок коментаря, який може займати частину рядка праворуч від знака. У мовах C ++, С # і Java можливі обидва способи запису коментарів. У них коментар можна помістити між знаками / * і * / або почати його з //. Таким чином, в C ++, С # і Java допустимі обидві записи:

/ * Це коментар. * /

// Це коментар.

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

ApproachAngle - SlipAngle - HyperSpacelncine:

додають коментар «Відняти HyperSpacelncine з SlipAngle і привласнити значення змінної ApproachAngle». Такі коментарі не роблять програму більш зрозумілою, а тільки подовжують її. Запам'ятайте, що мета коментаря - пояснити програму, а не повторити її. В даному прикладі краще пояснити, чому обчислюється значення змінної ApproachAngl e (якщо це не зрозуміло з програми). Наприклад, коментар: «Мінлива ApproachAngle використовується пізніше для обчислення значення змінної ForceFiel dJetti sonVel ocity», набагато корисніше, ніж попередній.

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

процедурні одиниці

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

процедури

Процедура (procedure) - це набір команд для виконання певної задачі, який інші програмні одиниці можуть використовувати в якості абстрактного інструменту. Управління передається процедурі (за допомогою команди переходу машинного мови), коли її дії необхідні, а потім, після завершення виконання процедури, знову повертається вихідної програмної одиниці (рис. 5.9). Процес передачі управління процедурі називається викликом процедури. Програмну одиницю, яка запитує виконання процедури, ми будемо називати викликає програмою або викликає модулем (calling unit).

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

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

Однак на відміну від нашого несуворого псевдокоду, в якому ми запитували виконання процедури за допомогою такого виразу, як «Застосувати процедуру Deacti vateCrypton», більшість сучасних мов програмування дозволяють викликати процедуру, просто вказавши її ім'я. Наприклад, якщо GetNames, SortNames і WriteNames є іменами процедур для отримання, сортування та виведення на друк списку імен, то програму, яка отримує список, сортують його і виводить на друк, можна записати як

Застосувати процедуру GetNames. Застосувати процедуру SortNames. Застосувати процедуру WriteNames.

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

оператор розгалуження

Оператор розгалуження (умовного переходу) дозволяє виконувати певні команди програми в залежності від логічних умов. У мові Visual Basic оператор розгалуження може використовуватися в двох видах: строчном і блочному.

інтернет-біржа студентських робіт "\u003e

приклад 1

Наприклад, If a\u003e b Then max \u003d a Else max \u003d b.

При необхідності виконання декількох операторів вони поділяються двокрапкою.

приклад 2

Наприклад, If a\u003e 0 Then b \u003d a + 1: c \u003d a \\ 2.

Блоковий синтаксис надає більше можливостей, є більш структурованим і більш читабельним.

Блоковий синтаксис:

Умова - логічне вираження, яке може приймати значення True (Істина), False (Брехня) або Null, Яке прирівнюється до False. При виконанні блочного оператора розгалуження перевіряється умова, і, якщо воно істинно, виконується оператор, наступний за Then. Якщо умова не істинно, перевіряється условіе2, Що йде за ElseIf. Коли справжнє значення знайдено, виконується оператор_прі_істінномусловіі2, який слідує за Then, Після чого програма виходить за EndIf (Тобто наступні ElseIf, Якщо вони є, не перевіряються). Якщо справжні умови для ElseIf не знайдені, виконується операторпрі_ложном_условіі.

Малюнок 3. Приклад блокового синтаксису. Автор24 - інтернет-біржа студентських робіт

оператор вибору

Оператор вибору Case виконує певні оператори в залежності від безлічі значень перевіряється виразу або змінної. Синтаксис оператора вибору:

Малюнок 4. Синтаксис оператора вибору. Автор24 - інтернет-біржа студентських робіт

Значення - змінна або вираз, що перевіряється по одному або декільком умовам. Список значень задається через кому, діапазон значень задається за допомогою службового слова To (Наприклад, 5 To 9).

приклад 3

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

\u003e\u003e Керуючі структури. Загальні відомості про циклах

Навчальні курси:

Керуючі структури. Загальні відомості про циклах

керуючі структури

Загальні відомості про циклах

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

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

Є три види циклів: for, do ... while, while. Розглянемо, наприклад, конструкцію циклу for.

for (Ініціалізація змінної; Умова; Зміна змінної після кожного виконання блоку операторів циклу)
{
тіло циклу
}

Розглянемо приклад використання циклу for (лістинг 3.1).

Лістинг 3.1.
Приклад використання циклу for

Ця програма виведе на екран десять зірочок на одному рядку. Необов'язково форматувати змінну-лічильник в циклі (змінної-лічильником називається така змінна, від якої залежить кількість виконань тіла циклу). Розглянемо приклад програми без оголошення змінної-лічильника в циклі (лістинг 3.2).

Лістинг 3.2.
Приклад програми без оголошення змінної-лічильника в циклі

Можна використовувати не одну змінну-лічильник, а кілька. Розглянемо приклад подібної програми, представлений в лістингу 3.3.

Лістинг 3.3.
Приклад використання декількох змінних-лічильників

Розглянемо цикл while. У цьому циклі в якості параметра вказується якесь умова. Умова перевіряється перед виконанням циклу. Схема циклу while має такий вигляд.

while (умова)
{
тіло циклу
}

Розглянемо приклад програми, що використовує цикл while (лістинг 3.4).

Лістинг 3.4.
Приклад використання циклу while

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

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

Приклад помилковою програми.

Розглянемо тепер цикл do ... while.
Він дуже схожий з циклом while і відрізняється тільки тим, що перевіряє умова не до чергового виконання циклу, а після його виконання. Схема циклу do ... while приведена нижче.

Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Оператор присвоювання Простий і складовою оператори Умовний оператор Оператор множинного вибору Оператор циклу з передумовою Оператор циклу з умовою поста Оператор циклу з параметром Оператор і процедури безумовного переходу


2 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Оператор присвоювання Оператором називається конструкція мови програмування, що служить для завдання будь-якого дії або послідовності дій в програмі над даними. Сукупність операторів програми реалізує закладений в ній алгоритм. Будь-оператор має на увазі деяку дію. Процес «засилання» значення в змінну називається привласненням (перше присвоєння називається ініціалізацією). Присвоєння здійснюється за допомогою спеціальної конструкції - оператора присвоювання: ідентифікатор змінної: \u003d: \u003d вираз Var W, H: Integer; Begin W: \u003d 23; H: \u003d 17; W: \u003d W * H; End.


3 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Простий і складовою оператори Два послідовних оператора повинні розділятися крапкою з комою (має сенс кінця оператора): a: \u003d 11; b: \u003d a * a; Write (a, b); Складовою оператор - це послідовність операторів, що розглядаються як єдиний. Оформляється за допомогою зарезервованих слів begin і end (операторні дужки). Оператор в програмі це єдине неподільне пропозицію, яке виконує будь-яку дію. Простий оператор не містить в собі інших операторів (оператор присвоювання, виклик процедури, ...). begin a: \u003d 11; b: \u003d a * a; Write (a, b) еnd;


5 then begin X: \u003d X + 5; Y: \u003d 1 еnd else Y: \u003d -1; Умовний оператор використовується для програмування розгалужень, тобто ситуацій, коли виникає необхідність при певних умовах виконувати "title \u003d" (! LANG: 4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Умовний оператор if K\u003e 5 then begin X: \u003d X + 5; Y: \u003d 1 еnd else Y: \u003d -1 ; Умовний оператор використовується для програмування розгалужень, тобто ситуацій, коли виникає необхідність при певних умовах виконувати" class="link_thumb"> 4 !} 4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Умовний оператор if K\u003e 5 then begin X: \u003d X + 5; Y: \u003d 1 еnd else Y: \u003d -1; Умовний оператор використовується для програмування розгалужень, тобто ситуацій, коли виникає необхідність при певних умовах виконувати різні дії. Умовний оператор має структуру: if логічне вираз then оператор else оператор У кожній гілці допускається запис тільки одного оператора. 5 then begin X: \u003d X + 5; Y: \u003d 1 еnd else Y: \u003d -1; Умовний оператор використовується для програмування розгалужень, тобто ситуацій, коли виникає необхідність при певних умовах виконувати "\u003e 5 then begin X: \u003d X + 5; Y: \u003d 1 еnd else Y: \u003d -1; Умовний оператор використовується для програмування розгалужень, тобто ситуацій, коли виникає необхідність при певних умов виконувати різні дії. Умовний оператор має структуру: if логічне вираз then оператор else оператор У кожній гілці допускається запис тільки одного оператора. "\u003e 5 then begin X: \u003d X + 5; Y: \u003d 1 еnd else Y: \u003d -1; Умовний оператор використовується для програмування розгалужень, тобто ситуацій, коли виникає необхідність при певних умовах виконувати "title \u003d" (! LANG: 4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Умовний оператор if K\u003e 5 then begin X: \u003d X + 5; Y: \u003d 1 еnd else Y: \u003d -1 ; Умовний оператор використовується для програмування розгалужень, тобто ситуацій, коли виникає необхідність при певних умовах виконувати"> title="4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Умовний оператор if K\u003e 5 then begin X: \u003d X + 5; Y: \u003d 1 еnd else Y: \u003d -1; Умовний оператор використовується для програмування розгалужень, тобто ситуацій, коли виникає необхідність при певних умовах виконувати"> !}




6 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Оператор множинного вибору Оператор вибору використовується для реалізації декількох альтернативних варіантів дій, кожен з яких відповідає своїм значенням деякого параметра. case вираження of константа / діапазон else оператори: оператор end; Значення, а також повинні належати до одного з порядкових типів (крім LongInt). Залежно від значення вибирається той оператор, якому передує константа вибору, рівна обчисленому значенню (альтернатива - оператори після else). Значення констант повинні бути унікальними в кожному наборі, тобто вони можуть з'явитися тільки в одному варіанті.


7 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ case I of (I: Word) 1: X: \u003d X +1; 2,3: X: \u003d X +2; 4..9: begin Write (X); X: \u003d X + 3 (м.б. ";") end (м.б. ";") else X: \u003d X * X; Writeln (X) (м.б. ";") end;


8 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Оператор циклу "Поки" (з передумовою) while умовний вираз do оператор (тіло циклу), що стоїть після службового слова do, буде виконуватися циклічно доти, поки виконується логічне умова, тобто поки значення дорівнює True. Щоб цикл мав шанс коли-небудь завершитися, вміст його тіла має впливати на умову циклу. Умова має складатися з коректних висловлювань і значень, визначених ще до першого виконання тіла циклу. VarF, N: LongInt; (обчислення 10 Begin F:= 1; N:= 1; while N !}


9 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Оператор циклу "До" (з умовою поста) Оператори між словами repeat і until утворюють тіло циклу. Якщо має значення True, то цикл завершується. Цикл "Поки" - "поки умова істинна, виконувати оператори тіла". Цикл "До" - "виконувати тіло циклу до тих пір, поки не стане істинним умова"; repeat until False; repea t оператор until умовний вираз;


10 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Оператор циклу c параметром (цикл по лічильнику) - змінна порядкового типу, до цього ж типу повинні ставитися значення і. Значення змінюється в зростаючому (при використанні зарезервованого слова to) або спадному (downto) порядку від значення до значення з постійним кроком, рівним інтервалу між двома найближчими значеннями в типі, до якого належить (для цілочисельних типів - це 1, для символьного - від одного символу до іншого при збільшенні коду на 1, і т.д.). Цикли for допускають вкладеність, якщо жоден із вкладений циклів не використовує і не модифікує змінні - параметри зовнішніх циклів. Використовується для організації "строгих" циклів, які повинні бути виконані заданий число раз. fo r параметр циклу: \u003d вираз 1 to вираз 2 do оператор downto


12 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Оператор безумовного переходу Метка може стояти в програмі в будь-якому місці між операторами і відділяється від другого оператора двокрапкою ":". Область дії операторів безумовного переходу строго локалізована. Заборонені переходи по оператору goto між процедурами, а також між основним блоком і процедурою. Оператор безумовного переходу передає управління виконанням в вказане c допомогою мітки місце програми (є "зайвим" з точки зору теорії структурного програмування). goto мітка Label ціле без знака; ідентифікатор мітки, Синтаксические діаграми і: LabelL1, L2; Begin ... goto L1; ... L1: goto L2; ... L2: End.


13 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРИ Процедури безумовного переходу Процедури неструктурной передачі управління при роботі з циклічними структурами: Break - реалізує вихід з циклу будь-якого типу; Continue - здійснює перехід на наступну ітерацію циклу, ігноруючи решту до кінця тіла циклу оператори. Процедури Exit і Halt спеціально призначені для виходу з програмних блоків (процедур, функцій, основного програмного блоку). Halt () здійснює вихід з програми, повертаючи операційній системі заданий код завершення. Exit здійснює безумовний вихід з підпрограми. Якщо процедура використана в основному блоці, то вона виконується аналогічно Halt.

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

оператор break

Оператор break використовується для виходу з оператора while, do, for, switch, безпосередньо його містить. Управління передається на оператор, наступний за оператором, з якого здійснено вихід. Оператор break має форму

while ((ch \u003d getchar ())! \u003d EOF) / * читається символ ch \u003d getchar (). Якщо він не збігається з EOF, виконується тіло оператора while * / (if (ch \u003d\u003d "\\ n") break; putchar (ch);)

Робота циклу повністю припиняється, як тільки при введенні зустрічається символ "новий рядок".

оператор continue

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

while ((ch \u003d getchar ())! \u003d EOF) / * читається символ ch \u003d getchar (). Якщо він не збігається з EOF, виконується тіло оператора while * / (if (ch \u003d\u003d "\\ n") continue; putchar (ch);)

У версії з оператором continue просто пропускаються символи "новий рядок", а вихід з циклу відбувається, тільки коли читається ознака EOF.

оператор goto

Оператор goto призначений для безумовної передачі керування до оператора з вказаною міткою. Він має наступну форму:

goto мітка;

Керниган і Рітчі вважають оператор goto "надзвичайно поганим" засобом і пропонують застосовувати його як можна рідше або не застосовувати зовсім. Наведемо приклад записи оператора:

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

part1: printf ( "точка переходу \\ n");

Якщо без операторів goto, break, continue, return ніяк не обійтися, то при використанні goto переходите вперед по коду, а не назад.

Оператор break краще не використовувати для передчасного виходу з циклу, його корисно використовувати всередині оператора switch.

Оператор continue небажано використовувати для модифікації логіки циклів.

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

Поділитися