Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
  • Страница 1 из 1
  • 1
Модератор форума: Peter, DEMBEL  
Loop(Цикл) на NeoBook
СергейДата: Сб, 12 Февраля 2011, 18:50 | Сообщение # 1
Необукер
продолжаем серию уроков для новичков
Итак, цикл, любая многократно исполняемая последовательность инструкций
Ну, тут все понятно - повторяем определенные инструкции столько, сколько нам нужно.
Но непонятно, как это работает?! да уж, без примера не обойтись
Создаем новый проект, кидаем на страницу два объекта 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 :D

Есть еще команда WhileEx. Это тоже самое, что и While, но с несколькими условиями
Пример: как и предыдущий, но с дополнительным условием, т.е. некий флаг
Quote
SetVar "[file_exs]" "False"
.дополнительный флаг-переменная [flag]
SetVar "[flag]" "0"
WhileEx "[file_exs] = FalseAND [flag] = 1"
FileExists "[PubDir]test.txt" "[file_exs]"
SetVar "[rezult]" "[rezult] Повторение № [j][#13]"
SetVar "[j]" "[j]+1"
EndWhile

Условие будет выполняться до тех пор, пока не будет создан файл, и переменная-флаг не примет значение 1
------------------------------------------
Но допустим возникла ситуация выйти из цикла преждевременно, не дожидаясь полного прохода?!
И на этот случай есть палочка выручалочка это две команды, ExitLoop и ExitWhile
ExitLoop для выхода из цикла Loop, а ExitWhile соответственно While/WhileEx
Вот простенький пример применения команды
Loop
Quote
SetVar "[rezult]" ""
Loop "1" "10" "[j]"
If "[j]" "=" "5"
ExitLoop
EndIf
SetVar "[rezult]" "[rezult] Повторение № [j][#13]"
EndLoop
Как только счетчик-j достигнет 5 круга, сработает команда ExitLoop
While
Quote
SetVar "[file_exs]" "False"
SetVar "[flag]" "0"
While "[file_exs]" "=" "False"
If "[flag]" "=" "1"
ExitWhile
EndIf
SetVar "[j]" "[j]+1"
FileExists "[PubDir]test.txt" "[file_exs]"
SetVar "[rezult]" "[rezult] Повторение № [j][#13]"
EndWhile
Тут остановка цикла произойдет, когда переменная [flag] будет равна 1
-------------------------------------------
Примеры естественно не жизненные, но надеюсь, поможет понять циклы
Прикрепления: 2948004.jpg (34.4 Kb) · 0856437.jpg (28.5 Kb) · 4929369.jpg (12.8 Kb) · 5309223.jpg (33.0 Kb) · 3605244.jpg (16.8 Kb)


Сообщение отредактировано
Сергей - Вт, 23 Августа 2011, 20:17
 
Сообщениепродолжаем серию уроков для новичков
Итак, цикл, любая многократно исполняемая последовательность инструкций
Ну, тут все понятно - повторяем определенные инструкции столько, сколько нам нужно.
Но непонятно, как это работает?! да уж, без примера не обойтись
Создаем новый проект, кидаем на страницу два объекта 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 :D

Есть еще команда WhileEx. Это тоже самое, что и While, но с несколькими условиями
Пример: как и предыдущий, но с дополнительным условием, т.е. некий флаг
Quote
SetVar "[file_exs]" "False"
.дополнительный флаг-переменная [flag]
SetVar "[flag]" "0"
WhileEx "[file_exs] = FalseAND [flag] = 1"
FileExists "[PubDir]test.txt" "[file_exs]"
SetVar "[rezult]" "[rezult] Повторение № [j][#13]"
SetVar "[j]" "[j]+1"
EndWhile

Условие будет выполняться до тех пор, пока не будет создан файл, и переменная-флаг не примет значение 1
------------------------------------------
Но допустим возникла ситуация выйти из цикла преждевременно, не дожидаясь полного прохода?!
И на этот случай есть палочка выручалочка это две команды, ExitLoop и ExitWhile
ExitLoop для выхода из цикла Loop, а ExitWhile соответственно While/WhileEx
Вот простенький пример применения команды
Loop
Quote
SetVar "[rezult]" ""
Loop "1" "10" "[j]"
If "[j]" "=" "5"
ExitLoop
EndIf
SetVar "[rezult]" "[rezult] Повторение № [j][#13]"
EndLoop
Как только счетчик-j достигнет 5 круга, сработает команда ExitLoop
While
Quote
SetVar "[file_exs]" "False"
SetVar "[flag]" "0"
While "[file_exs]" "=" "False"
If "[flag]" "=" "1"
ExitWhile
EndIf
SetVar "[j]" "[j]+1"
FileExists "[PubDir]test.txt" "[file_exs]"
SetVar "[rezult]" "[rezult] Повторение № [j][#13]"
EndWhile
Тут остановка цикла произойдет, когда переменная [flag] будет равна 1
-------------------------------------------
Примеры естественно не жизненные, но надеюсь, поможет понять циклы

Автор - Сергей
Дата добавления - 12 Февраля 2011 в 18:50
СергейДата: Сб, 12 Февраля 2011, 19:23 | Сообщение # 2
Необукер
Решил дополнить урок еще одним примером.
Задача: Присвоить одинаковое значение для переменных с разными именами
Объявим переменные, которые надо изменить. Количество может быть любое
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"
В итоге имеем разноименные переменные с одинаковыми значениями
Прикрепления: 0125.rar (3.5 Kb)


Сообщение отредактировано
Сергей - Вт, 23 Августа 2011, 20:19
 
СообщениеРешил дополнить урок еще одним примером.
Задача: Присвоить одинаковое значение для переменных с разными именами
Объявим переменные, которые надо изменить. Количество может быть любое
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"
В итоге имеем разноименные переменные с одинаковыми значениями

Автор - Сергей
Дата добавления - 12 Февраля 2011 в 19:23
PeterДата: Сб, 12 Февраля 2011, 21:00 | Сообщение # 3
Админ NeoBook
Граждане необукеры!

Давайте в разделе статей обсуждать только сами статьи, а не вспомогательные вопросы!

Все, не относящееся к обсуждению непосредственно темы статей, будет удаляться!

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

Флуд удален!


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
СообщениеГраждане необукеры!

Давайте в разделе статей обсуждать только сами статьи, а не вспомогательные вопросы!

Все, не относящееся к обсуждению непосредственно темы статей, будет удаляться!

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

Флуд удален!


Автор - Peter
Дата добавления - 12 Февраля 2011 в 21:00
bodunovaДата: Вс, 29 Января 2012, 15:15 | Сообщение # 4
Новичок
И снова - браво!..) Прочитала.. Попробовала применить к задаче, которую вчера мне помогали решить.. всем миром..:) - все получилось:)

А "жизненная" тема для иллюстрации циклов - это как Том Сойер красил забор тетушки Полли..:)))
 
СообщениеИ снова - браво!..) Прочитала.. Попробовала применить к задаче, которую вчера мне помогали решить.. всем миром..:) - все получилось:)

А "жизненная" тема для иллюстрации циклов - это как Том Сойер красил забор тетушки Полли..:)))

Автор - bodunova
Дата добавления - 29 Января 2012 в 15:15
  • Страница 1 из 1
  • 1
Поиск: