Пример «Цикл Для»
Файлы:
- Синтаксис языка
- Операторы
- Циклы
- Цикл Для.пфл
- Циклы
- Операторы
Пример программы на языке программирования Перфолента.Net:
//Этот пример на языке программирования Перфолента.Net демонстрирует использование
//оператора цикла Для
//Формальное определение:
// Цикл Для повторяет блок операторов столько раз, сколько раз можно прошагать от начального значения
// до конечного с указанным шагом.
//
//Синтаксис:
// Для ИмяПеременнойЦикла [тип ТипПеременнойЦикла] = НачальноеЗначение По КонечноеЗначение [Шаг ЗначениеШага] [Цикл]
// БлокОператоровТелаЦикла
// [Иначе
// БлокОператоровСекцииИначе]
// КонецЦикла;
//где,
// - ИмяПеременнойЦикла и ТипПеременнойЦикла - определяю переменную, содержащую текущее значение для каждой итерации цикла;
// - НачальноеЗначение - значение, присваиваемое переменной цикла перед первой итерацией;
// - КонечноеЗначение - значение, при достижении которого цикл закончится;
// - ЗначениеШага - значение, которое прибавляется к переменной цикла перед следующей итерацией;
// - БлокОператоровТелаЦикла - операторы, которые будут выполняться, пока значение переменной цикла меньше или равно конечному значению.
// - БлокОператоровСекцииИначе - операторы, которые будут выполняться, если ни одной итерации цикла не произойдет.
// Указанные в квадратных скобках части синтаксиса не являются обязательными и могут быть пропущены.
//
//Особенности:
// - Имя переменной цикла может указывать на переменную определенную ранее. В этом случае указание типа переменной не допускается;
// - Если тип переменной цикла не указан и она не была определена ранее, то тип переменной цикла будет равен типу начального значения;
// - Тип конечного значения должен допускать операцию проверки на больше-меньше с типом переменной цикла;
// - Тип значения шага должен допускать операции сложение-вычитание с типом переменной цикла;
// - НачальноеЗначение, КонечноеЗначение и ЗначениеШага могут быть любыми допустимыми выражениями.
Программа ПримерОператораЦиклДля
Процедура Старт
//Сначала приведем простые примеры
//прямого и обратного циклов
//Прямой цикл - шаг больше нуля
ВыводСтроки "Прямой цикл Для:"
Для Значение = 10 По 30 Шаг 10
ВыводСтроки "Значение переменной цикла = "+Значение
КонецЦикла;
//Обратный цикл - шаг меньше нуля
ВыводСтроки "Обратный цикл Для:"
Для Значение = 40 По 20 Шаг -10
ВыводСтроки "Значение переменной цикла= "+Значение
КонецЦикла;
//Проверка пустого цикла
Для Инд = 1 По 2
КонецЦикла
ВыводСтроки "Простой цикл Для:"
Для Инд = 1 По 3 //слово Цикл не обязательно
ВыводСтроки "Инд = "+Инд
КонецЦикла;
ВыводСтроки "Цикл Для с шагом 3:"
Для Инд тип Целое = 1 По 9 Шаг 3 Цикл
ВыводСтроки "Инд = "+Инд
КонецЦикла;
ВыводСтроки "Цикл Для с шагом -3:"
Для Инд тип Целое = 9 По 1 Шаг -3 Цикл
ВыводСтроки "Инд = "+Инд
КонецЦикла;
ВыводСтроки "Цикл с проверкой секции Иначе:"
//прверим секцию Иначе
НачЗнач = 2
КонЗнач = 1
Для Инд = НачЗнач По КонЗнач
//сюда мы не попадаем, т.к. начальное значение больше конечного
ВыводСтроки "Выполнилось тело цикла..."
Иначе
ВыводСтроки "Выполнилась секция Иначе!!!"
КонецЦикла
НачЗнач = 1
КонЗнач = 2
Для Инд = НачЗнач По КонЗнач
//выполняется 2 раза
ВыводСтроки "Выполнилось тело цикла..."
Иначе
//сюда не попадаем
ВыводСтроки "Выполнилась секция Иначе!!!"
КонецЦикла
ВыводСтроки "Цикл Для с переменной цикла типа Вещ:"
//Цикл с дробным шагом
Для ВещИнд Тип Вещ = 1.1 По 2 Шаг 0.1 Цикл
//Тут из-за округлений при сложении может не выводиться 2, например, если начать с 1.1
//это надо учитывать при написании программ!!!!
ВыводСтроки "ВещИнд = "+ВещИнд
КонецЦикла;
ВыводСтроки "ВещИнд после цикла = "+(ВещИнд)
ВыводСтроки "Целое(ВещИнд) = "+Целое(ВещИнд)
ВыводСтроки "Цикл Для с переменной цикла типа Вещ с отрицательным шагом:"
//Цикл с дробным шагом
//Для ВещИнд=2 По 1 Шаг -0.1
Для ВещИнд = 2.0 По 1.1 Шаг -0.1
//Тут из-за округлений при сложении может не выводиться 1.1, например, если начать с 2.0
//это надо учитывать при написании программ!!!!
ВыводСтроки "ВещИнд = "+ВещИнд
КонецЦикла;
ВыводСтроки "ВещИнд после цикла = "+(ВещИнд)
ВыводСтроки "Целое(ВещИнд) = "+Целое(ВещИнд)
ВыводСтроки "Цикл Для типа Число (System.Decimal):"
Для ИндЧис тип Число=1.00000000000000002 По 1.00000000000000006 Шаг 0.00000000000000001 Цикл
ВыводСтроки "ИндЧис = "+ИндЧис
Если ИндЧис=1.00000000000000004 //слово Тогда не обязательно
Прервать;
КонецЕсли;
КонецЦикла;
ВыводСтроки "Цикл Для типа Число (System.Decimal) с отрицательным шагом:"
Для ИндЧис тип Число = 1.00000000000000006 По 1.00000000000000002 Шаг -0.00000000000000001 Цикл
ВыводСтроки "ИндЧис = "+ИндЧис
Если ИндЧис = 1.00000000000000004 //слово Тогда не обязательно
Прервать;
КонецЕсли;
КонецЦикла;
ВыводСтроки "Цикл Для с изменением значений переменных в теле цикла:"
ПерИнд = 1
ПерПо = 20
ПерШаг = 1 //???????? в данном случае изменение переменной ПО должно влиять на выполнение цикла
Для ПерИнд По ПерПо Шаг ПерШаг Цикл
ПродолжитьЕсли ПерИнд = 4
ВыводСтроки "Инд = "+ПерИнд+" По = "+ПерПо+" Шаг = "+ПерШаг
ПрерватьЕсли ПерИнд = 10
ПерИнд += 1
ПерПо -= 1
ПерШаг += 1
КонецЦикла;
ВыводСтроки "Цикл Для с неявным преобразованием типа в шаге:"
Перем ПерШагЧис тип Число = 1
Для Инд = 1 По 6 Шаг ПерШагЧис Цикл
ВыводСтроки "Инд = "+Инд+" ПерШагЧис = "+ПерШагЧис
ПерШагЧис += 0.4;
КонецЦикла;
ВыводСтроки "Циклы по алфавиту:"
//К сожалению, какой-то баран в русском алфавите поставил букву Ё не на своё место...
//Украине повезло еще меньше... буквы І,Ї,Є тоже находятся чёрт знает где, а не на своих местах...
//Поэтому циклы по кириллическим алфавитам будут не так полезны, как по английскому....
Стр = "";
Для Инд = 0 По 32
Стр &= ("а"с + Инд) //тут нужны скобки, что бы сначала выполнилось сложение символ+Число
КонецЦикла
ВыводСтроки Стр
Стр = "";
Для Инд = 32 По 0 Шаг -1
Стр &= ("а"с + Инд) //тут нужны скобки, что бы сначала выполнилось сложение символ+Число
КонецЦикла
ВыводСтроки Стр
Для СимИнд тип Символ = "А"с По "Д"С Шаг 2 //операция Символ+Число
ВыводСтроки СимИнд
КонецЦикла
Для СимИнд тип Символ = "Д"с По "А"С Шаг -2 //операция Символ-Число
ВыводСтроки СимИнд
КонецЦикла
ВыводСтроки "Цикл по датам:"
//даты представлены в системном и каноническом форматах
Для ндн = '01.01.2010' По '20100105' Шаг 2*86400
ВыводСтроки "Дата = " + ндн
ПродолжитьЕсли Да и Правда // :) просто тест
КонецЦикла
Для ндн = '05.01.2010' По '20100101' Шаг -2*86400
ВыводСтроки "Дата = "+ндн
ПродолжитьЕсли Да и Правда // :) просто тест
КонецЦикла
//=== Вложенные циклы ====
ВыводСтроки "Проверка вложенных циклов..."
Для Инд = 1 По 5
Для Инд2 = 1 По 1
Выраж1 = 5
Пока Выраж1 > 3
Выраж2 = 0
Цикл
ВыводСтроки ""+Инд+", "+Выраж1+", "+Выраж2
ПрерватьЕсли Выраж2 = 1
Выраж2 += 1
Продолжить;
ВыводСтроки "Не выйдет"
КонецЦикла
Выраж1 -= 1
Продолжить;
ВыводСтроки "Не выйдет"
КонецЦикла
КонецЦикла
Прервать Если Инд = 3;
Продолжить Если Инд < 3;
ВыводСтроки "Не выйдет"
КонецЦикла
//проверим переходы из защищенных блоков Попытка/Исключение
Для ИЦА = 1 По 2
Попытка
Если ИЦА = 1 Тогда
Продолжить
Иначе
фу = ИЦА / 0
КонецЕсли
Исключение
ВыводСтроки "Поймали ИЦУ"
ПродолжитьЕсли ИЦА = 2
КонецПопытки
КонецЦикла
Для ИЦА = 1 По 2
Попытка
Прервать Если ИЦА = 1
Исключение
КонецПопытки
КонецЦикла
Для ИЦА = 1 По 2
Попытка
Прервать Если ИЦА = 2
фу = ИЦА / 0
Исключение
ВыводСтроки "Поймали ИЦУ"
Прервать Если ИЦА = 1
КонецПопытки
КонецЦикла
//вложенные циклы для обхода двухмерного массива
А = 0
Массив МойМассив[1, 1] Тип Целое = А++ //заполним массив индексами
Для Инд1 = 0 По 1
Для Инд2 = 0 По 1
ВыводСтроки МойМассив[Инд1, Инд2]
КонецЦикла
КонецЦикла
ВыводСтроки "Конец программы..."
ВводСтроки
КонецПроцедуры
КонецПрограммы
К началу статьи
Вернуться в раздел:
Примеры по языку Перфолента.Net
Перейти в раздел:
Примеры