Изучаем kOS - Циклы [Гайд по kOS часть 2]

Kerbal Space Program » Гайды

Доброго времени, друзья!


Если вы не читали первую часть гайда, то вам сюда -> ТЫКНИ МЕНЯ!

Добро пожаловать во вторую часть гайда по 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, до новых встреч!!
Изучаем kOS - Условия Мат.Логика и AG [Гайд по kOS часть 3]
Изучаем kOS - Условия Мат.Логика и AG [Гайд по kOS часть 3]
20 дек 2015 в 15:03, Гайды
Введения в kOS [Гайд по kOS часть 1]
Введения в kOS [Гайд по kOS часть 1]
15 дек 2015 в 16:58, Гайды
  1. veld

    veld @Veld 17 декабря 2015 22:59

    Первейший бысть, и с отроковицей не возлежал!

    (читаю,хоть и не использую...Ибо интересно)

  2. Finn

    Finn @Николай 17 декабря 2015 23:04 Автор

    Ая-яй переделаю завтра. В тексте есть вставки заключенные в знаки > и < и они не работают, видимо сайт их видит по другому. Не работают в плане там был текст, а в итоге он не показывается.... Завтра переделаю...

  3. Kerbiter

    Kerbiter 17 декабря 2015 23:06

    Мне интересно - что это за язык (к какому наиболее приближен?)

  4. Silver

    Silver Гость 18 декабря 2015 00:31

    Мне Паскаль напоминает, когда я в него умел. Но это было так давно...

  5. veld

    veld @Veld 18 декабря 2015 02:40

    Извините дилетанта....вначале UNTIL X=0{Print X. SET X TO X+1.}....может Х-1 ?

  6. Finn

    Finn @Николай 18 декабря 2015 06:41 Автор

    *ИСПРАВЛЕНО* поправил пару очевидных смысловых ошибок, и переносов.

  7. DamnMan

    DamnMan @TD Kerman 18 декабря 2015 16:54

    Цитата: Silver
    Но это было так давно...

    ...и неправда peka
    На самом деле тоже Паскаль изучал, и чет неинтересно стало, забросил(

  8. Kerbiter

    Kerbiter 18 декабря 2015 17:51

    А я в нём щас разбираюсь)

  9. Finn

    Finn @Николай 18 декабря 2015 19:42 Автор

    Паскаль некуда прикладывать, а кОС очень даже есть. В этом он конечно замечателен. Т.к. прикладной по кох некуда.

  10. Gonzales_Gonzo

    Gonzales_Gonzo @Гонзо Гонзалес 20 декабря 2015 18:35

    Плюс конечно по умолчанию за kOS,но циклы очень жиденько разобраны, одним UNTIL-ом мир не ограничивается.

  11. Finn

    Finn @Николай 20 декабря 2015 21:37 Автор

    В kOS других особо и нет\не было на момент моего изучения онного. Какие циклы ты предложил бы мне разобрать?

  12. Gonzales_Gonzo

    Gonzales_Gonzo @Гонзо Гонзалес 20 декабря 2015 22:23

    Как минимум если часть касается разборов циклов, стоит упомянуть что-то, кроме UNTIL и показать отличия в применении, например для FOR или FROM.
    Для гайда "запустить здесь и сейчас" в принципе достаточно любого работающего, но статья могла быть полнее, если показывать и другие варианты.

  13. lllypa

    lllypa @Александр 21 декабря 2015 17:35

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

{login}
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите Ctrl+Alt