Изучаем kOS - Условия Мат.Логика и AG [Гайд по kOS часть 3]

Kerbal Space Program » Гайды

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


Добро пожаловать в третий гайд по языку kOS, в котором мы разберем условия и поговорим немного о мат логике и бонусом я расскажу про работу с Action Groups-ом.
Если вы не читали Первый и Второй гайд, рекомендую сначала ознакомиться с онными.
Первая часть
Вторая часть

Итакс, друзья начнем с команд условий на языке kOS. Условия позволяют нам писать разветвленные, сложные программы, а так же считать и подбирать нужные нам вещи и значения, что крайне важно. Имея в распоряжении, знания базовых Мат функций(что описывались в первом гайде) + знания циклов + знания условий(что включает в себя мат логику) + прикладные команды, мы получаем сильнейший в КСП инструмент по написанию самых сложных и вариативных программ, в любых сферах Cамолёты,Ракеты,Космолёты,Робототехника, Асистенты, Автопосадки, Автоперелеты, змейка на консоли в конце концов что бы скоротать перелёт или обитания на станции и т.д. до бесконечности)

Зная эти вещи мы можем писать абсолютно любой софт, ограниченный лишь нашим воображением. Для полного понимания работы условий и для их грамотного написания, нам необходимо знать некоторые базовые вещи по Мат Логике. Я расскажу их в кратце, что бы вы компактней и удобней могли работать с условиями.

Из Мат логики мы возьмем всего лишь два нужных "элемента" - Конъюнкцию и Дизъюнкцию, или проще говоря операторы "И"(AND) и "ИЛИ"(OR).
Такие операторы позволяют объединять и варьировать условия, к примеру вы можете включить cледующую ступень, когда у вас будет И необходимая высота И необходимая скорость и записать всё это одним условием, без всяких выкрутасов.

Самое главное -> Когда мы рассматриваем условия, мы рассматриваем их правдивость или ложность. Т.е. например:
Дано:
1.Наша высота = 1000 метров
2.Наша скорость = 100 м\с.

Мы начинаем проекру:
А.У нас высота БОЛЬШЕ 2000 метров?
Б.Наша скорость МЕНЬШЕ 150 м\С?

В условии (А) мы видим ложь т.е. на выходе получаем 0 (ложь),
В условии (Б) мы видим правду и получаем на выходе 1 (правда).
Так мы видим условия сами по себе, а теперь рассмотрим их взаимодействия друг с другом путём операторов "И" и "ИЛИ", что будет выдавать на выходе нам 1 или 0:
Условие А "И" Условие Б -> дадут нам ложь. Т.е. что бы получить отсюда правду, нужно что бы выполнялось И ПЕРВОЕ УСЛОВИЕ И ВТОРОЕ УСЛОВИЕ, если выполняется одно из них то на выходе мы получаем ложь.
Условие А "ИЛИ" Условие Б -> дадут на правду. Т.е. или одному условию или другому достаточно быть правдивым что бы на выходе получить ПРАВДУ.

Запомнить и соображать можно чисто логически, а можно используя эти операторы как знаки.
Оператор "И" это знак умножения, т.е:
1 условие_____2 условие
___0____________0________0*0=0. Т.е. при двух ложных условиях мы получим ложь на выходе.
___0____________1________0*1=0. т.е. при одном ложном условии мы получаем на выходе ложь.
___1____________0________1*0=0. См. выше.
___1____________1________1*1=1. Единственное условие при котором Конъюнкция выполняется. Когда И одно условие правдивое И другое.

Оператор "ИЛИ" это знак сложение, т.е.:
___0____________0________0+0=0. Ложно только если оба условия ложны.
___0____________1________0+1=1.
___1____________0________1+0=1.
___1____________1________1+1=1. Правда даже если оба условия выполняются.

При том не забывайте что условий может быть и 3 и 5 и сколько угодно, поэтому со знаками очень просто разобраться. К тому же мы можем писать условия
как примеры в школьной математике например так:
("УСЛОВИЕ 1" и "УСЛОВИЕ 2") или ("УСЛОВИЕ 3" и "Условие 1"). В данном примере выдастся правда, если УСЛОВИЕ 1 и 2 правдивые или если Условие 1 и 3 правдивы.
Допустим условие 2 и 3 правдивы, а условие 1 ложно, в этом случае из примера выйдет
(0*1)+(1*0) = 0 в итоге выдасться ноль. Думаю вы поняли как удобно использовать такие методы расчета и построения условия.
Главное помнить:
"И"(AND) это умножение "*"
"ИЛИ"(OR) это сложение "+"

Так к чему же нам нужны выходные Ложь и Правда? Для того чтобы понять нам нужно приступить к командам условий:
Команд условий всего 3 штуки, но по сути всего одна.

Команда "IF".
С английского переводиться - ЕСЛИ.
IF "УСЛОВИЕ(УСЛОВИЯ)"{"ТЕЛО КОМАНДЫ".} \\ Если условие(условия) выдадут на выходе правду, то сработает всё что написано в "ТЕЛЕ КОМАНДЫ", если же
условие(условия) выдадут ложь, то код пойдет дальше к следующим командам "ТЕЛО КОМАНДЫ" не выполняя.

IF ALTITUDE>2000 AND VERTICALSPEED KOMANDA SRABOTALA
Можно написать одно условие если хочется.
IF SAS = TRUE PRINT "SAS ON". \\ К тому же если у вас только одна команда в ТЕЛЕ КОМАНДЫ, то фигурные скобки можно не ставить. БУДЬТЕ ВНИМАТЕЛЬНЫ(!), если вы хотите чтобы выполнилось несколько команд в ТЕЛЕ КОМАНДЫ, не забудьте поставить фигурные скобки. Если вы их НЕ ПОСТАВИТЕ, то вторую команду он рапознает как отдельную от цикла. Поэтому лучше особо не пренебрегайте этими скобками, а то потом не поймете что тут не так.
IF SAS = TRUE AND RCS = TRUE {Print "SAS ON". Print "RCS ON".} \\ Вот правильное написание нескольких команд в ТЕЛЕ КОМАНДЫ IF. Не забываем что не обязательно писать это в строчку, главное что бы правильно были расставлены скобки.

Можно использовать сколько угодно условий объединения уже выучеными нами операторами: И(AND) , ИЛИ(OR).

По сути из всех команд условий достаточно знать команду IF, потому что остальные команды делают практически тоже самое.

Команда "WHEN THEN".
С английского переводиться КОГДА ТОГДА.
WHEN "УСЛОВИЕ(УСЛОВИЯ)" THEN {"ТЕЛО КОМАНДЫ"}.
т.е. по сути мы видим всю ту же команды, в которой так же можно применять условия, операторы и писать в теле команды сколько угодно команд.
Пример:
WHEN X=1 THEN {PRINT "X=1".}

Команда "ON".
Перевод с английского НА
Вот это команда уже отличается. Она позволяет назначать какое-то действие на какую-то кнопку. К тому же позволяет работать с Acion Group-ами, а так же к примеру управлять своей программой при помощи кнопок за счет этого.
Примеры:
ON SAS RCS ON. \\ На нажатии кнопки включающую САС будет включаться еще и RCS

ON AG1 PRINT "ACTION GROUP 1 PRESSED". \\ На нажатие кнопки включающую первую Экшн группу он будет писать такую надпись

ON AG4 SET X TO X+1. \\ При нажатии на Экшн группу №4 увеличит Х на единицу

ON ABORT REBOOT \\ При нажатии на кнопку АБОРТ вверху экрана, перезагрузит консоль (Полезная команда).

Раньше на ON можно было закреплять разные вещи по типу условий типо ON ALTITUDE>2000 Print "2000 achived". ; Но сейчас это уже не работает.




Итак, мы наконец-то разабрали весь необходимый материал что бы в полной мере приступить к прикладной части языка, чем мы и займемся в следующем гайде!
Надеюсь вы хорошо усвоили информацию из первых трёх гайдов что бы приступить к действительно интересным вещам!!

Надеюсь было интересно! Оставляйте вопросы в ТЕМЕ НА ФОРУМЕ, а в комментариях пишите отзывы!
Для вас старался Finn. До новых встреч!
Изучаем kOS - Циклы [Гайд по kOS часть 2]
Изучаем kOS - Циклы [Гайд по kOS часть 2]
17 дек 2015 в 22:56, Гайды
Введения в kOS [Гайд по kOS часть 1]
Введения в kOS [Гайд по kOS часть 1]
15 дек 2015 в 16:58, Гайды
  1. Lynx

    Lynx 20 декабря 2015 15:15

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

  2. Finn

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

    *ИСПРАВЛЕНО* Привычная кривота после размещения гайда
    Уже раз 5 отредактировал. После написания статьи на компьютере, редактировать приходиться все равно.

    Сейчас всё должно быть понятно и разборчиво.

  3. Lynx

    Lynx 20 декабря 2015 15:36

    Кому не хватат активных групп може использовать Action Groups Extended, автор заявляет о совместимости с КОС
    http://forum.kerbalspaceprogram.com/index.php?/topic/67235-105dec1615-action-gro
    ups-extended-250-action-groups-in-flight-editing-now-kosremotetech/

  4. Silver

    Silver Гость 20 декабря 2015 15:36

    Отзыв: спасибо!

  5. lis_vamp

    lis_vamp @Ilya 20 декабря 2015 18:18

    поставил +
    добавь что в WHEN THEN нельзя писать цикличные операторы типа until, задание переменной командой LOCK....

  6. Gonzales_Gonzo

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

    Не знаю для чего здесь пол статьи о паре действий булевой логики, видимо для совсем начинающих, но ИМХО выглядит неуместно. Всё таки если засел за kOS какие-то базовые знания о коньюнкции/дизьюнкции должны присутствовать.

    А вообще чем дальше, тем всё более поверхностным выглядит этот цикл гайдов и не логичным с точки зрения разделения на части, хоть тема затронута и крайне правильная и нужная.
    Почему, например, ни слова о ветвлении, где ELSE ? Почему, раз уж притягиваются именно эти операторы, не указано, что IF и WHEN/ON работают принципиально по разному - WHEN/ON как триггеры, которые ждут в фоне своей истины, позволяя остальной программе выполняться, а IF работает сразу, здесь и сейчас ?

    Вот это команда уже отличается. Она позволяет назначать какое-то действие на какую-то кнопку.

    Она отличается как минимум тем, что ON срабатывает при любом изменении условия с true на false или с false на true, а when выполняется только когда условие будет true.

  7. Lynx

    Lynx 20 декабря 2015 18:58

    Цитата: Gonzales_Gonzo
    Всё таки если засел за kOS какие-то базовые знания о коньюнкции/дизьюнкции должны присутствовать.
    Да вы, батенька, сноб еще тот. С какого овоща семейства крестоцветных они должны присутствовать и кому они это должны?

  8. Gonzales_Gonzo

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

    Потому что kOS - это встроенный в KSP язык программирования. А программирование по умолчанию подразумевает некий логический базис в виде знания и понимания операторов - AND, OR, XOR и т.д.

    А так то да, сноб, потому и ИМХО, ибо выглядит как каша вида "вижул бейсик за пол часа, от GO до TO" :)

  9. Lynx

    Lynx 20 декабря 2015 19:27

    Цитата: Gonzales_Gonzo
    А программирование по умолчанию подразумевает некий логический базис в виде знания и понимания операторов - AND, OR, XOR и т.д.
    Получается вообще нельзя языки программирования без подготовки учить, а то как так, С++ учить, а про дизъюнкцию не знать? Промежду прочим сам св. Дейтел не гнушался таблицы истинности во первых главах своего монументального труда рисовать и рассказывать чем И от ИЛИ отличается.

  10. Lynx

    Lynx 20 декабря 2015 19:34

    Кстати, раз уж речь за математическую логику, то где оператор НЕ? Без отрицания никак нельзя, ибо И, ИЛИ, НЕ представляют собой минимальный базис (один из).
    И второй вопрос как логические значения представляются в числовом виде, что будет результатом true +1 ?

  11. Gonzales_Gonzo

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

    Что делать нельзя рассказывают административный с уголовным кодексы, а выше в теме было моё мнение о том, что разжёвывать про два плюс два в посте про скриптинг в kOS - лишнее. В пример могу привести труды достопочтимого maisvendoo - они не начинаются со слов "как вы знаете Земля не покоится более на трёх китах, а Ньютон знаменит тремя законами, которые мы сейчас и изучим".

    Создатели же бумажных фолиантов могут рисовать в своих трудах хоть чёрта лысого через страницу - им платят гонорары за объёмы.

  12. Lynx

    Lynx 20 декабря 2015 19:48

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

  13. lis_vamp

    lis_vamp @Ilya 20 декабря 2015 20:12

    как-то ты обезкураживаешь такими вопросами.... логика вида true/false так и пишется 1/0 ... фсёёё

  14. Lynx

    Lynx 20 декабря 2015 20:28

    Ну раз True это 1, то True + 1 это 2, логично?
    Мне просто интересно как КОС интерпретирует 5 > 4 + 2, тут возможны два варианта:
    1. 5 > 4 = True, True + 2 = 3
    2. 4 + 2 = 6, 5 > 6 = False = 0

    Ну и условия типа IF 3, как будут обрабатываться?

  15. Gonzales_Gonzo

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

    Вопрос о неявном приведении типов ?
    По сути булевого типа переменой не существует, как и строгой типизации
    Kerboscript is a language in which there is only one type of variable and it just generically holds any sort of object of any kind. If you attempt to assign, for example, a string into a variable that is currently holding an integer, this does not generate an error. It simply causes the variable to change its type and no longer be an integer, becoming a string now.

    In other words, the type of a variable changes dynamically at runtime depending on what you assign into it.


    Т.е. что присвоишь переменной, тем она и будет.

  16. Lynx

    Lynx 20 декабря 2015 20:53

    Ну в общем да, что получится если переменные разных типов использовать в одной операции?

  17. Finn

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

    Гайды пишутся с ориентировкой на пользователя не знакомого даже с понятием программирования. Поэтому всё разжовывается. Суть этих гайдов чтоб каждый игрок, будь то 13 летний школьник или 40 летний Сантехник Виталий, смог в КСП работать с кОС.


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

    Хочешь инфу без объяснений лишь с небольшими комментариями. Ссылка на переведенный оригинальный гайд есть в шапке темы на форуме.


    Я просто не понимаю, что товарищ гонсалес хочет показать. Мою некомпетентность, свой авторитет или что-то еще. Ну не пойму я к чему он пишет подобные комментарии. Это гайды, суть гайдов - полное усвоение материала.

    Можешь лучше? Я абсолютно не возражаю, пиши свои гайды, с собственным подходом. Я буду лишь ЗА.
    Вести неконструктивный диалог не вижу смысла.

  18. Gonzales_Gonzo

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

    Тут соблюдаются приоритеты операторов, сложения вычитания выполняться в первую очередь, поэтому будет false

  19. Gonzales_Gonzo

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

    Цитата: Finn
    Гайды пишутся с ориентировкой на пользователя не знакомого даже с понятием программирования. Поэтому всё разжовывается. Суть этих гайдов чтоб каждый игрок, будь то 13 летний школьник или 40 летний Сантехник Виталий, смог в КСП работать с кОС.

    Не обессудь, никогда не любил подобного рода материалы в духе непрофессионализма "как запустить АЭС в гараже быстро без смс", ничего личного, не принимай близко к сердцу.

    Цитата: Finn

    Для понимающих людей следуют читать руководство, которое я к слову даже полностью переводил, но форумчане признали его слишком трудным для понимания и попросили гайды.
    Хочешь инфу без объяснений лишь с небольшими комментариями. Ссылка на переведенный оригинальный гайд есть в шапке темы на форуме.

    Кинь ссыль на перевод, может не заметил.

    Цитата: Finn

    Я просто не понимаю, что товарищ гонсалес хочет показать. Мою некомпетентность, свой авторитет или что-то еще. Ну не пойму я к чему он пишет подобные комментарии. Это гайды, суть гайдов - полное усвоение материала.

    Не агрись, даже не надеялся тебя оскорбить.
    Хочу сказать, что мне не нравится, как подаётся материал, много лишней воды про имеющее мало отношения непосредственно к kOS и мало нужного, касающегося особенностей применения и языка программирования. Но плюс за труды несомненно заслужил, тут уж как есть.

    Цитата: Finn

    Можешь лучше? Я абсолютно не возражаю, пиши свои гайды, с собственным подходом. Я буду лишь ЗА. Вести неконструктивный диалог не вижу смысла.

    Думаю, что могу, но вряд ли буду.
    Твои труды полезны тем, кто захочет прикоснуться к теме, а для желающих познать дзен всегда есть оригинал http://ksp-kos.github.io/KOS_DOC/index.html.

  20. Gonzales_Gonzo

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

    Смотря что ты хочешь и как использовать, если, например, как выше
    5 > 4 + 1

    то ответ однозначен, ибо выполняется по порядку приоритетов операторов.

    Если же поставить скобки, изменив приоритеты
    (5 > 4) + 1

    то будет ошибка, что нельзя складывать Boolean и Integer

    А вот для
    (5 > 4) + "some_string"

    будут складываться строки и результат будет строкой "Truesome_string".

  21. Lynx

    Lynx 20 декабря 2015 22:46

    Цитата: Gonzales_Gonzo
    то ответ однозначен, ибо выполняется по порядку приоритетов операторов.
    Это все очевидно. А где мне с этим приоритетом ознакомиться? В официальном ФАКе я не нашел, хотя возможно плохо искал.
    На то что були складываются со строками тоже хочу ссылку, как по мне это самый неочевидный вариант.

  22. Gonzales_Gonzo

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

    Приоритеты операторов я думаю следует смотреть в С#, как в первоисточнике, в официальной документации по kOS этого нет. Хотя уповать на доки тоже не стоит, нужно проверять на практике, ведь проект не стоит на месте. Вот в доке одна из неочевидностей - умножение всегда выполняется первым, говорят будут исправлять
    The system follows the order of operations, but currently the implementation is imperfect. For example, multiplication will always be performed before division, regardless of the order they come in. This will be fixed in a future release.

    Но практически у меня работает как и должно быть правильно в версии 0.18.2.0, т.е. доке не соответствует.


    Булевы со строками как раз очень логично, ведь True и False - это строки :)
    Проверь практически, запускаешь консоль kOS и пишешь
    print (5 > 4).

    а потом сравни с
    print (5 > 4) + "some_string".

  23. Lynx

    Lynx 20 декабря 2015 23:24

    Цитата: Gonzales_Gonzo
    multiplication will always be performed before division
    угу, А то тут некоторые темы разводят мол сколько будет 4/2*2 peka

    Цитата: Gonzales_Gonzo
    Проверь практически, запускаешь консоль kOS и пишешь
    Что б у меня кос стоял - фиг бы я вас о чем спрашивал, но у меня занятная карьера, от которой КСП и так еле дышит, еще и коса туда запихнуть я опасаюсь %)

  24. lis_vamp

    lis_vamp @Ilya 21 декабря 2015 00:38

    вот именно, такие статьи пишутся для тех кто не в курсе, в чём отличие integer от boolean ... для тех кто не понимает что такое ООП... можешь лучше, пиши... человек за неделю накатал 3! адаптивных перевода, с объяснениями "от себя"..
    мне эти статьи даром не нужны-я оф.мануал читаю... но блин, человек для себя что ли старается?? Gonzales_Gonz, подумай немного не о себе... есть мысли, чем дополнить, пиши

  25. lis_vamp

    lis_vamp @Ilya 21 декабря 2015 09:24

    kOS добавляет всего 4 детали... так что нагрузка на память будет минимальная :) ставь :)

  26. veld

    veld @Veld 22 декабря 2015 07:42

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


    Как непонимающий 40-летний техникСан хотел бы найти-не смог.Действительно-бросте ссылкой, иначе крестовину фановой трубы будете менять сами. np

  27. Finn

    Finn @Николай 22 декабря 2015 09:56 Автор

    В теме на форуме есть закрепленная шапка в которой есть все ссылки на всё что только есть по кОС

  28. veld

    veld @Veld 22 декабря 2015 14:18

    С утра торможу(и)немного подлагиваю (но) спасибо!Кстати там ничего вроде нет про математическую логику.(без всяких упрёков).
    И ещё раз спасибо за занятное чтение на ночь.

  29. MjasNick

    MjasNick @Николай 22 декабря 2015 17:03

    Мы начинаем проекру... КРУ)))
    Исправь пожалуйста.

  30. Finn

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

    Операторы булевой логики и есть Матлогика. И и ИЛИ это и есть матлогика:) Впринципе этого достаточно есть еще команда инверсии, но особого смысла в ней не вижу. Здесь все таки базовые элементы для понятия структуры написания программ, а не справочник. В справочнике всё будет.

    Пока в планах еще как минимум 1-2 гайда + Справочник + сборник программ + возможно перевод офф инструкции. Очень уж возможно. Большой слишком объем.

{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