• Безымянный 222304

  • Яма плюс - справочьник - кусок 13.

  • // куски справочьника ...

    // Цыкличьность - варианты закольцованого кода
    // ----------------- 10

    Когда возникает потребность исполнить некий код несколько раз, то можно каким-то
    образом напечятать код несколько раз (с помошью "#ввиду" или просто скопировав текст).
    Однако есть другой способ.
    Накрут (накручивать) - термин обозначяет блок закольцованого кода.
    Итэрацыя - прохождение одного витка накрута.

    "+круг" - это особый знаковый оператор "плюс круг", который в тексте записывается
    слитным сочетанием плюсика и слова, а рисуется своей картинкой.
    Этот оператор является чястью фигурной скобки закрытия блоков типа "яма".

    Есть несколько разно-видностей накрута, но все они начинаются со слова "яма".

    чи31 !! клв = 5; // количество жэлаемых итэрацый.
    яма( клв) // сюда будет перескок после "клв -= 1"
    {
      эн_проца( ); // в даном случие, этот вызов процы и есть "вся итэрацыя".
    } +круг(1) { /* блок финиш-старт */ клв -= 1;}

    Вышэ пример нормального накрута. Обрати внимание, что "маркер исполнения операцый"
    сначяла повстречяет развилку "яма" и осознает факт того, что условие совпадает
    (переменка "клв" не хранит в себе ноль и поэтому ворота развилки открыты).
    Маркер входит в яму, исполняет там вызов процэдуры "эн_проца" и выходит из ямы.
    Но тут, вместе с фигурной скобкой закрытия ямы, маркер видит особый оператор "+круг".
    Это означяет, что маркер должэн проверить условие в круглых скобках от "плюс круг".
    Если условие не нолевое, то маркер исполнит приклееный блок "финиш-старт", а потом
    прыгнет вверх, чтобы заново попытаться войти в блок ямы и снова вызвать "эн_проца".
    Но если условие нолевое, то маркер сразу окажэтся за фигурной скобкой закрытия
    блока "финиш-старт" и как-бы продолжыт исполнять какие-то операцыи, которые ужэ
    не относятся к примеру нашэго накрута.

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

    чи31 !! доп_раз = 0; // доп(олнительных)_раз получяет НОЛЬ
    яма(1)
    {
      эн_проца( );
    } +круг( доп_раз) { /* блок финиш-старт */ доп_раз -= 1;}
    А вот здесь пример "финишное условие круга". Тоесть маркер обязательно совершыт одну
    итэрацыю, а потом всё зависит от значения, которое хранится в переменке "доп_раз".
    Маркер можэт и вернуться для повторного прохождения, но в даном случие, число ноль
    заставляет маркер сразу оказаться за фигурной скобкой закрытия блока "финиш-старт".

    К образу накрутов нужно просто привыкнуть.

    Внедрить накрут в "открытую яму" - это один из обычных приёмов обособления накрута.
    яма(1) //вечьно открытая яма // не обязательно печятать (1) после "яма"
    {

     чи31!! клв = 8; // локальная переменка блока "яма(1)"
     яма(клв)
     {
      эн_проца( );
     } +круг {клв -= 1;} // в тексте не обязательно печятать (1) после оператора "плюс круг"

    }

    Если вместо единицы напечятать ключевое слово "паралели", то это повторяет единицу
    и говорит авто-помошнику о том, что накрут внутри такой ямы нужно постараться
    экспортировать-скомпилировать для много-ядерных компьютеров, потому-что подразумевается,
    что каждую итэрацыю можэт исполнять отдельное ядро. Например, если ядер будет 8 и у нас
    накрут из восьми раз, то все восемь ядер одно-времено исполняют свою одну итэрацыю и
    весь накрут исполняется почьти в восемь раз быстрее.
    яма( паралели) //вечьно открытая яма с жэланием оптимы под много-ядерные системы.
    {
     чи31!! клв = 8;
     яма(клв)
     {
      эн_( );
     } +круг(1) {клв -= 1;}

    // "паралели" накладывают на програмиста доп ограничения - авто-помошник будет проверять
    // правильность использования "жэлания паралельности".

    // Основное правило - код итэрацыи должэн быть островом, который не знает про соседей.
    }
    В любом случие, програмист не должэн вникать в то, как будет реализована паралельность.
    Достаточьно не пытаться обмануть авто-помошника, который следит за нарушэниями паралельности.
    // Возможно, паралели будут разрешэны только для Механизмов (подобие класов с++).

    Нижэ пример бесконечьного накрута, где внутри ешё один накрут.
    яма(1) // здесь начинается оболочька .
    {
      чи31 !! клв = 0; // локальная переменка для оболочьки - значит и для обоих накрутов.

      яма(1) // начяло бесконечьного.
      {
      яма(клв < 5) // ворота вложэного накрута.
      {
      п( некая_функцыя( ) ) круг;
      // Если функцыя вернула "что-то кроме ноля", тогда маркер должэн завершыть итэрацыю
      // текушего накрута - прыгнуть к нужному оператору "плюс круг" и проверить его условие.
      // В даном случие, маркер попадёт в блок "финиш-старт2", где прибавит "клв" и тут-жэ
      // прыгнет к воротам "яма(клв < 5)".

      некий_код( );

      } +круг(1) { /* финиш-старт2 */ клв += 1; }

      клв = 0; // без этого только первые разы сработает условие "яма(клв < 5)"

     п( глобальный_сигнал_выхода) лом;
     // Если некие нажатия клавиш оформили этот сигнал, то из-за слова "лом", маркер
     // мигом выпрыгивает из "текушего накрута" - в даном случие, из бесконечьного.

      } +круг // одинокий оператор "плюс круг" означяет бесконечьный повтор.
      // вот сюда попадает маркер после слова "лом".

    }

    Авто-помошник всегда рисует стрелочьки и текстовые подсказки, если кликнуть мышкой
    по словам.. дом, лом, круг, итог.
    Тоесть можно не запоминать "правила поведения маркера в накрутах", если печятать код
    только в редакторах, которые подробно показывают "путь маркера исполнения операцый".
    // Всё само осознается и запомнится при талантливой визуализацыи.

    // прыг-скок на восток
    Накрут - это название офицыальной закольцовки.
    Можно сделать самодельную закольцовку, использую ключевые слова "порт" и "прыг".
    чи31 !! шо = 3; // создадим переменку для счёта повторов.
    порт Восток; // обозначим точьку-метку //такое выражэние всегда занимает всю строку.
    // здесь нельзя создавать переменки, потому-что здесь "прыг-портовый" учясток.
    некий_код( );
    шо = шо - 1; п( шо) прыг Восток; // прыгнуть в указаный порт, если условие не нолевое.
    // здесь ужэ можно создавать переменки, потому-что "прыг" на строчьке вышэ.
    Прыжок исполняется только внутри одной процэдуры (в любую сторону к нужной метке).
    Порт-метку нельзя обозначять внутри накрутов (внутри нормальных накрутов).
    И вобше, рекомендуется не использовать в своём коде слова "порт" и "прыг",
    потому-что они могут создавать опасные глюки-ошыбки.

    // финиш кусок 10
     


























































































  • Безымянный 222304

  • Яма плюс - справочьник - кусок 13.