КЕРУЮЧІ ОПЕРАТОРИ І КОНСТРУКЦІЇ

298 АЛГОРИТМ ЯК СУКУПНІСТЬ БАЗОВИХ СТРУКТУР Програма та її окремі частини створюються на основі алгоритмів Фактично програма це кодування деякого алгоритму або групи алгоритмів З цього

випливає, що до написання коду необхідно розробити і записати (останнє не всег

да робиться) алгоритм

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

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

• блок операторів і конструкцій

• розгалуження

• цикл

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

Галуженняце вибір одного з можливих напрямів виконання алгоритму, здійснюваний в залежності від значення деяких умов Розгалуження підрозділяються такі види:

• якщо те

• якщо те інакше

• якщо те інакше якщо

• вибір по ключу (в 1С це розгалуження не використовується, замість нього вживається Якщо те інакше якщо)

• спроба

Циклце повторне виконання деякого БОК з різними, як правило, значеннями входять до БОК змінних Одноразове виконання БОК циклу називають итерациейБОК циклу також називаютьтілом циклу

Розрізняють такі цикли:

• з параметром

• поки

• до

Останній вид циклу застосовується вкрай рідко в 1С він відсутній

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

299&nbsp&nbsp&nbsp ГАЛУЖЕННЯ ЯКЩО

У розгалуження якщо то, якщо те інакше і якщо то інакше якщо для запису умов використовується логічний вираз(ЛВ), результатом якого може бутиістина(І) або брехня (Л) Графічно розгалуження проілюструє рис 25

Рис 25 Розгалуження: а розгалуження якщо то; б розгалуження якщо те інакше

Розгалуження якщо то працює так:

• обчислюється значення ЛВ

• якщо воно істинне, то виконується БОК1

• якщо воно помилкове, то управління передається БОК2

Записи розгалуження якщо то в лінійній схемі алгоритму:

Х ° Якщо істинно ЛВ, то [виконати:] БОК1

кінець якщо [Х °]

В 1С розгалуження якщо то записується дуже схоже: якщо ЛВ тоді

БОК1 / / Деякі оператори КонецЕсли

Розгалуження якщо те інакше працює так:

• обчислюється значення ЛВ

• якщо воно істинне, то виконується БОК1

• якщо воно помилкове, то виконується БОК2

• далі управління передається БОК3

Запис розгалуження якщо те інакше в лінійній схемі алгоритму:

Х ° Якщо істинно ЛВ, то [виконати:] БОК1

інакше [виконати:]

БОК2

кінець якщо [Х °]

Запис розгалуження якщо те інакше в 1С: якщо ЛВ тоді

БОК1 / / Деякі оператори інакше

БОК2 / / Деякі оператори КонецЕсли

Приклад використання розгалужень якщо то і якщо то інакше см в розд 173

Зауваження  Якщо БОК1 і БОК2 в розгалуженні якщо те інакше є виразами, то для вибору обчислюваного виразу краще вживати функцію, яка обчислює вираз за умовою Її синтаксис:

результат = (ЛВ, вираження1, вираженіе2) Приклад:

у = (х> 0, Лог (х), х) / / Поверне Лог (х), Якщо х > 0, або х в іншому випадку Наведений оператор замінює наступне розгалуження:

якщо х> 0 тоді у = Лог (х)

інакше

у = х КонецЕсли

Для розгалуження якщо те інакше якщо вкажемо тільки спосіб його записи в 1 С:

якщо ЛВ1 тоді

БОК1 / / Деякі оператори іначеЕслі ЛВ2 тоді

БОК2 / / Деякі оператори

іначеЕслі ЛВК тоді

БОКК / / Деякі оператори

[Інакше / / Останні два елементи конструкції

БОКК +1] / / є необовязковими КонецЕсли

2910 СПРОБА

Галуження Спроба служить для обробки виключень і реалізується в 1С вигляді такої конструкції:

спроба БОК1,

виняток

БОК2

конецПопиткі

У конструкції БОК, це послідовність операторів, в яких може виникнути виняток, а в БОК2 це послідовність операторів, оброблювальних виняток

Нагадаємо, щовинятокце помилка, що виникає при виконанні програми, наприклад розподіл на нуль або вихід за межі масиву У першому випадку система видасть повідомлення Поділ на 0, у другому Значення індексного вираження

Робота програми, якщо не використовується обробка винятків, при виникненні помилки припиняється Деякі помилки, що призводять до останову програми, можуть бути, однак, усунені Наприклад, помилка блокування даних, що виникає при зверненні до файлу, захопленому в даний момент іншим додатком, усувається після завершення роботи цього додатка Інші помилки, якщо їх ігнорувати, чи не спотворять кінцевого результату Наприклад, вихід за межі масиву У таких випадках доцільно застосувати конструкцію Спроба з тим, щоб при виникненні помилки виконати її обробку, наприклад просто повідомити про помилку, і продовжити розрахунки

ПрикладОбчислюється сума елементів вектора У процедурі при зверненні до вектора навмисне введена помилка вихід за межі вектора Для її подолання застосовується конструкція Спроба

процедура Виконати () / / Запускаємо процедуру з обробки Проба перем а [5], ін, сум

/ / Ініціалізація вектора а

а [1] = 0 а [2] = 15 а [3] = 25 а [4] = -1 а [5] = 7

/ / Сума елементів масиву а Очікуваний результат: сум = 10 сум = 0

/ / Навмисне для ілюстрації роботи конструкції Спроба

/ / Задаємо верхній параметр циклу великим числа елементів вектора а для ін = 1 по 7 цикл

Повідомити (ОпісаніеОшібкі () + . Обчислення будуть продовжені”) конецПопиткі

конецЦікла / / Для

Повідомити (сум = + сум) / / Надрукував 10 КонецПроцедури / / Виконати

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

Конструкції Спроба можуть бути вкладеними У таких випадках при виникненні помилки її обробка передається оператору Виняток того рівня вкладеності, на якому помилка виникла Щоб передати обробку помилки оператору більш високого рівня, застосовується оператор ВизватьІсключеніе Якщо оператор ВизватьІсключеніе застосований, а зовнішнього обробника не існує, то відбудеться останов програми з видачею повідомлення про помилку Останній ефект буде, зокрема, отриманий, якщо оператор ВизватьІсключеніе вставити в код вищенаведеного прикладу перед оператором КонецПопиткі

ПрикладОбчислюється сума елементів вектора У процедурі при зверненні до вектора навмисне введена помилка вихід за його межі Для її подолання застосовується конструкція Спроба Однак в цей раз в результаті застосування оператора ВизватьІсключеніе здійснюється вихід з циклу і передача управління зовнішнім обробнику

процедура Виконати () / / Запускаємо процедуру з обробки Проба перем а [5], ін, сум

/ / Ініціалізація вектора а

а [1] = 0 а [2] = 15 а [3] = 25 а [4] = -1 а [5] = 7

/ / Сума елементів масиву а Очікуваний результат: сум = 10 сум = 0

/ / Навмисне для ілюстрації роботи конструкцій Спроба

/ / Задаємо верхній параметр циклу великим числа елементів вектора а спроба

для ін = 1 по 7 цикл

спроба / / При виході за межі вектора передамо

сум = сум + а [ін] / / Керування зовнішнім обробнику переривань

виняток

визватьІсключеніе / / Передача управління зовнішнім оброблювачу конецПопиткі / / Внутрішньої

конецЦікла / / Для виключення

Повідомити (ОпісаніеОшібкі () + . Здійснено вихід з циклу Робота триває) конецПопиткі / / Зовнішньої

Повідомити (сум = + сум) / / Надрукував 10 КонецПроцедури / / Виконати

Зауваження    Зовнішній обробник в даній ситуації, звичайно ж, надлишковий й введений лише для ілюстрації оператора ВизватьІсключеніе За відсутності зовнішньої конструкції Спроба замість оператора ВизватьІсключеніе слід вжити оператор Перервати, попереджання, наприклад, тим же, що і в наведеному прикладі, викликом процедури Повідомити

2911&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp ЦИКЛИ

У циклі з параметром n задаються початкове значення параметра до, його кінцеве значеннядо і крокш відмінна від нуля величина, на яку змінюється значення параметра і після виконання чергової ітерації В 1С крокшзавжди приймається рівним одиниці Параметр п також називаютьзмінної циклу, яка повинна бути целочисленной Параметринідоє в 1С числовими виразами і представляють відповідно нижню та верхню межі змінної циклу Якщо параметр н(до) Обчислюється з нецілим значенням, то як параметр використовується ціла частина результату

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

Графічно цикл з параметром ілюструє рис 26

Рис 26 Цикл з параметром

Цикл з параметром працює так (випадокш> 0): 1 ° Присвоїти: п = н

2 ° Якщо п &lt= до, то перейти до п 3 °, інакше завершити цикл

3 ° Виконати БОК

4 ° Присвоїти: п = п + ш і перейти до п 2 ° (повтор)

Коли ш < 0, п.2°  виглядає так:

Якщо п> до , То перехід до п 3 °, інакше завершити цикл

Зауваження:

1 У циклі з параметром наведені в пп 1 ° і 4 ° оператори в тексті програми не присутні, але будуть автоматично вбудовані компілятором в обєктний код при компіляції програми

2 У багатьох мовах програмування, наприклад в Фортране, в циклі з параметром забороняється в тілі циклу змінювати значення змінної циклу і Зміна параметрів н, до і крокуш в тілі циклу не відібється на виконанні циклу: цикл буде виконуватися з тими значеннями параметрів, які вони мали до початку першої ітерації циклу В 1С заборона на зміну значення змінної циклу п не діє Однак слід памятати, що зміна п в тілі циклу це поганий стиль програмування

Запис циклу з параметром в лінійній схемі алгоритму:

Х ° З параметром п = н, до, ш [Виконати:] БОК

кінець циклу [з параметром п] | [Х °]

і в 1С:

для п = н по до цикл БОК

конецЦікла

Цикл Поки виконується до тих пір, покиістинно деякий ЛВ Причому перевірка істинності ЛВ виконується перед початком чергової ітерації Цикл До відрізняється від циклу Поки тим, що перевірка істинності ЛВ здійснюється після виконання черговий ітерації Графічна інтерпретація циклів Поки і До наведена на рис 27

6

Рис 27 Цикли: а цикл Поки б цикл До

Зауваження  При роботі з циклами Поки і До треба стежити, щоб ЛВ обовязково рано чи пізно прийняло значення брехняІнакше станеться зациклення Нескінченне виконання операторів циклу

Запис циклів Поки в лінійній схемі алгоритму:

Х ° Поки істинно ЛВ [, виконати:] БОК

кінець циклу Х °

і в 1С:

поки ЛВ цикл

БОК / / Деякі оператори конецЦікла

Зауваження:

1 Далі при посиланні на цикли будемо використовувати прийняті в 1С імена операторів циклів Для і Поки

2 Цикли Для і Поки можуть бути вкладеними Тобто в тілі циклу Для (Поки) можуть бути інші цикли Для і / або Поки

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

/ / Процедура, що виводить групи неперіодичних констант

/ / Запускається з обробки Проба процедура Виконати ()

перем всегоКонстант, ин, номерГруппи, ідеї ОчістітьОкноСообщеній ()

номерГруппи = 0

всегоКонстант = МетаданниеКонстанта ()

ін = 1 / / Номер константи поки ин <= всегоКонстант цикл

якщо МетаданниеКонстанта (ін) Періодичний = 0 тоді номерГруппи = номерГруппи + 1

Повідомити (Виводиться група з номером + номерГруппи)

/ / Вкладений цикл Поки

поки МетаданниеКонстанта (ін) Періодичний = 0 цикл ідеї = МетаданниеКонстанта (ін) Ідентифікатор Повідомити (іден + ” + КонстантаПолучітьАтрібут (іден))

ін = ін + 1 / / Не забуваємо перейти до наступної константі

якщо ін> всегоКонстант тоді

перервати / / Достроковий вихід з вкладеного циклу КонецЕсли

конецЦікла / / Поки МетаданниеКонстанта (ін) Періодичний = 0

інакше

//

Маємо періодичну константу

ін = ін + 1

//

Не забуваємо перейти до наступної константі

конецЦікла / / Поки ин <= всегоКонстант якщо номерГруппи = 0 тоді

Повідомити (В конфігураторі немає неперіодичних констант) КонецЕсли

КонецПроцедури / / Виконати

Джерело: Бартеньев О В 1С: Підприємство: програмування для всіх Базові обєкти та розрахунки на одній дискеті М: Діалог-МІФІ, 2005 464 с

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*