Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - Космич

Страницы: [1]
1
Моё предложение состоит в том, что бы избавиться от мучительной пирамидальной вложенности условных операторов. Всего 2 варианта, оба делают код визуально компактным за счёт выравнивания условий в виде ровного вертикального списка.

З.Ы. Johnny, надеюсь ты не пропустишь эту тему и откликнешься.

ELSE_IF
Код: Clickermann
  1. IF ($var = 0)
  2.   PRINT("var равна 0")
  3. ELSE_IF ( ($var => 0) and ($var <= 10) )
  4.   PRINT("var между 0 и 10")
  5. ELSE_IF ($str = "Hello World!")
  6.   PRINT("str равна Hello World")
  7. ELSE  
  8.   PRINT("Все условия ложны")
  9. END_IF
  10.  


SELECT
https://autoit-script.ru/autoit3_docs/keywords/Select.htm
Код: Clickermann
  1. SELECT
  2. CASE ($var = 0)
  3.   PRINT("var равна 0")
  4. CASE ( ($var => 0) and ($var <= 10) )
  5.   PRINT("var между 0 и 10")
  6. CASE ($str = "Hello World!")
  7.   PRINT("str равна Hello World")
  8. DEFAULT
  9.   PRINT("Все условия ложны")
  10. END_SELECT
  11.  

2
Ноги из моего недописанного скрипта, который, скорее всего, так и останется недописанным. Как бы то ни было, вот завершённая часть скрипта, которой, я бы хотел поделится.  :D 

Создаёт 7 файлов, из которых: 1 вспомогательный для вышеозначенного скрипта, 3 готовых к использованию INI файла с оптимальными путями под каждую компанию, и 3 матрицы для удобного визуального прослеживания путей.

Код: Clickermann
  1. #DEFINE #ENDL: CHAR(13), CHAR(10)
  2. #DEFINE #INFINITY: 99999
  3. #DEFINE HTAB(:  STRCUT("                    ", 0,
  4.  
  5. #DEFINE MATRIX_FILE_NAME: "_path_matrix"
  6. #DEFINE ROUTE_FILE_NAME:  "_route"
  7.  
  8. #DEFINE READABILITY: "aVertex_array_indices.ini"
  9.  
  10. STRSEPARATE("MMO:EIC:VRU", ":", $array_company)
  11.  
  12. STRSEPARATE("1-1:1-2:1-3:1-4:1-5:1-6:1-7:1-8", ":", $array_vertex)
  13. STRSEPARATE("2-1:2-2:2-3:2-4:2-5:2-6:2-7:2-8", ":", $array_vertex)
  14. STRSEPARATE("3-1:3-2:3-3:3-4:3-5:3-6:3-7:3-8", ":", $array_vertex)
  15. STRSEPARATE("4-1:4-2:4-3:4-4:4-5", ":", $array_vertex)
  16. STRSEPARATE("1-BL:2-BL:3-BL", ":", $array_vertex)
  17.  
  18. $size_array_vertex = ARRSIZE($array_vertex)
  19.  
  20. IF(TFCOUNT(READABILITY) - 1 != $size_array_vertex)
  21.   TFCLEAR(READABILITY)
  22.   FOR($count = 0, $count < $size_array_vertex)
  23.      INIWRITE(READABILITY, $array_vertex[$count], $count)
  24.   END_CYC
  25. END_IF
  26.  
  27. SUB(_ADD_EDGE, $_1vertex, $_2vertex, $_weight)
  28.   $array_weight_matrix[INT(INIREAD(READABILITY, $_1vertex)) + INT(INIREAD(READABILITY, $_2vertex)) * $size_array_vertex] = $_weight
  29.   $array_weight_matrix[INT(INIREAD(READABILITY, $_2vertex)) + INT(INIREAD(READABILITY, $_1vertex)) * $size_array_vertex] = $_weight
  30. END_SUB
  31.  
  32. FOR($count = 0, $count < ARRSIZE($array_company))
  33.  
  34.   #DEFINE #DX6_WEIGHT: 0.9
  35.   #DEFINE #DX7_WEIGHT: 0.9
  36.   #DEFINE #DX8_WEIGHT: 0.9
  37.  
  38.   #DEFINE #DBL_WEIGHT: 4
  39.  
  40.   #DEFINE #DEF_WEIGHT: 2
  41.  
  42.   $MMO_weight = 2
  43.   $EIC_weight = 2
  44.   $VRU_weight = 2
  45.  
  46.   $MF5_weight = $MMO_weight - 0.1
  47.   $EF5_weight = $EIC_weight - 0.1
  48.   $VF5_weight = $VRU_weight - 0.1
  49.  
  50.   SETVAR(STRCONCAT("$", $array_company[$count], "_weight"), 1)
  51.   SETVAR(STRCONCAT("$", STRCUT($array_company[$count], 1, 1), "F5_weight"), GETVAR(STRCONCAT("$", $array_company[$count], "_weight")))
  52.  
  53.   FOR($i = 0, $i < POW($size_array_vertex, 2))
  54.      $array_weight_matrix[$i] = #INFINITY
  55.      FOR($k = 0, ($k < $size_array_vertex) and ($i < $size_array_vertex))
  56.         $array_path_matrix[$i*$size_array_vertex+$k] = $array_vertex[$k]
  57.      END_CYC
  58.   END_CYC
  59.  
  60.   _ADD_EDGE("1-1",  "1-2",  $MMO_weight)
  61.   _ADD_EDGE("1-2",  "1-3",  $MMO_weight)
  62.   _ADD_EDGE("1-2",  "1-4",  $MMO_weight)
  63.   _ADD_EDGE("1-3",  "1-4",  $MMO_weight)
  64.   _ADD_EDGE("1-3",  "2-3",  #DEF_WEIGHT)
  65.   _ADD_EDGE("1-4",  "3-4",  #DEF_WEIGHT)
  66.  
  67.   _ADD_EDGE("2-1",  "2-2",  $EIC_weight)
  68.   _ADD_EDGE("2-2",  "2-3",  $EIC_weight)
  69.   _ADD_EDGE("2-2",  "2-4",  $EIC_weight)
  70.   _ADD_EDGE("2-3",  "2-4",  $EIC_weight)
  71.   _ADD_EDGE("2-4",  "3-3",  #DEF_WEIGHT)
  72.  
  73.   _ADD_EDGE("3-1",  "3-2",  $VRU_weight)
  74.   _ADD_EDGE("3-2",  "3-3",  $VRU_weight)
  75.   _ADD_EDGE("3-2",  "3-4",  $VRU_weight)
  76.   _ADD_EDGE("3-3",  "3-4",  $VRU_weight)
  77.  
  78.   _ADD_EDGE("1-5",  "1-6",  $MMO_weight)
  79.   _ADD_EDGE("1-5",  "1-7",  #DX7_WEIGHT)
  80.   _ADD_EDGE("1-6",  "1-8",  #DX6_WEIGHT)
  81.   _ADD_EDGE("1-7",  "1-8",  #DX8_WEIGHT)
  82.  
  83.   _ADD_EDGE("2-5",  "2-6",  $EIC_weight)
  84.   _ADD_EDGE("2-5",  "2-7",  #DX7_WEIGHT)
  85.   _ADD_EDGE("2-6",  "2-8",  #DX6_WEIGHT)
  86.   _ADD_EDGE("2-7",  "2-8",  #DX8_WEIGHT)
  87.  
  88.   _ADD_EDGE("3-5",  "3-6",  $VRU_weight)
  89.   _ADD_EDGE("3-5",  "3-7",  #DX7_WEIGHT)
  90.   _ADD_EDGE("3-6",  "3-8",  #DX6_WEIGHT)
  91.   _ADD_EDGE("3-7",  "3-8",  #DX8_WEIGHT)
  92.  
  93.   _ADD_EDGE("4-1",  "1-4",  $MMO_weight)
  94.   _ADD_EDGE("4-2",  "2-4",  $EIC_weight)
  95.   _ADD_EDGE("4-3",  "3-4",  $VRU_weight)
  96.  
  97.   _ADD_EDGE("4-1",  "4-2",  #DEF_WEIGHT)
  98.   _ADD_EDGE("4-2",  "4-3",  #DEF_WEIGHT)
  99.   _ADD_EDGE("4-3",  "4-1",  #DEF_WEIGHT)
  100.  
  101.   _ADD_EDGE("4-4",  "4-1",  $MMO_weight)
  102.   _ADD_EDGE("4-4",  "4-2",  $EIC_weight)
  103.   _ADD_EDGE("4-4",  "4-3",  $VRU_weight)
  104.  
  105.   _ADD_EDGE("4-4",  "1-5",  $MMO_weight)
  106.   _ADD_EDGE("4-4",  "2-5",  $EIC_weight)
  107.   _ADD_EDGE("4-4",  "3-5",  $VRU_weight)
  108.  
  109.   _ADD_EDGE("4-5",  "1-5",  $MF5_weight)
  110.   _ADD_EDGE("4-5",  "2-5",  $EF5_weight)
  111.   _ADD_EDGE("4-5",  "3-5",  $VF5_weight)
  112.  
  113.   _ADD_EDGE("1-BL", "1-8",  #DBL_WEIGHT)
  114.   _ADD_EDGE("2-BL", "2-8",  #DBL_WEIGHT)
  115.   _ADD_EDGE("3-BL", "3-8",  #DBL_WEIGHT)
  116.  
  117.   _ADD_EDGE("1-BL", "2-BL", #DEF_WEIGHT)
  118.   _ADD_EDGE("2-BL", "3-BL", #DEF_WEIGHT)
  119.   _ADD_EDGE("3-BL", "1-BL", #DEF_WEIGHT)
  120.  
  121.   FOR($k = 0, $k < $size_array_vertex)
  122.      FOR($i = 0, $i < $size_array_vertex)
  123.         FOR($j = 0, $j < $size_array_vertex)
  124.            IF($array_vertex[$i] != $array_vertex[$j])
  125.               IF($array_weight_matrix[$j*$size_array_vertex+$i] > $array_weight_matrix[$k*$size_array_vertex+$i] + $array_weight_matrix[$j*$size_array_vertex+$k])
  126.                  $array_weight_matrix[$j*$size_array_vertex+$i] = $array_weight_matrix[$k*$size_array_vertex+$i] + $array_weight_matrix[$j*$size_array_vertex+$k]
  127.                  $array_path_matrix[$i*$size_array_vertex+$j] = $array_path_matrix[$i*$size_array_vertex+$k]
  128.               END_IF
  129.            END_IF
  130.         END_CYC
  131.      END_CYC
  132.   END_CYC
  133.  
  134.   $horizontal_line = HTAB(7)
  135.  
  136.   FOR($i = 0, $i < $size_array_vertex)
  137.      $horizontal_line = STRCONCAT($horizontal_line, "[", $array_vertex[$i], "]", HTAB(1))
  138.   END_CYC
  139.  
  140.   TFWRITE(STRCONCAT($array_company[$count], MATRIX_FILE_NAME, ".txt"), STRCONCAT($horizontal_line, #ENDL), 1)
  141.  
  142.   FOR($i = 0, $i < $size_array_vertex)
  143.      $horizontal_line = STRCONCAT("[", $array_vertex[$i], "]", STRCUT(HTAB(6), 1, 6 - STRLEN($array_vertex[$i])))
  144.      FOR($k = 0, $k < $size_array_vertex)
  145.         $temp = $array_path_matrix[$i*$size_array_vertex+$k]
  146.         $horizontal_line = STRCONCAT($horizontal_line, $temp,  STRCUT(HTAB(6), 1, 6 - STRLEN($temp) + ABS(3 - STRLEN($array_vertex[$k]))) )
  147.      END_CYC
  148.      TFWRITE(STRCONCAT($array_company[$count], MATRIX_FILE_NAME, ".txt"),  STRCONCAT($horizontal_line, #ENDL), ($i*2) + 3)
  149.   END_CYC
  150.  
  151.   FOR($i = 0, $i < $size_array_vertex)
  152.      FOR($k = 0, $k < $size_array_vertex)
  153.         IF($i != $k)
  154.            INIWRITE(STRCONCAT($array_company[$count], ROUTE_FILE_NAME, ".ini"), STRCONCAT($array_vertex[$i], ":", $array_vertex[$k]), $array_path_matrix[$i*$size_array_vertex+$k])
  155.         END_IF
  156.      END_CYC
  157.   END_CYC
  158.  
  159. END_CYC
  160.  
  161. HALT

3
Общие вопросы / Сортировка вставками
« : Май 15, 2019, 11:57:48 pm »
после того как элементы массива под индексами 0 и 1 меняются местами, $k становится = 0, но выхода и вложенного цикла не происходит. Почему так происходит, где я накосячил? 

Код: Clickermann
  1. SUB(_SWAP, $var1, $var2)
  2.   $sub_temp_var = GETVAR($var1)
  3.   SETVAR($var1, GETVAR($var2))
  4.   SETVAR($var2, $sub_temp_var)
  5. END_SUB
  6.  

Код: Clickermann
  1. #include "data\include\swap.cms"
  2.  
  3. $arr[0] = 9
  4. $arr[1] = 8
  5. $arr[2] = 3
  6. $arr[3] = 4
  7.  
  8. FOR($i = 1, $i < ARRSIZE($arr))
  9.   FOR($k = $i, ( ($k > 0) and ($arr[$k-1] > $arr[$k]) ), - 1)
  10.      _SWAP(STRCONCAT("$arr[", GETVAR("$k") - 1, "]"), STRCONCAT("$arr[", GETVAR("$k"),"]") )
  11.   END_CYC
  12. END_CYC
  13.  
  14. FOR($i = 0, $i < ARRSIZE($arr))
  15.   PRINT($arr[$i])
  16. END_CYC
  17.  
  18. halt

P.S. А вот даже не знаю, я косяка не вижу и на ++ всё работает  :(

4
Общие вопросы / GETVAR и ARRSIZE
« : Февраль 16, 2019, 12:14:44 am »
Понадобилась подпрограмма для поиска заданного значения в массиве и в случае успеха возврата его индекса.

Я хотел сделать более универсальный вариант, но возникла проблема с определением размера массива внутри подпрограммы. Может кто то уже сталкивался с этим и может подсказать?

Код: Clickermann
  1. $arr[0] = "afds"
  2. $arr[1] = "bd3h"
  3. $arr[2] = "ce56"
  4.  
  5. $name_array = "$arr"
  6. $cell_array = 1
  7.  
  8. PRINT(GETVAR(STRCONCAT($name_array, "[", GETVAR("$cell_array"), "]" ) ) ) // Значение по индексу возвращает правильно
  9.  
  10. PRINT(ARRSIZE(GETVAR("$name_array"))) // А вот размер массива не возвращает
  11.  
  12. HALT
  13.  

5
Есть прямоугольная 2D карта, на ней есть одна синяя точка с ограниченной квадратной областью видимости и неизвестное кол-во красных точек.

Цель задачи:
Если в радиус синей точки попала красная, то совершать клики на N количество пикселей в противоположную сторону от красной точки, что бы красная точка вышла из радиуса видимости синей. Т.е. образно говоря, что бы синяя точка убегала от красных.

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

В общем, я буду рад, если мне кто-то составит компанию в решении данной задачи...


Страницы: [1]