Автор: Finn Категория: Kerbal Space Program » Гайды

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

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


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

Добро пожаловать во вторую часть гайда по 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, до новых встреч!!

- + +35
У Вас НЕТ прав на выставление оценки для этой новости.
Для выставлени оценки необходимо пройти регистрацию на сайте.
Если Вы уже зарегистрировались, то войдите на сайт.
  1. {repa}
    Это veld veld - #1
    -2
    Первейший бысть, и с отроковицей не возлежал!

    (читаю,хоть и не использую...Ибо интересно)
    »
    Написано:
    Группа: Посетители, Публ/Комм: 0/131
     
  2. {repa}
    Это Finn Finn - #2
    -2
    Ая-яй переделаю завтра. В тексте есть вставки заключенные в знаки > и < и они не работают, видимо сайт их видит по другому. Не работают в плане там был текст, а в итоге он не показывается.... Завтра переделаю...
    »
    Написано:
    Группа: Стримеры, Публ/Комм: 34/101
    Летать и строить. Строить и летать.
     
  3. {repa}
    Это Kerbiter Kerbiter - #3
    -2
    Мне интересно - что это за язык (к какому наиболее приближен?)
    »
    Написано:
    Группа: Модераторы, Публ/Комм: 102/1 086
     
  4. {repa}
    Это Silver Silver - #4
    -1
    Мне Паскаль напоминает, когда я в него умел. Но это было так давно...
    »
    Написано:
    Группа: Гости, Публ/Комм: 0/0
     
  5. {repa}
    Это veld veld - #5
    -2
    Извините дилетанта....вначале UNTIL X=0{Print X. SET X TO X+1.}....может Х-1 ?
    »
    Написано:
    Группа: Посетители, Публ/Комм: 0/131
     
  6. {repa}
    Это Finn Finn - #6
    -1
    *ИСПРАВЛЕНО* поправил пару очевидных смысловых ошибок, и переносов.
    »
    Написано:
    Группа: Стримеры, Публ/Комм: 34/101
    Летать и строить. Строить и летать.
     
  7. {repa}
    Это DamnMan DamnMan - #7
    0
    Цитата: Silver
    Но это было так давно...

    ...и неправда peka
    На самом деле тоже Паскаль изучал, и чет неинтересно стало, забросил(
    »
    Написано:
    Группа: Посетители, Публ/Комм: 2/37
     
  8. {repa}
    Это Kerbiter Kerbiter - #8
    -1
    А я в нём щас разбираюсь)
    »
    Написано:
    Группа: Модераторы, Публ/Комм: 102/1 086
     
  9. {repa}
    Это Finn Finn - #9
    -1
    Паскаль некуда прикладывать, а кОС очень даже есть. В этом он конечно замечателен. Т.к. прикладной по кох некуда.
    »
    Написано:
    Группа: Стримеры, Публ/Комм: 34/101
    Летать и строить. Строить и летать.
     
  10. {repa}
    Это Gonzales_Gonzo Gonzales_Gonzo - #10
    0
    Плюс конечно по умолчанию за kOS,но циклы очень жиденько разобраны, одним UNTIL-ом мир не ограничивается.
    »
    Написано:
    Группа: Посетители, Публ/Комм: 0/103
     
  11. {repa}
    Это Finn Finn - #11
    -1
    В kOS других особо и нет\не было на момент моего изучения онного. Какие циклы ты предложил бы мне разобрать?
    »
    Написано:
    Группа: Стримеры, Публ/Комм: 34/101
    Летать и строить. Строить и летать.
     
  12. {repa}
    Это Gonzales_Gonzo Gonzales_Gonzo - #12
    -1
    Как минимум если часть касается разборов циклов, стоит упомянуть что-то, кроме UNTIL и показать отличия в применении, например для FOR или FROM.
    Для гайда "запустить здесь и сейчас" в принципе достаточно любого работающего, но статья могла быть полнее, если показывать и другие варианты.
    »
    Написано:
    Группа: Посетители, Публ/Комм: 0/103
     
  13. {repa}
    Это lllypa lllypa - #13
    +1
    Оформляй в ворде, в виде одной книги. Получится пухленький мануал. Пока в рамках еже.. дневных ...недельных публикация хорошо, но когда работа будет завершена хотелось бы иметь сборничек.
    »
    Написано:
    Группа: Хорошие люди, Публ/Комм: 2/85
     
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Чат
  • Трансляции
  • Информация
    На какой стороне Силы Вы?
Последние комментарии
  • Lynx Lynx написал в
    Обновление Kerbal Space Progra ... (всего 40 комм.)
    А ты эту надпись рассматривай не как название измеряемой величины, а как индикацию режима работы прибора (навбола). В буржуйляндии своя исторически сложившаяся парадигма подписей, которая с непривычки кажется идиотской.
    Или ты хочешь все надписи к ГОСТу свести? Тогда ок.
  • Bradley_ Bradley_ написал в
    Обновление Kerbal Space Progra ... (всего 40 комм.)
    "Лучшая игра всех времен и народов".

    НУ епт. Как было недоделанное говнище, так им и остается.
  • Pand5461 Pand5461 написал в
    Обновление Kerbal Space Progra ... (всего 40 комм.)
    Да нет, мне скорее резануло глаз то, что "начинать" - переходный глагол, а "стартовать" - непереходный и в данном случае похоже на кальку с английского.
    Т.е. можно "начать дело", но нельзя "стартовать дело" (на самом деле, встречаются выражения вроде "стартовать двигатель", но это жаргон, а не литературная норма).
  • TomKerman TomKerman написал в
    Проект «Вестфорд» или Шаттл " ... (всего 31 комм.)
    Спасибо за хороший шатл. Давно хотел сделать нечто такое но формата мк2.шняга поднималась до 40 км на двух рапирах. А вот ускорители я не додумался как туда засунуть.
  • Enceos Enceos написал в
    Обновление Kerbal Space Progra ... (всего 40 комм.)
    Мексиканцам нравится эта буква %) Она как буква "К" с зеркальным отражением. Получается двойное "К", вдвойне больше кербальности smiley
  • GektorZap GektorZap написал в
    Тайна Третьей Планеты & Kerbal ... (всего 8 комм.)
    Я был настроен до конца доделать.Но,тут вышла Сурга и я потратил на неё остатки пороха )
Все комментарии
Обновления на форуме
92 Всего
1 Польз.
91 Гостей
Google, Яндекс, Alexa, Oectacan
Онлайн список
Новостей на страницу:
Наверх