Загрузка данных
Часть 2.3. Рекурсия переменных Цикл: Пока…Цикл
Рассмотрим еще один цикл, это цикл с условием. Принцип его работы мы разберем на
следующей схеме:
Рис 2.3.1
90
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Посмотрите на данную схему: перед телом цикла задается какое-нибудь условие, пока
данное условие истинно, выполняется тело цикла, в противном случае программа выходит из
цикла. Рассмотрим синтаксис данного оператора в программе 1С.
Пока <Условие> Цикл
//операторы
Продолжить;
//операторы
Прервать;
КонецЦикла;
Разберем данный оператор. Ключевое слово Пока задает некоторое условия, оно
должно иметь тип булево, после данного условия следует ключевое слово Цикл,
открывающее тело цикла, а закрывает тело цикла ключевое слово КонецЦикла.
Операторы Продолжить и Прервать обладают теми же функциями, как и в
предыдущем цикле Для…Цикл. Это переход в начало цикла и выход из цикла соответственно.
Перед тем как рассматривать примеры цикла Пока...Цикл, мы изучим Рекурсию
переменных.
Рекурсия – определение нового значения параметров при помощи старого значения,
используя единый идентификатор.
Посмотрим, как это выглядит.
и = 0;
и = и + 1;
Сделайте самый элементарный пример, и на нем же изучите рекурсию и цикл
Пока…Цикл
Пример таков: нам необходимо вывести ряд чисел от 0 до 100 с шагом 5.
Создайте самостоятельно обработку, форму и в обработчике нажатия кнопки
«Выполнить» формы напишем следующий код:
91
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис 2.3.2
Разберем данный пример. Сначала задаем начальное значение выводимой переменной,
потом шаг, с которым она будет выходить на экран.
После этого мы задаем условие цикла: что он будет выполняться, пока переменная «н»
меньше или равна ста. То есть если переменная «н» меньше или равна 100, то программа
будет заходить в тело цикла и выполнять операторы в цикле. Как только данное условие
перестанет выполняться, то будут исполняться операторы после ключевого слова
КонецЦикла. Выводим сообщение чему равно «н». Последний шаг – выполняем рекурсию
переменной, увеличивая ее на 5.
Сохраните обработку, запустите и посмотрите, как работает данный код.
Рекурсивно можно вычитать, умножать и делить переменные (для типа число).
Рекурсивный вызов возможен также для строк и дат.
Еще один пример на рекурсию. Нам надо получить «н» факториал.
5! = 1*2*3*4*5
92
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис 2.3.3
Разберем его. Получаем интерактивно некоторое целое число, проверяем, ввели мы
его или нет. Если ввели, и если оно больше нуля, задаем переменную Факториал, которая
будет рекурсивно увеличиваться, и переменную Итерация. Определяем наш цикл, он будет
работать пока переменная Итерация меньше переменной «н». Сразу же в начале тела цикла
увеличиваем переменную Итерация на 1. И последний шаг: внутри цикла рекурсивно
вызываем переменную Факториал умножая ее на переменную Итерация.
Выводим сообщение.
Разберите данный пример, если он Вам не понятен. Разберите его в отладке,
посмотрите, как изменяются переменные.
Напоминаю: о том, как работать с отладкой, можно узнать в группе Вконакте
http://vk.com/1c_prosto
Самостоятельно измените пример так, чтобы Итерация начиналась с 1, поменяйте
условие цикла или место рекурсии переменной Итерация, чтобы пример работал правильно.
Сделайте еще один пример на цикл Пока…Цикл.
Мы имеем две даты, вторая дата старше первой, надо вывести все даты в промежутке
между ними.
93
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис 2.3.4
Разберем данный пример.
Первым делом мы задаем и интерактивно вводим переменные. Для того чтобы
исключить ситуацию, когда пользователь не ввел переменную, мы делаем проверку. Если Вы
забыли, то напоминаю, что функции ВвестиДату, ВвестиСтроку, ВвестиЧисло возвращают
Истину, если пользователь ввел строку, число или дату, и возвращают Ложь, если нет.
В том случае, если обе переменные ДатаНачВведена и ДатаКонВведена принимают
значение Истина, то мы заходим в условие, а если нет, то выдаем пользователю
предупреждение.
Следующим шагом, мы проверяем то, что дата начальная должна быть всегда меньше
даты конечной, иначе также выдаем пользователю сообщение.
После того как проверка прошла, начинает выполняться цикл. В условии цикла мы
проверяем то, что дата начальная меньше или равна дате конечной. Если условие истинно, то
заходим в тело цикла. В теле цикла мы первым делом выводим на экран начальную дату. А
потом - внимание! - мы делаем то, что называется рекурсией переменных (о чем я вам
рассказывал в начале этой части главы), но только применимо к датам.
После данных манипуляций, ДатаНач увеличивается на один день. Опять проверяем
наше условие, и если ДатаНач все еще меньше или равно ДатаКон, то идем в цикл, иначе
94
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
выходим из него.
Запустите обработку и посмотрите, как она работает.
На этом мы закончим изучение циклов. Всего в языке программирования 1С
существует три вида циклов. Два из них мы изучили в этой главе. Третий цикл будем изучать
в 5-ой главе. Пока изучите и научитесь работать с циклом Пока…Цикл, изучите и освойте
рекурсию переменных. Поскольку в практической работе Вам часто придется сталкиваться с
данными вопросами.
Глава 2. Часть 3. Рекурсия переменных Цикл: Пока…Цикл
1) Вычислите следующую сумму (1)k
/ k , т.е. (для тех кто не знакомс
k 1
мат.анализом) (1)1
/1 (1)2
/ 2 (1)3
/ 3 ... (1)n
/ n , n – задайте
интерактивно целое число.
2) Рассчитайте 1
x x 2 x
3
, где x = от -10 до 10, с шагом 0,1 (не забудьте
про деление на 0).
3) Рассчитайте сумму
k 1
* k , где m и n – целые числа, задаются
k 1 j1
j
пользователем интерактивно. Для тех кто не знаком с мат.анализом для
m = 3, а n=2: 1 1 *1
1 1 *1
1 1 *1
2 1 * 2
2 1 * 2
2 1 * 2
1 2 3 1 2 3
4) Пусть пользователь задает два значения времени, первое значение
должно быть раньше второго. Выведите на экран время в формате
ЧЧ:мм, от начального до конечного значения с шагом 15 минут.
5) Пусть пользователь задаст две любых даты (начальная должна быть
ранее конечной), выведите каждый день этого интервала дат в окно
сообщений в таком виде: «01/10/2012 режим работы с 08-00 по 18-00»,
причем для выходных (суббота и воскресенье) должно быть
«07/10/2012 режим работы с 08-00 по 16-00».
6) Введите два любых целых числа, проверьте, чтобы значение числа
были от 1 до 12, и первое было меньше второго, иначе не выполняйте
код. Выведите месяцы (в формате ММММ) по порядку начиная с
номера первого числа и заканчивая номером второго числа.
7) Введите интерактивно некоторое слово. Выведите ряд сообщений
сформированный из двух данных слов рядом. В каждом последующем
элементе ряда, первое слово уменьшайте на одну букву слева, пока не
останется одна буква, второе слово уменьшайте слово на одну букву
справа, пока не останется одна буква.
8) Введите интерактивно некоторое предложение (слова разделены
пробелами). Выведите ряд, сформированный из данного предложения,
где каждый последующий элемент ряда уменьшается на одно слово.
Например:
Программировать очень интересно и занимательно
Программировать очень интересно и
Программировать очень интересно
Программировать очень
2
Программировать
9) Пусть имеется адресная строка
http://lenta.ru/news/2013/10/02/betterkittens/
Выведите в окно сообщений каждое слово разделенное флешем.