Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
продолжаем серию уроков для новичков Итак, цикл, любая многократно исполняемая последовательность инструкций Ну, тут все понятно - повторяем определенные инструкции столько, сколько нам нужно. Но непонятно, как это работает?! да уж, без примера не обойтись Создаем новый проект, кидаем на страницу два объекта TextEntry и кнопку Задаем TextEntry1 переменную [counter]-тут будем назначать конечное значение для цикла. А TextEntry2 [rezult]-тут будет отображаться результат выполнения
Пока остановимся на практике и немного теории: Существует несколько видов циклов, но мы разберем только два, которые есть в НБ ----------------------------- Цикл с предусловием Повторять последовательность команд между "While" и "EndWhile" до тех пор, пока выполняется указанное условие. Синтаксис: While "параметр1" "оператор" "параметр2" где: параметр1 Первый элемент, участвующий в операции сравнения. Может содержать текст, числа, математическое выражение, переменные, и т.д. оператор Оператор сравнения может быть одним из ниже перечисленных: =Первый элемент, участвующий в сравнении, равен второму. <Первый элемент, участвующий в сравнении, меньше второго. >Первый элемент, участвующий в сравнении, больше второго. <>Первый элемент, участвующий в сравнении, не равен второму. <=Первый элемент, участвующий в сравнении, меньше или равен второму. >=Первый элемент, участвующий в сравнении, больше или равен второму. параметр2 Второй элемент, участвующий в операции сравнения. Может содержать текст, числа, математические выражения, переменные и т.д.
пример: нам надо сделать некое действие, до тех пор, пока счетчик не будет равен 10 вначале счетчик равен 0 SetVar "[counter]" "0" выполняем цикл While "[counter]" "<" "10" Вот тут мы записываем наши команды, все, что записывается между While и EndWhile наз-ся телом цикла Мы же запишем просто результат цикла в переменную. SetVar "[result]" "[result][counter]" прибавляем к [counter] +1, ведь инструкция один раз выполнилась, если этого не сделать, то цикл будет выполняться вечно... SetVar"[counter]" "[counter]+1" EndWhile Как только [counter] достигнет 10, цикл прекратится ----------------------------- Простой цикл Повторение серии команд указанное количество раз. Синтаксис: Loop "начало цикла" "остановить цикл" "счетчик цикла" где: начало цикла Начальное значения для цикла. остановить цикл Конечное значение для цикла. счетчик цикла Имя переменной для хранения текущего значения счетчика. (обязательно)
Команды между "Loop" и "EndLoop" будут исполняться, пока счетчик цикла не примет значение равное конечному значению остановить цикл для цикла.
пример: Loop "1" "10" "[counter]" Вот тут мы записываем наши команды, все, что записывается между Loop и EndLoop наз-ся телом цикла Мы же запишем просто результат цикла в переменную. SetVar "[result]" "[result][counter]" EndLoop Как только [counter] достигнет 10, цикл прекратится ----------------------------- Теперь и мы создадим простой цикл в нашем проекте, открываем вкладку "Команды" в объекте PushButton(Кнопка) и мы записываем следующие строки:
Quote
.Для начала очистим переменную [rezult] от предыдущих результатов SetVar "[rezult]" "" .теперь зададим сам цикл, начало цикла будет равно 1, конец цикла =[counter] и счетчик цикла =[j]. Кстати, так повелось, что переменную-счетчика чаще ставят латинскую букву i или j. Но, вы можете ставить любую букву или слово, главное, чтоб вам было понятно. Loop "1" "[counter]" "[j]" запишем работу цикла в переменённую SetVar"[rezult]" "[rezult]Повторение № [j][#13]" EndLoop
Как только [j] достигнет числа указанного в [counter], цикл прекратится.
протестим наш пример, введем в поле кол. повторений например 5 и нажмем кнопку "ОК"
Можно проиграться с числом повторений, и цикл прилежно будет повторять заданное число раз СТОП! это все замечательно, но, а если понадобится выполнить неизвестное число повторений?! Как тогда быть? Ведь мы знаем только одно, оно-событие должно случиться?! вот так задачка... Чип и Дейл спешат на помощь Но есть решение-это цикл с предусловием While пример (что то нормальный пример не смог придумать, решил показать на таком): мы должны периодически проверять директорию на предмет появления определенного файла, но мы не знаем наверняка, когда это случится
Quote
. Объявляем переменой [file_exs] начальное значение False SetVar "[file_exs]" "False" .запускаем цикл While "[file_exs]" "=" "False" .проверяем директорию, если файл появится то [file_exs] станет True, и цикл прекратится FileExists "[PubDir]test.txt" "[file_exs]" EndWhile
Прошу заметить, если нет необходимости устанавливать счетчик, как в нашем примере, то его можно опустить.
Запустим пример. Я после, тогда как нажал кнопку, сразу же создал текстовой документ(test.txt) в директории проекта и цикл остановился на номере 182
Есть еще команда WhileEx. Это тоже самое, что и While, но с несколькими условиями Пример: как и предыдущий, но с дополнительным условием, т.е. некий флаг
Условие будет выполняться до тех пор, пока не будет создан файл, и переменная-флаг не примет значение 1 ------------------------------------------ Но допустим возникла ситуация выйти из цикла преждевременно, не дожидаясь полного прохода?! И на этот случай есть палочка выручалочка это две команды, ExitLoop и ExitWhile ExitLoop для выхода из цикла Loop, а ExitWhile соответственно While/WhileEx Вот простенький пример применения команды Loop
Тут остановка цикла произойдет, когда переменная [flag] будет равна 1 ------------------------------------------- Примеры естественно не жизненные, но надеюсь, поможет понять циклы
Решил дополнить урок еще одним примером. Задача: Присвоить одинаковое значение для переменных с разными именами Объявим переменные, которые надо изменить. Количество может быть любое SetVar "[sMs]" "125" SetVar "[sEr]" "685" SetVar "[sVt]" "268" SetVar "[sYt]" "589" ...................................... Теперь надо имена этих переменных загнать в массив, чтоб потом в цикле обращаться к ним. Для этой операции есть два способа: 1 способ Создать строку с именами и разделить их запятой SetVar "[sNameList]" "aMs,aEr,aVt,aYt" Потом эту строку разбить в массив StrParse "[sNameList]" "," "[aName]" "[count]" Мы имеем массив с именами переменных 2 способ Создать сразу массив SetVar "[aName1]" "aMs" SetVar "[aName2]" "aEr" SetVar "[aName1]" "aVt" SetVar "[aName2]" "aYt" Получаем общее кол-во массива GetArrayInfo "[aName]" "" "" "[count]" ...................................... Перебираем и меняем значения Loop "1" "[count]" "[i]" Тут есть нюанс, для того чтоб из значения переменной сделать переменную, ее надо заключить в двойные квадратные скобки SetVar "[[aName[i]]]" "test" EndLoop Удаляем использованный массив DeleteArray "[aName]" "All" В итоге имеем разноименные переменные с одинаковыми значениями
Давайте в разделе статей обсуждать только сами статьи, а не вспомогательные вопросы!
Все, не относящееся к обсуждению непосредственно темы статей, будет удаляться!
Я уж было почистил соседнюю ветку, так в этой теперь то же самое начинается.
Флуд удален!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться