К статьям

Циклы

4 мин


Определение

Циклы используются, когда нужно выполнить одинаковые действия множество раз. Представим себе, что нужно вывести на экран числа от 1 до 10. Мы могли бы 10 раз написать Сообщить(), но гораздо удобнее автоматизировать этот процесс и использовать цикл. 

Например:

Для Индекс = 1 по 10 Цикл

    Сообщить(Индекс);

КонецЦикла;

Во встроенном языке 3 вида циклов, рассмотрим каждый из них:  

  1. Цикл "Для"

Используется если заранее известно количество повторений (итераций)

Описание:

Для <Имя переменной> = <Выражение 1> По <Выражение 2> Цикл
// Операторы
КонецЦикла

<Имя переменной> -  переменная, именуемая счетчиком
увеличивается на 1 при каждом повторении пока не достигнет конечного значения

<Выражение 1> - начальное значение счетчика
<Выражение 2> - конечное значение счетчика, при его достижении выход из цикла
<Выражение 1>, <Выражение 2> - выражения результатом которого будет число, или само число

В примере,
Индекс - счетчик цикла,
Индекс = 1 - счет начинается с 1,
по 10 - выполнение повторяющихся действий (цикла) закончится когда Индекс будет равен 10,
Каждое действие (итерацию) к значению счетчика будет прибавляться 1

Для Индекс = -по 1 Цикл

    Сообщить(Индекс);

КонецЦикла;

Цикл будет выполняться 3 раза (3 итерации цикла). В таблице ниже значение переменной Индекс в различных итерациях

Итерация Индекс
  1   -1
2 0
3 1

Внутри цикла возможно выполнять действия со счетчиком

Для Индекс = -по 1 Цикл

    Индекс = 1;

    Сообщить(Индекс);

КонецЦикла;

Итерация Индекс
  1   1
  1. Цикл обход коллекции

Используется если количество элементов заранее не известно

Описание:
Для каждого <Имя переменной 1> Из <Имя переменной 2> Цикл
// Операторы
КонецЦикла;

<Имя переменной 1> - При каждой повторении присваивается значение следующего элемента коллекции
<Имя переменной 2> - Коллекция, элементы которой будут в <Имя переменной 1>

Цикл закончится когда все элементы будут перебраны

Пример:

Сотрудники = Новый Массив;

Сотрудники.Добавить("Иванов");

Сотрудники.Добавить("Петров");

 

Для Каждого Фамилия Из Сотрудники Цикл

    Сообщить(Фамилия);

КонецЦикла;

  1.  Цикл "Пока"

Используется если известно условие окончание цикла

Описание:
Пока <Логическое выражение> Цикл
// Операторы
КонецЦикла;

Цикл выполняется пока <Логическое выражение> истинно

Сч = 3;

Пока Сч > 0 Цикл

    Сч = Сч - 1;

КонецЦикла;

Часто цикл Пока используется в выборке, с которой познакомимся позднее

Выборка = Справочники.НаименованияТоваров.Выбрать();

Пока Выборка.Следующий() Цикл

    Сообщить(Выборка.Наименование);

КонецЦикла;

У циклов итерацию можно принудительно: 

  • продолжить - управление переходит в начало цикла,
  • прервать - цикл прерывается в любой точке.

 Например:

Сотрудники = Новый Массив;

Сотрудники.Добавить("Иванов");

Сотрудники.Добавить("Петров");

Сотрудники.Добавить("Сидоров");

 

Для каждого Фамилия Из Сотрудники Цикл

    Если Фамилия = "Иванов" Тогда

        Продолжить;

    КонецЕсли;

    Сообщить(Фамилия);

КонецЦикла;

Сч = 0;

Пока Истина Цикл

    Сч = Сч + 1;    

    Сообщить(Сч);

    Если Сч > 10 Тогда

        Прервать;

    КонецЕсли;

КонецЦикла;

Не оправданные действия со счетчиком и присутствие не достижимого условия выхода могут привести к бесконечному циклу:

Для Индекс = -по 1 Цикл

    Индекс = -1;

    Сообщить(Индекс);

КонецЦикла;

 Пока Истина Цикл

    ЗагрузитьДанныеСервера();

КонецЦикла;

 Внутри циклов может быть сколько угодно других циклов 

ТелефоныРогаИКопыта = Новый Соответствие();

ТелефоныРогаИКопыта.Вставить("111-11111", "Директор");

ТелефоныРогаИКопыта.Вставить("222-11111", "ГлавныйБухгалтер");

 

ТелефоныРомашка = Новый Соответствие();

ТелефоныРомашка.Вставить("333-11111", "Директор");

ТелефоныРомашка.Вставить("444-11111", "ГлавныйБухгалтер");

 

Организации = Новый Структура;

Организации.Вставить("РогаИКопыта", ТелефоныРогаИКопыта);

Организации.Вставить("Ромашка", ТелефоныРомашка);

 

Для Каждого Организация Из Организации Цикл

    Сообщить("Организация " + Организация.Ключ);

    Для Каждого Телефон Из Организация.Значение Цикл 

        Должность = Телефон.Значение;

        НомерТелефона =Телефон.Ключ; 

        Сообщить(Должность + ": " +  НомерТелефона);

    КонецЦикла;

КонецЦикла;

Примеры:

  1.  Цикл для соответствия или структуры
 Телефоны = Новый Соответствие();

Телефоны.Вставить("111-11111", "Директор");

Телефоны.Вставить("222-11111", "Бухгалтер");

 

Для Каждого КлючЗначение Из Телефоны Цикл

    Сообщить("Должность: " + КлючЗначение.Значение + ", номер телефона: " 

       + КлючЗначение.Ключ);

КонецЦикла;

  1.  Обратный цикл
Сотрудники = Новый Массив;

Сотрудники.Добавить("Иванов");

Сотрудники.Добавить("Петров");

Сотрудники.Добавить("Сидоров");

 

 КоличествоСотрудников = Сотрудники.Количество(); 

 Для Индекс = 1 По КоличествоСотрудников Цикл

  ТекЭлемент = Сотрудники[КоличествоСотрудников - Индекс]; 

  Сообщить(ТекЭлемент);

КонецЦикла;

  1. Перебрать строку символов
Строка = "НовыйТекст";

Для Индекс = 1 По СтрДлина(Строка) Цикл  

     Сообщить(Сред(Строка, Индекс, 1));  

КонецЦикла;

 Подробнее о СтрДлина(), Сред() и тп. в Работа со строками

Задачи на эту тему:

Рейтинг 0

Комментарии