Добавить в корзинуПозвонить
Найти в Дзене

15. Инструкция "Цикл"

Представьте себе такую задачу. Вам нужно напечатать список. В этом списке должно
быть указано, сколько занятий у вас в понедельник, во вторник и так далее:
• в 1-й день — 6 занятий;
• во 2-й день — 8 занятий;
• в 3-й день — 7 занятий и т. д.
Чтобы это сделать, у вас есть две переменные. Одна — ДеньНедели. В ней вы можете хранить порядковый номер дня недели. Другая — Занятий. В ней вы можете хранить количество занятий.
Печатать вы пока не умеете. Поэтому упростим задачу. Вместо того чтобы напечатать, достаточно выполнить такую инструкцию: Сказать = "В " + Строка(ДеньНедели) + "-й день " + Строка(Занятий) + " занятий."; То есть в переменную "Сказать" просто поместим ту строку, которую надо было бы напечатать.
Эта строка «склеивается» из нескольких частей или нескольких строк. В ней используются переменные "ДеньНедели" и "Занятий". Но поскольку эти переменные содержат числа, то в «голом» виде их в этой инструкции использовать плохо. Сначала нужно сделать из них строки. Для этого и использ

Представьте себе такую задачу. Вам нужно напечатать список. В этом списке должно
быть указано, сколько занятий у вас в понедельник, во вторник и так далее:
• в 1-й день — 6 занятий;
• во 2-й день — 8 занятий;
• в 3-й день — 7 занятий и т. д.
Чтобы это сделать, у вас есть две переменные. Одна — ДеньНедели. В ней вы можете хранить порядковый номер дня недели. Другая — Занятий. В ней вы можете хранить количество занятий.
Печатать вы пока не умеете. Поэтому упростим задачу. Вместо того чтобы напечатать, достаточно выполнить такую инструкцию:

Сказать = "В " + Строка(ДеньНедели) + "-й день " + Строка(Занятий) + " занятий.";

То есть в переменную "Сказать" просто поместим ту строку, которую надо было бы напечатать.
Эта строка «склеивается» из нескольких частей или нескольких строк. В ней используются переменные "ДеньНедели" и "Занятий". Но поскольку эти переменные содержат числа, то в «голом» виде их в этой инструкции использовать плохо. Сначала нужно сделать из них строки. Для этого и используется два раза функция встроенного языка Строка().
То значение, которое указано у неё в скобках, преобразует к значению типа Строка.
Вернемся к задаче: есть две переменные и есть инструкция. С их помощью нужно «напечатать» список. Если бы вы знали только инструкцию присваивания, то стали бы делать эту задачу так:

// По-порядку "печатаем" для каждого дня недели.
ДеньНедели = 1;
Занятий = 6;
Сказать = "В " + Строка(ДеньНедели) + "-й день " + Строка(Занятий) + " занятий.";
ДеньНедели = 2;
Занятий = 8;
Сказать = "В " + Строка(ДеньНедели) + "-й день " + Строка(Занятий) + " занятий.";
ДеньНедели = 3;
Занятий = 7;
Сказать = "В " + Строка(ДеньНедели) + "-й день " + Строка(Занятий) + " занятий.";

Сделайте в своей конфигурации этот пример. В режиме отладки пройдите по шагам и посмотрите, какие строки получаются в переменной "Сказать".

Результат
Результат

Почему не продолжаем делать этот пример до конца? Потому что каждый день
делается одно и то же. Зная порядковый день недели, выясняем, сколько занятий в этот день. А для этого очень хорошо подходит инструкция "Если":

Если ДеньНедели = 1 Тогда
Занятий = 6;
ИначеЕсли ДеньНедели = 2 Тогда
Занятий = 8;
// и так далее

Расписание у вас таково, что в понедельник, четверг и пятницу у вас 6 занятий, во вторник 8, в среду 7, а в выходные занятий нет. Напишите это с помощью инструкции "Если" и получится такой пример:

Если ДеньНедели = 1 ИЛИ ДеньНедели = 4 ИЛИ ДеньНедели = 5 Тогда
Занятий = 6;
ИначеЕсли ДеньНедели = 2 Тогда
Занятий = 8;
ИначеЕсли ДеньНедели = 3 Тогда
Занятий = 7;
ИначеЕсли ДеньНедели = 6 ИЛИ ДеньНедели = 7 Тогда
Занятий = 0;
КонецЕсли;

Если после инструкции "Если" добавить вашу «печать», то получится именно
то, что нужно сделать для каждого дня - узнаём количество занятий и
«печатаем»:

Если ДеньНедели = 1 ИЛИ ДеньНедели = 4 ИЛИ ДеньНедели = 5 Тогда
Занятий = 6;
ИначеЕсли ДеньНедели = 2 Тогда
Занятий = 8;
ИначеЕсли ДеньНедели = 3 Тогда
Занятий = 7;
ИначеЕсли ДеньНедели = 6 ИЛИ ДеньНедели = 7 Тогда
Занятий = 0;
КонецЕсли;
Сказать = "В " + Строка(ДеньНедели) + "-й день " + Строка(Занятий) + " занятий.";

Весь вопрос теперь в том, как выполнить эти строки программы для каждого дня недели. Для этого нужна инструкция Цикл. Она «снаружи» обрамляет тот
фрагмент, который нужно выполнить несколько раз, и выглядит следующим образом:

Для ДеньНедели = 1 По 7 Цикл
Если ДеньНедели = 1 ИЛИ ДеньНедели = 4 ИЛИ ДеньНедели = 5 Тогда
Занятий = 6;
ИначеЕсли ДеньНедели = 2 Тогда
Занятий = 8;
ИначеЕсли ДеньНедели = 3 Тогда
Занятий = 7;
ИначеЕсли ДеньНедели = 6 ИЛИ ДеньНедели = 7 Тогда
Занятий = 0;
КонецЕсли;
Сказать = "В " + Строка(ДеньНедели) + "-й день " + Строка(Занятий) + " занятий.";
КонецЦикла;

Работает это следующим образом. Когда исполнение программы доходит до цикла, переменной цикла присваивается начальное значение. В нашем случае переменная цикла "ДеньНедели", а начальное значение для неё — 1.
Затем начинают выполняться те инструкции, которые расположены внутри цикла. Когда исполнение доходит до строки "КонецЦикла", переменная цикла автоматически увеличивается на единицу и всё возвращается в начало цикла.
Если переменная цикла не превысила своё конечное значение (в нашем случае 7), инструкции внутри цикла выполняются ещё раз. Если переменная цикла превысила своё конечное значение, исполнение переходит дальше, к тем строкам, которые расположены после инструкции КонецЦикла.
Запустите пример в режиме отладки и, двигаясь по шагам, посмотрите, как это работает. День недели будет последовательно изменяться от 1 до 7. И в переменной "Сказать" будут получаться строки с количеством занятий в каждый из дней. Это не единственная форма инструкции Цикл. Есть ещё две другие формы этой инструкции.

Задание 3.27
Выведите количество дней в каждом месяце из второй декады в виде «4-й месяц 30 дней». Используйте переменную НомерМесяца. Результат помещайте в переменную Сказать. С помощью пошагового выполнения проверьте все значения, которые окажутся в переменной Сказать.
Задание 3.28
Перечислите школьные оценки от самой лучшей к самой худшей. Результат помещайте в переменную "Сказать".