Вивчаємо Java. Керуючі структури у Visual Basic

^ Програмування операторів умовного переходу if-еlsе Програмування операторів вибору switch i»- Програмування операторів циклу while, do-while та for Мова асемблера - мова машинних команд. Він підтримує лише базові механізми організації програм. У ньому відсутні керуючі конструкції, природні для високого рівня. Йдеться про підтримку конструкцій типу операторів вибору, організації циклів тощо. У минулому розділі ми започаткували обговорення цих питань, розглянувши принципи організації циклів у програмах на асемблері. Мета цієї глави - розробити шаблони керуючих конструкцій на асемблері, аналогічні типовим операторам високого рівня. Вчинимо просто - відкриємо будь-який підручник з мови С або C++, складемо список наведених у ньому керуючих операторів і покажемо способи їх реалізації на асемблері. Типовий список буде наступним: оператори вибору: ? умовний оператор if-else; ? перемикач switch; Ш оператори циклу: П цикл із передумовою while; П цикл із постумовою do-while; Пітераційний цикл for; ^ Оператори continue і break.

Ще за темою Розділ 11 Програмування типових керуючих структур:

  1. Глава 2 Негативне та позитивне програмування

Операції та оператори мови програмування Сі. приклади програм.

Керуючі структури та основні конструкції мов програмування

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

Станом деяких осередків пам'яті, які ми розуміємо як змінні;

Активною точкою програми, тобто командою програми, яка виконується даний момент.

Отже, можна виділити і два основні класи дій, які можуть виконувати обчислювальна система:

Дії, що виділяють область пам'яті під змінні програми (описи).

Дії, що змінюють точку виконання програми (оператори, інструкції, конструкції).

Різні сукупності дій другого класу називають керуючими структурами.

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

У 60-ті роки стало ясно, що в основі більшості труднощів, які зазнають групи розробки програмного забезпеченнялежало безконтрольне використання передачі управління. Вина була покладена на оператор goto, який дозволяє програмісту передавати управління в програмі за однією з можливих адрес у дуже широкому діапазоні. Поняття так званого структурного програмування стало майже синонімічним «виключенням оператора goto».

Дослідження Бома та Якопіні показало, що програмування можливе і за повної відсутності операторів goto. Зміна стилю програмування на програмування без goto стала для програмістів епохальним девізом. Але лише у роки широкі кола професійних програмістів почали приймати структурне програмування всерйоз. Результати виявилися вражаючими, оскільки групи розробки програмного забезпечення повідомляли про зменшення часу розробки, більш часте постачання систем у термін та завершення проектів у рамках бюджету. Ключом до успіху є те, що програми, створені на основі методів структурного програмування, більш зрозумілі, їх простіше налагоджувати і модифікувати і, найголовніше, ймовірніше, що вони написані без помилок.
Робота Бома і Якопіні в 1966 показала, що всі програми можуть бути написані з використанням всього трьох керуючих структур, а саме: послідовної структури, структури вибору та структури повторення. Цей результат встановлений Бомом і Якопіні в 1966 р. шляхом доказу, що будь-яку програму можна перетворити на еквівалентну, що складається лише з цих структур та їх комбінацій. При цьому послідовна структура, по суті, є вбудованою в мову С. Якщо не зазначено інакше, комп'ютер автоматично виконує оператори один за одним у порядку їх запису.

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

До керуючих структур відносяться:

· Структура слідування;

· Структура розгалуження;

>> Управляючі структури. Загальні відомостіпро цикли

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

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

Керівні структури

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

Цикли – це повторення операцій до тих пір, поки вірна якась логічна умова. Наприклад, поставимо умовою циклу, що певна змінна а менше 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 наведена нижче.

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

Коментарі

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

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

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

Існує два основних способи відокремлення коментарів від тексту програми. Один із них – укласти коментар у спеціальні дужки. Інший спосіб - позначити початок коментаря, який може займати частину рядка, що залишилася, праворуч від знака. У мовах C++, 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.

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

Структуровані оператори - це конструкції, побудовані за певними правилами інших операторів. До структурованих операторів відносяться:

Складовий оператор

Умовний оператор

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

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

Оператор with

1.Складовий оператор

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

Формат складеного оператора:

begin<Оператор1>; ... ; <ОператорN>;

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

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

2.Умовний оператор

Умовний оператор забезпечує виконання чи невиконання деяких операторів залежно від дотримання певних умов.

Формат умовного оператора:

If then<Оператор1> ;

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

Умовний оператор може бути записаний у скороченій формі, коли слово else та оператор2 після нього відсутні.

Для організації розгалужень втричі напрями і більше можна використовувати кілька умовних операторів, вкладених один одного. При цьому кожне else відповідає тому then, яке безпосередньо передує йому. Через можливих помилокслід уникати великої вкладеності умовних операторів друг в друга.

3.Оператор вибору

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

Формат оператора вибору:

case<Выражение-селектор>of

<Список1> : <Оператор1>;

<СписокN> : <ОператорN>

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

Оператор вибору виконується так:

1. Обчислюється значення виразу селектора.

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

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

4. Якщо всі перевірки виявилися безуспішними, то виконується оператор, який стоїть після слова else (за його наявності).

приклад.Оператор вибору

CaseNumberDay of

1..5: strDay:= "Робочий день";

6..7: strDay:= "Вихідний день"

else strDay:="";

Залежно від значення цілої змінної NumberDay, що містить номер дня тижня, рядковій змінній strDay надається відповідне значення.