Если вы не читали первую часть гайда, то вам сюда ->
ТЫКНИ МЕНЯ!
Добро пожаловать во вторую часть гайда по kOS. В этом разделе мы разберемся в циклах. Циклы по сути являются практически основной опорой работы большинства программ. Так почему же?
Цикл, позволяет нам проверять какие-либо значения и даже несколько значений одновременно и совершать для тех или иных условий необходимые нам действия. Если приведем небольшую аналогию. Дома,к примеру, мы должны проследить за чайником и ванной. Чайник греется и ванна набирается одновременно. Если бы мы следили без цикла, то мы бы стояли у чайника и ждали пока он вскипит, когда ванна затапливала уже крыс в подвале. Если бы мы следили циклом то мы бы постоянно бегали между кухней и ванной и смотрели бы за обоими предметами с небольшим промежутком времени. Аналогия понятна думаю.
Для чего нужны циклы:
- Для серьёзных программ с разветвленной системой выборов. (Посадка, КруизКонтроль, Перелёты, Авионики-помошники и т.п.)
- Для инфоэкранов, что бы всегда видеть на консоле актуальную информацию.
- Для тестов команд и изучения кОС. (Даже самую непонятную команду можно удачно прогнать циклом и точно понять как она работает)
Для простоты обучения я буду разбирать один цикл. Его хватит для всего. К тому же раньше особо больше циклов и не было, возможно с новыми обновлениями добавили еще чего, но это не имеет значение. 99,9% программ вы сможете заточить под этот цикл.
Итак-с команда
UNTIL.
UNTIL с англ. переводится как - ДО, НЕ РАНЬШЕ, ДО ТЕХ ПОР ПОКА. И эти слова полностью описывают работу этой команды.
Пишеться это так:
UNTIL "УСЛОВИЕ"{
"ТЕЛО ЦИКЛА"
}
Фигурные скобочки обязательны(!) ставьте их сразу, и внутри них пишите цикл. Главное не перепутать принцип работы к примеру цикл:
UNTIL X=1{"ТЕЛО ЦИКЛА"
}
Будет работать
до тех пор пока X не станет равен единице(!), а НЕ ПОКА Х=1. Это разграничение как раз есть в паскале, но тут я об этом решил не писать.
Тоесть к примеру нижеприведенная программа, пишет в столбик числа от 10,9,8.. и так до 1. Как только значение Х примет единицу и закончится тело цикла, цикл остановиться и код пойдет дальше. Просто в данном случае после цикла ничего нет поэтому программа завершиться.
SET X TO 10.
UNTIL X=0{Print X. SET X TO X-1.} \\ Напоминаю что можно писать команды в одну строку, главное правильно расставлять точки.
Очень важно понимать, что проверяется чему равен в вышеприведенном случае Х не 24 на 7, а только когда цикл заканчивается и идет на следующую итерацию. Один прогон цикла - называется
Итерацией. Запомните это хорошее слово. В Вышеприведенном случае, на первой итерации цикла напечатается 10, на второй 9 и т.д.
Еще раз усвоили и повторили. Цикл UNTIL проверяет своё условие (работать ему или нет)
ПЕРЕД каждой итерацией, не во время итерации, не после, а именно
ПЕРЕД. Это на самом деле важно, потому что при составлении сложных программ это будет иметь значение, и нужно будет учитывать что именно
ПЕРЕД. Опять же в паскале существует три вида циклов два из которых отличаются друг от друга тем, что один смотрит на условие перед выполнением цикла, а другой после его выполнения, но это так, лирическое отступление.
UNTIL можно использовать в команде WAIT. Сама комбинация слов Wait Until переводиться как - Жди до тех пор.
К примеру так:
Wait until GroundSpeed > 5. \\ Если перевести опять же дословно, то будет так - Жди до тех пор пока скорость относительно поверхности не будет выше 5 м\с
Wait until Altitude > 2000 \\ Жди до тех пор пока высота не будет выше 2000 м. Главное не перепутать.
К тому же Until немногочисленная команда после которой не стоит ставить точку, правда обязательно надо ставить квадртаные скобки.
Цикл Until можно сделать бесконечным, указав выходом из цикла переменную с таким значением, которого она никогда не достигнет или поступить еще проще написав
Until 0{"ТЕЛО ЦИКЛА"}
Для выхода из бесконечных циклов существует несколько команд (по сути одна, но если у вас после цикла кода больше нет, то можно изучить еще одну команду.)
Итак пример бесконечного цикла и команды BREAK.
Set x to 0. \\ Задаем Х значение 0
Until 0{ \\ Задаем бесконечный цикл
clearscreen. \\ Чистим экран. На каждой итерации очищает экран.
print X. \\ Пишим X на экран
set x to x+1. \\ Добавляем к Х единицу
wait 0.5. \\ Ждем пол секунды
IF X>10 BREAK.} \\ Если Х>10 используем команду BREAK.
Итак команда
BREAK. Прерывает цикл. Ей неважно какие условия, какой цикл, что было в цикле и что будет, она просто его завершает и ваша программа продолжает выполнятся дальше(все что стоит после закрытие фигурных скобок.) Забавно, но BREAK
не работает по условию WHEN THEN, а так же по условиям Action Group-ов. Вполне корректно она ведет себе на условии IF(если), и просто сама по себе без всяких условий. (Об условиях и мат логике мы поговорим в следующем гайде).
Если ваша программа состоит из Цикла и команд написанных до этого цикла, то остановка цикла, в большинстве случае будет эквивалентна завершению программы. Завершить программу можно простой командой REBOOT - перезагружает консоль. Команда REBOOT работает везде и в WHEN THEN и с помощью Action Group-а, и куда только его не вставь, но эта программа перезагрузит консоль и по сути сразу же завершит программу, как только сработает. К примеру в вышеописанном примере замена BREAK на REBOOT, имела по сути одинаковый результат.
Закрепим материал, подкрепив всё это дело основными тезисами о нашем цикле UNTIL.
Цикл UNTIL:
1. Переводиться как ДО, ДО ТЕХ ПОР ПОКА, НЕ РАНЬШЕ.
2. Повторяет ТЕЛО ЦИКЛА написаное в фигурных скобках после условия выполнения Цикла
("КОМАНДА UNTIL""УСЛОВИЕ"{"ТЕЛО ЦИКЛА"})
3. Проверяет условие на истинность ПЕРЕД каждой итерацией.
4. Можно использовать с командой Wait.
5. Можно задавать бесконечный цикл написав UNTIL 0 {"ТЕЛО ЦИКЛА"}
6. Не требует точек НИ ПЕРЕД открытием фигурных скобок НИ ПОСЛЕ ИХ ЗАКРЫТИЯ. (Внутри скобок точки обязательно должны быть расставлены)
7. Из бесконечного цикла можно выходить командой BREAK. или завершив программу и перезагрузив консоль командой REBOOT.
8. Может быть вложенным (Пока что не разбираем)
Ну и небольшая программка-бонусом:
Обратный отсчет перед стартом, отсчитывает от 10 до 1 после чего активирует ступень.
SET CD TO 10.
Until CD=0{
Set CD TO CD - 1.
WAIT 1.
PRINT "COUNTDOWN IS... "+CD.}
STAGE.
Итак, гайд получился достаточно компактным и разобрал одну небольшую тему. Тем не менее, тема достаточно важная и, я надеюсь, вы её хорошо усвоили. Следующий гайд будет по условиям и мат логике, по формату такой же как и этот. Ну а дальше мы уже в полной мере сможем без зазрения совести приступить к самому интересному - прикладной части нашего программирования. К сожалению, я немного не уложился в свои планы, я хотел выдать циклы, и условия одним гайдом, но боюсь у вас в головах возникнет каша "дружба народов":)
Надеюсь всем было интересно. Оставляте вопросы
в теме на форуме и пишите свои отзывы в комментариях. С вами был Finn, до новых встреч!!