Язык программирования Перфолента.Net - Официальный сайт

 Язык программирования Перфолента.Net - Официальный сайт.

Поиск   
Главная :: О проекте :: Контакты :: Обратная связь :: Благодарности :: ВходГость

   >   >   > 


Пример «Цикл Для»

Файлы:

  • Синтаксис языка
    • Операторы
      • Циклы
        • Цикл Для.пфл

Пример программы на языке программирования Перфолента.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

Перейти в раздел:
Примеры
  Поддержи проект!

Вы можете поддержать разработку Перфоленты, перечислив любую удобную сумму, которая пойдет на развитие языка и поддержку инфраструктуры сайта.

  Новости:
      21.01.2026 На сайт добавлена статья "Конструируем класс. События"
      20.01.2026 Опубликован новый релиз 0.4.18.0_NY языка программирования Перфолента.Net
      29.12.2025 Анонс: Новая возможность - разрабатываем веб-сайты, веб-приложения и веб-API на Перфоленте!
      07.06.2025 Небольшие дополнения к документации на сайте - описание атрибута поля &Атомарное
      09.05.2025 На сайте опубликован релиз 0.4.16.0_SE дистрибутива языка программирования Перфолента.Net
      27.04.2025 Дополнена статья про циклы
      04.01.2025 Опубликован новый релиз дистрибутива языка программирования Перфолента.Net версии 0.4.15.0_CE
      23.09.2024 Опубликована новая статья: "Конструируем класс. Делегаты."
      30.08.2024 Опубликован новый релиз дистрибутива языка программирования Перфолента.Net версии 0.4.14.0
      24.05.2024 Обновлён справочный раздел сайта
      01.07.2023 Новая версия 0.4.13.0 языка программирования Перфолента.Net
       Все новости