[Alimir_BootModal_Login]

Внутренний язык программирования 1С 8.3 для начинающих программистов: комбинирование простых конструкций в 1С

Автор уроков и преподаватель школы: Владимир Милькин

На прошлых уроках мы научились использовать имена, изучили условную команду, узнали два вида циклов.

Всё это были достаточно простые программы, в каждой из которых использовалась какая-то одна основная конструкция языка (или условная команда или цикл). В реальных программах, конечно же, так не бывает. В них обычно используется всё сразу и по нескольку раз. Сегодня мы научимся комбинировать простые конструкции языка 1С вместе.

Комбинирование простых конструкций языка 1С

К примеру, пусть у нас есть два цикла:

Для Шаг1 = 1 По 2 Цикл
    Сообщить(Шаг1);	
КонецЦикла;
 
Для Шаг2 = 1 По 3 Цикл
    Сообщить(Шаг2);
КонецЦикла;

Эти циклы хорошо нам знакомы и мы понимаем, что в результате первого цикла выведутся числа от 1 до 2, а в результате второго - от 1 до 3.

А что если мы вложим выполнение одного цикла внутрь другого? Вот так:

Для Шаг1 = 1 По 2 Цикл
 
    Для Шаг2 = 1 По 3 Цикл
 
        Сообщить("Значения равны: " + Шаг1 + " " + Шаг2);
 
    КонецЦикла;
 
КонецЦикла;

Если запустить этот пример на компьютере, то получатся следующие результаты:

Значения равны: 1 1
Значения равны: 1 2
Значения равны: 1 3
Значения равны: 2 1
Значения равны: 2 2
Значения равны: 2 3

Как видим результаты отличаются от выполнения данных циклов по отдельности. И вот почему.

У нас есть внешний цикл от 1 до 2. Это значит, что всё, что находится у него между словами Цикл и КонецЦикла выполнится 2 раза. А у него между этими словами находится другой цикл от 1 до 3, который внутри себя содержит команду Сообщить.

Итого такая вложенность приводит к тому, что команда Сообщить выполняется целых 6 раз. Шесть, потому что 2 * 3 = 6.

Теперь обратите внимание, как меняется значение Шаг1 и Шаг2. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. В начале Шаг1 равен 1, а Шаг2 меняется от 1 до 3. Затем Шаг1 уже равен 2 (следующее значение цикла) и снова Шаг2 меняется от 1 до 3.

Задание №27. По аналогии с предыдущим примером напишите тройной вложенный цикл с выводом Шаг1, Шаг2 и Шаг3 соответственно от 1 до 10, от 10 до 20 и от 20 до 30. Выполните задание на компьютере, посмотрите результат и убедитесь, что понимаете почему получаются такие результаты.

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

Задание №28. Найдите все пары целых (в том числе одинаковых) чисел величиной от 1 до 9 каждое, сумма которых равна 10. Сделайте это на листочке. Без помощи компьютера. Должно получится 9 вариантов.  Первые два варианта я подскажу: 1 + 9 = 10 и 9 + 1 = 10. Оставшиеся 7 вариантов найдите сами.

Выполнили? Отлично. А теперь я покажу, как можно было заставить компьютер выполнить ту же самую работу за вас.

Для Шаг1 = 1 По 9 Цикл
 
    Для Шаг2 = 1 По 9 Цикл
 
        Если Шаг1 + Шаг2 = 10 Тогда
 
            Сообщить(" " + Шаг1 + " + " + Шаг2 + " = 10");
 
        КонецЕсли;
 
    КонецЦикла;
 
КонецЦикла;

Мы перебираем одно число в цикле от 1 до 9 (Шаг1). И второе число в другом цикле от 1 до 9 (Шаг2). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. А так как числа для складывания нам нужны одновременно - мы делаем второй цикл вложенным в первый. Осталось воспользоваться условной конструкцией, чтобы отобрать только такие числа, сумма которых равна 10.

Важное замечание. Зачем мы поставили первым слагаемым строку со значением пробел (" ")? Чтобы избежать вот этой ошибки: ссылка.

Пройдите тест

Вопросы задаются по следующему примеру:

Для Шаг1 = 1 По 3 Цикл
    Для Шаг2 = 4 По 5 Цикл
        Сообщить(" " + Шаг1 + " " + Шаг2);
    КонецЦикла;
КонецЦикла;
Начать тест
Задание №29. Напишите программу, которая найдет все варианты двух чисел от 1 до 30, произведение которых равно 30.

Как всегда выполните программу на компьютере и убедитесь, что она выдает верные результаты.

Привожу ответ ниже, но рассчитываю, что вы справитесь самостоятельно.

Ответ