1

Тема: АНК: Массивы

Дано:
z1=1 x1=1   y1=1
z2=2 x2=5   y1=1
z3=3 x3=10 y1=1
z4=4 x1=1   y2=5
z5=5 x1=1   y3=10 и т.д.
Т.е. имеем, например, 1000 z с определенными значениями x, y
Надо найти: по значениям х и у надо найти z. Например:  если х = 1 и у = 5 то z = 4
Вопрос: как это представить в виде массива?

2 (изменено: Indomito, 2012-04-14 16:07:49)

Re: АНК: Массивы

Если я правильно понял, то это обычный массив, т.е. я не понял в чём проблема.
Есть два индекса и одно значение.
Как представить - вариантов море, ну скажем так: mass := [[x1,y1,z1][x2,y2,z2][x3,y3,z3] и т.д. ] 
Ясно?
Или нужен алгоритм поиска по индексам X & Y?

Поправка:
Надо не так - mass := [[x1,y1,z1][x2,y2,z2][x3,y3,z3] и т.д. ] 
А так - mass := [[x1,y1,z1]  ,[x2,y2,z2]   ,[x3,y3,z3] и т.д. ]  пропущены запятые были.

Спасибо Grey что заметил.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

3

Re: АНК: Массивы

Indomito пишет:

...скажем так: mass := [[x1,y1,z1][x2,y2,z2][x3,y3,z3] и т.д. ] 

Нет, так не будет работать.

Array:={}, SubArray1:={}, SubArray2:={}
SubArray3:={}, SubArray4:={}, SubArray5:={}
SubArray1.Field1:=1, SubArray1.Field2:=1
SubArray2.Field1:=5, SubArray2.Field2:=1
SubArray3.Field1:=10, SubArray3.Field2:=1
SubArray4.Field1:=1, SubArray4.Field2:=5
SubArray5.Field1:=1, SubArray5.Field2:=10

Loop, 5
   Array.Insert(A_Index, SubArray%A_Index%)

Loop, % Array.MaxIndex()
   If Array[A_Index].Field1=1 And Array[A_Index].Field2=5
      MsgBox, 262144, % " ", % A_Index

;For Key In Array
;   If Array[Key].Field1=1 And Array[Key].Field2=5
;      MsgBox, 262144, % " ", % Key
Array:={}
SubArray1:=[1, 1]
SubArray2:=[5, 1]
SubArray3:=[10, 1]
SubArray4:=[1, 5]
SubArray5:=[1, 10]

Loop, 5
   Array.Insert(A_Index, SubArray%A_Index%)

For Key, Value In Array
   If Value[1]=1 And Value[2]=5
      MsgBox, 262144, % " ", % Key
Array:={1:[1, 1]
      , 2:[5, 1]
      , 3:[10, 1]
      , 4:[1, 5]
      , 5:[1, 10]}

Enum:=Array._NewEnum()
While, Enum[Key, Value]
   If Value[1]=1 And Value[2]=5
      MsgBox, 262144, % " ", % Key

;For Key, Value In Array
;   If Value[1]=1 And Value[2]=5
;      MsgBox, 262144, % " ", % Key

4 (изменено: Indomito, 2012-04-14 15:56:49)

Re: АНК: Массивы

Grey пишет:

Нет, так не будет работать.

у меня именно так и работает... вот фрагмент скрипта, т.е. описание массива

arrayKey := [[kNone,kNoLbL,kSps] ; Если 3-й элемент kNone то конец массива
      ,[kNone,kNoLbL,"---------------- Запуск основных приложений"]
      ,[kNone,"FireFox","Запуск Mozilla FireFox",kWin,"A"]
      ,[kNone,"Thunderbird","Запуск Mozilla Thunderbird",kWin,"S"]
      ,[kNone,"TotalCommander","Запуск Total Commander",kWin,"X"]
      ;пропущено массив большой
      ,[kNone,"WinBlock","Блокировка Windows",kCtrl,kWin,"F12"]
      ,[kNone,kNoLbL,kNone]]

Опс, заметил ошибку в посте. Надо так было: mass := [[x1,y1,z1]
                                                                                      ,[x2,y2,z2]
                                                                                      ,[x3,y3,z3] и т.д. ]
  запятые упустил в примере

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

5

Re: АНК: Массивы

До кучи:

MsgBox, 262144, % " ", % New SomeName(1, 5)

Class SomeName
{
   Array:=[[1, 1], [5, 1], [10, 1], [1, 5], [1, 10]]
   __New(value1, value2)
   {
      For Key, Value In This.Array
         If Value[1]=value1 And Value[2]=value2
            Return, Key
   }
}

6 (изменено: Bobby, 2012-04-15 12:28:58)

Re: АНК: Массивы

Grey, спасибо за большую проделанную работу. Многое проясняется с массивами. Хотелось бы представить массив в компактном виде. Еще раз матрица:
              X1                                X2                 X3                         ...              X100
Y1            Z1(X1,Y1)              Z2(X2,Y1)          Z3(X3,Y1)              ...     Z100(X100,Y1)
Y2        Z101(X1,Y2)          Z102(X2,Y2)          Z103(X3,Y2)          ...     Z200(X100,Y2)
Y3        Z201(X1,Y3)          Z202(X2,Y3)          Z203(X3,Y3)          ...     Z300(X100,Y3)
...              ...                     ...               ...               ...                                  ...
Y100    Z9901(X1,Y100)  Z9902(X2,Y100)  Z9903(X3,Y100)  ...   Z10000(X100,Y100)

Например, X1 = 10   Y1 = 5    X(n) = X1 + 3(n -1)   Y(n) = Y1 + 2(n-1)

7

Re: АНК: Массивы

Имхается мне примеров выше с лихвой...

8

Re: АНК: Массивы

Bobby пишет:

Например, X1 = 10   Y1 = 5    X(n) = X1 + 3(n -1)   Y(n) = Y1 + 2(n-1)

Это уже функции.

9 (изменено: Bobby, 2012-04-16 09:10:08)

Re: АНК: Массивы

То есть для 10000 Z надо сначала описать массив из 10000  SubArray:={} ?

 Array:={}, SubArray1:={}, SubArray2:={},SubArray3:={}, ..., SubArray10000:={}

10

Re: АНК: Массивы

Нет, массивы можно заполнять динамически, т.е. как я описал их в посте #4, про остальные варианты не знаю.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

11 (изменено: Bobby, 2012-04-16 11:42:09)

Re: АНК: Массивы

Grey пишет:

Имхается мне примеров выше с лихвой...

Во всех примерах показан поиск в уже готовом массиве.. А как сам массив создать? Не ручками же?

12

Re: АНК: Массивы

Indomito пишет:

Нет, массивы можно заполнять динамически, т.е. как я описал их в посте #4, про остальные варианты не знаю.

А как заполнять то?

13

Re: АНК: Массивы

Bobby пишет:

Во всех примерах показан поиск. А как сам массив создать? Не ручками же?

А откуда этот массив берётся?

14 (изменено: Bobby, 2012-04-16 11:58:30)

Re: АНК: Массивы

Смотреть пост #6 или #15

15 (изменено: Bobby, 2012-04-16 11:56:28)

Re: АНК: Массивы

Bobby пишет:

Grey, спасибо за большую проделанную работу. Многое проясняется с массивами. Хотелось бы представить массив в компактном виде. Еще раз матрица:
              X1                                X2                 X3                         ...              X100
Y1            Z1(X1,Y1)              Z2(X2,Y1)          Z3(X3,Y1)              ...     Z100(X100,Y1)
Y2        Z101(X1,Y2)          Z102(X2,Y2)          Z103(X3,Y2)          ...     Z200(X100,Y2)
Y3        Z201(X1,Y3)          Z202(X2,Y3)          Z203(X3,Y3)          ...     Z300(X100,Y3)
...              ...                     ...               ...               ...                                  ...
Y100    Z9901(X1,Y100)  Z9902(X2,Y100)  Z9903(X3,Y100)  ...   Z10000(X100,Y100)

Например, X1 = 10,   Y1 = 5,   Z1=1, 
X(n) = X1 + 3(n -1) ,  Y(n) = Y1 + 2(n-1),  Z(k)= k*Z1, k от 1 до 10000

Или проще

                X1              X2               X3       ...      X100
Y1            Z1              Z2              Z3         ...     Z100
Y2        Z101          Z102          Z103         ...     Z200
Y3        Z201          Z202          Z203         ...     Z300
...          ...                ...               ...           ...        ...
Y100    Z9901      Z9902        Z9903        ...      Z10000

16

Re: АНК: Массивы

Замечательно, для гениев приведу примеры ответа на вопрос "откуда берётся массив?":
1) Из файла.
2) Из головы.
3) Из рекуррентного соотношения.

17 (изменено: Bobby, 2012-04-16 12:01:11)

Re: АНК: Массивы

Александр_ пишет:

Замечательно, для гениев приведу примеры ответа на вопрос "откуда берётся массив?":
1) Из файла.
2) Из головы.
3) Из рекуррентного соотношения.

Тогда, видимо, создать файл. Третий пункт непонятен.

18

Re: АНК: Массивы

Bobby, рекуррентное соотношение

19 (изменено: Indomito, 2012-04-16 12:56:00)

Re: АНК: Массивы

Bobby пишет:

Тогда, видимо, создать файл.

можно вводить с клавиатуры или же прописать прямо в ahk-файле... всё зависит от целей.
Например, после ввода с клавиатуры его можно уже сохранить в файле.

Вариантов много.

Рекуррентная формула (Рекуррентное соотношение) — Википедия

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

20

Re: АНК: Массивы

Вариант нужен один - 1. скрипт заполнения трехмерного массива  [Z, X, Y] по известным значениям 2. нахождение Z по определенным X и Y.  Второй пункт Grey описал. Остался 1 пункт.

21

Re: АНК: Массивы

Тогда, видимо, создать файл.

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

22

Re: АНК: Массивы

creature.ws пишет:

Тогда, видимо, создать файл.

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

Данные все есть. См. пост #15.

23

Re: АНК: Массивы

Т.е. заполнять массив следует данными находящимися в сообщении #15 данной темы? Т.е. сообщение и есть источник данных, а не какой-то там «файл» или непонятное «рекуррентное соотношение»?
Как быть с многоточиями? Цитата тоже должна быть записана в массив?

24

Re: АНК: Массивы

В массиве только данные - 100 Х, 100 Y и 10000 Z.

25 (изменено: creature.ws, 2012-04-16 18:51:58)

Re: АНК: Массивы

Извините, я вас совсем перестал понимать.

data := "
( LTrim, Join
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
    quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
)"

Array   := Array()
Row     := Array()
Column  := Array()
arraySize   := 3
columnSize  := 4
rowSize     := 5

Loop, Parse, data, %A_Space%
{
    If Array.MaxIndex() = arraySize
        break
    If Column.MaxIndex() = columnSize
        Array.Insert(Column.Clone()), Column.Remove(1, columnSize)
    If Row.MaxIndex() = rowSize
        Column.Insert(Row.Clone()), Row.Remove(1, rowSize)
    Row.Insert(A_LoopField)
}

For i, k in Array[1, 1]
    o .= i " : " k "`n"
o .= "`n"
For i, k in Array[1, 2]
    o .= i " : " k "`n"
MsgBox % o

26

Re: АНК: Массивы

В итоге получим [1,10,5], [2,13,5], [3,16,5], ... , [100,307,5]
                           ,[101,10,7], [102,13,7], [103,16,7], ... , [200,307,7]
                           ,[201,10,9], [202,13,9], [203,16,9], ... , [300,307,9]
                            ,      ...       ,       ...       ,        ...       , ... ,     ...
                            ,[9901,10,203], [9902,13,203], [9903,16,203], ... , [10000,307,203]

27

Re: АНК: Массивы

Мне парсить не надо. Надо вставить конкретные числа через переменные или выражения.

28

Re: АНК: Массивы

Вставляйте

29

Re: АНК: Массивы

Если бы мог, не просил бы помощи.

30 (изменено: creature.ws, 2012-04-16 19:32:42)

Re: АНК: Массивы

Если бы мог, не просил бы помощи.

Т.е. вы «не можете». Что заставляет вас так считать? Какой необходимый вам способ работы с массивами в примерах выше был не упомянут?

31

Re: АНК: Массивы

Не упомянуто заполнение трехмерного массива с помощью переменных и выражений.

32 (изменено: Indomito, 2012-04-16 19:47:27)

Re: АНК: Массивы

Вот кусок кода, правда массив двухмерный

arrayKey := [[kNone,kNoLbL,kSps] ; Если 3-й элемент kNone то конец массива
      ,[kNone,kNoLbL,"---------------- Запуск основных приложений"]
      ,[kNone,"FireFox","Запуск Mozilla FireFox","Mozilla Firefox",kNone,kWin,"A"]
      ,[kNone,"Thunderbird","Запуск Mozilla Thunderbird","Mozilla Thunderbird",kNone,kWin,"S"]
      ,[kNone,"TotalCommander","Запуск Total Commander","Total Commander",kNone,kWin,"X"]
      ,[kNone,"Notepad","Запуск Notepad++","Notepad++",kNone,kWin,"Z"]
      ,[kNone,"CloseActiveWin","Закрыть активное окно",kNone,kNone,kWin,"W"]
      ,[kNone,"BackUp","Windows BackUp","Acronis True Image Home",kNone,kWin,"F9"]
      ,[kNone,"UpDate","Windows UpDate","Центр обновления Windows",kNone,kWin,"F10"]
      ,[kNone,kNoLbL,"---------------- Запуск функций McAfee"]
      ,[kNone,"vseOpenCon","Открыть консоль",kNone,kNone,kWin,"F5"]
      ,[kNone,"vseStopScan","Остановить целевое сканирование",kNone,kNone,kCtrl,"F5"]
      ,[kNone,"vseOnAccessScanLog","Журнал сканирования при обращении к файлу",kNone,kNone,kWin,"F6"]
      ,[kNone,"vseAccessProtectionLog","Журнал защиты доступа",kNone,kNone,kCtrl,"F6"]
      ,[kNone,"vseScanON","ON Сканирование при обращении к файлу",kNone,kNone,kWin,"F7"]
      ,[kNone,"vseScanOFF","OFF Сканирование при обращении к файлу",kNone,kNone,kCtrl,"F7"]
      ,[kNone,kNoLbL,"---------------- Разное"]
      ,[kNone,"AnVirTaskManager","Запуск AnVir Task Manager",kNone,kNone,kWin,"F1"]
      ,[kNone,"ToggleSound","Переключение звука Колонки/Наушники",kNone,kNone,kWin,"Tab"]
      ,[kNone,"OscarEditor","Запуск OSCAR Mouse Script Editor",kNone,kNone,kWin,"F4"]
      ,[kNone,"GameKeyOnOff","On/Off игровых клавиш",kNone,kNone,kWin,"F12"]
      ,[kNone,"HelpKey","Вызов справки по клавишам",kNone,kNone,kWin,"Q"]
      ,[kNone,kNoLbL,"---------------- Перезапуск Windows"]
      ,[kNone,"WinRestart","Перезапуск Windows",kNone,kNone,kCtrl,kWin,"F10"]
      ,[kNone,"PowerOff","Выключение компьютера",kNone,kNone,kCtrl,kWin,"F11"]
      ,[kNone,"WinBlock","Блокировка Windows",kNone,kNone,kCrush,kCtrl,kWin,"F12"]
      ,[kNone,kNoLbL,kNone]]

а вот его заполнение "выражениями"

;========================================================================      
;++++++Сканирование массива и генерация хоткеев и прочей ерунды++++++++++
;========================================================================
;---Определение размера массива и валидности меток
i := 1
while (arrayKey[i,сText]) ; выполнять пока arrayKey[i,сText] != kNone
    {
    if (!IsLabel(arrayKey[i, сLabels]))
     {
      tTitl := "Error in script generation"
      tInd  := "An error of array declaration is in an index = " i
      tLbl  :=  """"arrayKey[i, сLabels]"""" " label is not defined or does not exist"
      tTxt  := tErrOfExit 
      MsgBox ,0
            , %tTitl%
            , %tInd% `n`n %tLbl% `n`n %tTxt%
            ,30
      ExitApp
     }
     vLenTMP := StrLen(arrayKey[i,cExTxt])
     if (vLenTMP > vLenExTxt)
         vLenExTxt := vLenTMP
    i++
    }
сSizeA := i
vLenExTxt += 35

;---Генерация имён клавиш и хоткеев (парсер)
i := 1
loop %сSizeA%
 {
  j := сHKey
  bfName := kNone
  bfHotK := kNone
  if ((arrayKey[i,сLabels]<>kNoLbL) and (arrayKey[i,сHKey]=kNone)) ; Проверка отсутствия HotKey для метки
      {
        vLbl := arrayKey[i,сLabels]
        MsgBox ,0
               , Error
               , "%vLbl%"  for the label is not defined hotkey `n`n %tErrOfExit%
               ,10
        ExitApp
     }
   vPriNoKey := 0
   while (arrayKey[i,j])
   {
    bfHotK := bfHotK fnAssigKey(arrayKey[i,j])
    k := 1
    vFlgNoKey := false
    while (assigKeyNo[k] and (!vFlgNoKey))
     {
      if (arrayKey[i,j]=assigKeyNo[k])
          {
          vFlgNoKey := true
          vPriNoKey := j
          ;msgbox vPriNoKey := %vPriNoKey%
          }
        else
          vFlgNoKey := false
      k++ 
     }
     if (!vFlgNoKey)
      {
       if (j = сHKey)
           bfName := arrayKey[i,j]
        else 
          if (vPriNoKey=сHKey)
             bfName := arrayKey[i,j]
            else 
             bfName := bfName kGap arrayKey[i,j]
          vPriNoKey := 0   
      } 
    j++
   }
  if (bfName)  
    { 
      arrayKey[i,сKeys] := bfName     ; Пишем названия клавиш
      vLabel := arrayKey[i,сLabels]   ; Генерируем HotKey
      arrayKey[i,сHKeyN] := bfHotK    ; Заносим акроним в массив  
      HotKey %bfHotK%,%vLabel%,UseErrorLevel
      vEL := ErrorLevel
      if (!vEL) and (!ErrDub(bfHotK,vLabel,i))
             vEL := 100 ; Моя ошибка ( все мои ошибки больше 99)
      vHK := "HotKey" kSps bfHotK kSps kComma kSps vLabel 
      if (vEL)
        {
        if (vEL=1)
          vELTxt := "The label name that does not exist"
        if (vEL=2)
          vELTxt := "Re-use of combinations of hot keys."  
        if (vEL=3)
          vELTxt := "Hot key modifier is not supported."  
        if (vEL=4)
          vELTxt := "This shortcut is not suitable for emulation"  
        if (vEL=5)
          vELTxt := "This keys of accelerators do not exist."  
        if (vEL=6)
          vELTxt := "Non-existent variant of existent hotkey"  
        if ((vEL=98) or (vEL=99))
          vELTxt := "Other errors"
        if (vEL=100)
          vELTxt := "This hotkey is already used"            
        MsgBox 0
               ,Failed to use hotkeys
               ,Еrror in %vHK% `n Еrror= %vELTxt% `n ErrorLevel= %vEL% `n `n %tErrOfExit%
               ,15
        ExitApp
        }  
    }
  i++
 }

секцию констант и функций не стал приводить... много букФ

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

33

Re: АНК: Массивы

Искомое есть (в частности) в сообщении #25, заполнение «трёхмерного» массива Array переменной A_loopField

34 (изменено: Александр_, 2012-04-16 19:50:12)

Re: АНК: Массивы

Судя по двадцать шестому посту ему нужно заполнить двухмерный массив тройками чисел, каждая из которых имеет вид http://ru.numberempire.com/equation.render?\{x+100\cdot(y-1)\;%20;7+3x;3+2y\}
upd: x-это номер столбца, а y- это номер строки, отсчёт идёт с единицы.

35

Re: АНК: Массивы

Пост #15. X1 = 10,   Y1 = 5,   Z1=1,
X(n) = X1 + 3(n -1) ,  Y(n) = Y1 + 2(n-1),  Z(k)= k*Z1, k от 1 до 10000, n от 1 до 100
Тогда  {k; 10 + 3(n -1); 5 + 2(n-1)}

36

Re: АНК: Массивы

Проблема написать программу заполнения - я правильно понял?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

37 (изменено: Bobby, 2012-04-16 20:04:38)

Re: АНК: Массивы

Indomito пишет:

Проблема написать программу заполнения - я правильно понял?

Да, да, да!:D Должно получится два цикла. Цикл в цикле.

38

Re: АНК: Массивы

Значит проблема не в AHK, а в обычном программирование.
Смотри мой пост выше там куча циклов, проверок и другой ерунды - думаю не трудно понять как пишутся вложенные циклы.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

39

Re: АНК: Массивы

Indomito пишет:

Значит проблема не в AHK, а в обычном программирование.
Смотри мой пост выше там куча циклов, проверок и другой ерунды - думаю не трудно понять как пишутся вложенные циклы.

Нужен скрипт.

40

Re: АНК: Массивы

Напиши на С++, отладь и повтори на AHK - просто... ну не знаю может кто тебе и напишет готовую программу, но проще самому всё же, т.к. если что то править, то будет понятно где и почему именно так.
IMHO

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

41

Re: АНК: Массивы

OFF: А почему именно на C++?

42

Re: АНК: Массивы

Можно на JS... просто первый язык который пришёл в голову + там хороший отладчик, а так по сути дело личное, можно и на Паскале, ну например на PascalABCNET

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

43

Re: АНК: Массивы

Простите глупый вопрос, но «Зачем»?

44

Re: АНК: Массивы

На других языках массивы проще. В АНК никак не сориентируюсь.

45

Re: АНК: Массивы

creature.ws пишет:

Простите глупый вопрос, но «Зачем»?

ответ смотри выше постом

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

46

Re: АНК: Массивы

Имеется ввиду «операции с массивами»? Сахарку синтаксического?

47

Re: АНК: Массивы

OFF: Угу Честное слово я не понимаю что сложного писать/читать в/из массивов. Ладно, декларация это может быть не ясно, но обычные операции присвоения... что переменные, что массивы... я чего то в это жизни упустил видимо 

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

48

Re: АНК: Массивы

Indomito пишет:

OFF: Угу Честное слово я не понимаю что сложного писать/читать в/из массивов. Ладно, декларация это может быть не ясно, но обычные операции присвоения... что переменные, что массивы... я чего то в это жизни упустил видимо 

Ты же сам недавно ломал голову над двумерными массивами.

49

Re: АНК: Массивы

Я не знал как их описать константно, но я знал как с ними работать это две большие разницы

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

50

Re: АНК: Массивы

Заполнил массив:


Array := Object()
Loop 100
{
	Y := 5 + 2*(A_Index-1)
	Array[Y] := []
i :=
	Loop 100
	{
   k += 1
   i += 1
   X := 10 + 3*(i -1)
      Array[Y,X] := k
	}
}
MsgBox, % "k = " Array[203, 307] ", " Array[85, 130] ", " Array[89, 133]

51

Re: АНК: Массивы

В MsgBox не стоит выводить на прямую массив, т.к. "," это разделитель для MsgBox.
Написать строчку

MsgBox, % "k = " Array[203, 307] ", " Array[85, 130] ", " Array[89, 133]

лучше так

k := Array[203, 307]  ", "  Array[85, 130]  ", "  Array[89, 133] ; не забываем пробелы
MsgBox, 0, Значение К, "k = " k, 15

так проще и нагляднее IMHO

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

52 (изменено: Indomito, 2012-04-20 07:39:08)

Re: АНК: Массивы

Вопрос "с моей стороны".

Значения по умолчанию и передача массива в виде аргумента функции.

fnHotKeyOnOff(,"sasa1","sasa2")
;или
vTmpArr := ["tata1","tata2","tata3"]
fnHotKeyOnOff(false,vTmpArr*)
return
;---------------------------------------
fnHotKeyOnOff(fSw = true, vIsArr*)
{
  msgbox %fSw%
  vLoop := vIsArr.MaxIndex()
  i := 1
  loop %vLoop%
  {
  a := vIsArr[i]
  msgbox %a%
  i++
  }
return
}

Всё правильно написано?
Я знаю что передать сначала должны быть простые аргументы, а уж потом variadic functions parameters(*).

P.S. Да, всё работает, но мало ли...

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

53

Re: АНК: Массивы

Indomito пишет:

Всё правильно написано?

Да ровно всё.

P.S.: Я бы избавился ещё от лишних переменных, и не нужных Return'ов:

fnHotKeyOnOff(, "sasa1"
              , "sasa2"
              , "sasa3"
              , "sasa4"
              , "sasa5")
vTmpArr:=["tata1", "tata2", "tata3"]
fnHotKeyOnOff(False, vTmpArr*)

fnHotKeyOnOff(fSw=True, vIsArr*)
{
   Loop, % vIsArr.GetCapacity()
      MsgBox, 262144
            , % "index: "A_Index ", fSw: "fSw
            , % vIsArr[A_Index],1
}

54

Re: АНК: Массивы

Grey пишет:

P.S.: Я бы избавился бы ещё от лишних переменных, и не нужных Return'ов:

я просто тестировал "*" дальше всё будет иначе.

Да, вопрос... ещё. А больше одного объекта-массива передать нельзя?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

55

Re: АНК: Массивы

Думаю, что нет. Если только так, но это уже не то...:

rv:=fnHotKeyOnOff(,, "sasa1", "sasa2")
Array:=["tata1", "tata2", "tata3"]
Array2:={1:"black"      ,  2:"notmergepen"
      ,  3:"masknotpen" ,  4:"notcopypen"
      ,  5:"maskpennot" ,  6:"not"
      ,  7:"xorpen"     ,  8:"notmaskpen"
      ,  9:"maskpen"    , 10:"notxorpen"
      , 12:"mergenotpen", 13:"copypen"
      , 14:"mergepennot", 15:"mergepen"
      , 16:"white"}

MsgBox, 262144
      , % " "SubStr(rv.="`n"fnHotKeyOnOff(Array2
                                        , False
                                        , Array*)
                                        , 151)
      , % rv "`n"Array2

fnHotKeyOnOff(ByRef Result="", fSw=True, vIsArr*)
{
   Loop, % vIsArr.GetCapacity()
      ReturnValue.="index: "A_Index ", fSw: "fSw
                 . "`nvalue: "vIsArr[A_Index]"`n"
   For Key, Value In Result
      Result.=Key ", "Value "`n"
   Return, ReturnValue
}

56 (изменено: Indomito, 2012-04-20 22:15:14)

Re: АНК: Массивы

Да, не то.
По сути то AHK это же не С++... я про то что много от AHK хочу

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

57

Re: АНК: Массивы

Indomito пишет:

По сути то AHK это же не С++...

AHK - это скриптовый язык, а C++ - язык программирования.

58 (изменено: Malcev, 2014-02-05 05:55:21)

Re: АНК: Массивы

Помогите, пожалуйста, перевести в массивы, а то я не понимаю принцип работы с ними.

If !FileExist("С:\")
   disk := "С"
If !FileExist("D:\")
   disk := "D"
If !FileExist("E:\")
   disk := "E"
If disk !=
   msgbox, disk %disk% error!
return

59

Re: АНК: Массивы

А задача-то какая? Что приведенный код делает, непонятно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

60

Re: АНК: Массивы

Проверяет на наличие дисков.

61

Re: АНК: Массивы

DriveGet

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

62

Re: АНК: Массивы

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

63

Re: АНК: Массивы

DriveGet как раз выдает список дисков.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

64

Re: АНК: Массивы

Так мне не нужен список.
Мне нужен один и только в том случае если он сломался.

65

Re: АНК: Массивы

Drives := ["C", "D", "E"]
DriveGet, List, List

Unconnected := ""
for k, v in Drives
   if !InStr(List, v)
      Unconnected .= v
   
MsgBox, % Unconnected
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

66

Re: АНК: Массивы

Спасибо!
Буду изучать.