Author Topic: Массивы.  (Read 6697 times)

0 Members and 1 Guest are viewing this topic.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Массивы.
« on: January 23, 2014, 06:32:44 PM »
Здравствуйте, не могу извлечь из массива нужный элемент.

print ($arr[1]) - работает, возвращает первый элемент.

print($arr [$index]) - не работает.

И со скобками пробовал и с квадратными и вообще без них и через запятую и двоеточие и точкой с тире.... перебрал всю клавиатуру, толку нуль.
Из описания по языку ничего не понял, кликерман не может работать с индексами массива в виде переменных, можно только реальные числа писать ?
Странные тогда массивы получаются, теперь надо для вывода инфы написать что то вроде этого:

Quote
print ($arr[1])
print ($arr[2])
print ($arr[3])
print ($arr[4])
print ($arr[5])
print ($arr[6])
print ($arr[7])
print ($arr[8])
print ($arr[9])
print ($arr[10])
print ($arr[11])
print ($arr[12])
, для чего тогда циклы если массив с ним не умеет работать.
Перечитал весь хелп по командам, нету там примера работы с переменной в роли индекса массива.

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Массивы.
« Reply #1 on: January 23, 2014, 06:39:33 PM »
Вот ты даешь. Как это нельзя. И примеры плохо читал.
Ищи ошибку у себя. Скорее всего переменная не числовая.


putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Массивы.
« Reply #2 on: January 23, 2014, 06:45:10 PM »
Да, мой косяк.
Использовал одну переменную для чтения строк из файла в массив, и потом её же из массива.
В файле первой идёт [1]-ая строка, а в массиве
  • -ая.

Я всегда читал из массива несуществующую строку, которая только следующей запишется.
Простите, что нагнал кипишу.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Массивы.
« Reply #3 on: January 23, 2014, 06:51:22 PM »
Массив начинается с 0. Все прекрасно работает, по край ней мере на 4.9 версии, но в ней есть пока серьезный баг с циклом и подпрограммой в нем.

Code: (clickermann) [Select]
ARRPUSH($arr, 1)
ARRPUSH($arr, 2)
ARRPUSH($arr, 3)
ARRPUSH($arr, 4)

$index = 3

print("Вывод 1ой и 2ой строки массива")
print($arr[0])
print($arr[1])
print(" ")

print("Вывод 4ой строки")
print($arr[$index])
print(" ")

print("Вывод всех строк массива")
$index = 0
WHILE($index < ARRSIZE($arr))
print($arr[$index])
INC($index,1)
END_CYC

HALT

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Массивы.
« Reply #4 on: January 23, 2014, 06:53:37 PM »
Cпасибо.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Массивы.
« Reply #5 on: January 23, 2014, 06:56:13 PM »
Можно и одну. Просто для массива писать $arr [$index-1]


Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Массивы.
« Reply #6 on: September 03, 2015, 04:18:25 PM »
Чтоб не создавать...
Привет Всем :) Такая вопрос-задачка. Можно ли вытащить из середины массивов массив и поставить его в конец, при этом остальные соответственно должны сместиться вниз на один.
Пример. Есть, допустим, 10 массивов (если я правильно выражаюсь, может правильно называть 1 массив и в нём 10 переменных?!):

$g[0]=47
$g[1]=22
$g[2]=53
$g[3]=12
$g[4]=5
$g[5]=85
$g[6]=44
$g[7]=17
$g[8]=3
$g[9]=74

Можно ли, допустим, $g[2] сделать $g[9], при этом все остальные должны сместиться вниз, т.е. должно потом получиться такое:
...
$g[0]=47
$g[1]=22
$g[2]=12
$g[3]=5
$g[4]=85
$g[5]=44
$g[6]=17
$g[7]=3
$g[8]=74
$g[9]=53

? :)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Массивы.
« Reply #7 on: September 03, 2015, 07:27:51 PM »
Проще всего это сделать через временный текстовый файл.

Пример
Code: (clickermann) [Select]
$g[0]=47
$g[1]=22
$g[2]=53
$g[3]=12
$g[4]=5
$g[5]=85
$g[6]=44
$g[7]=17
$g[8]=3
$g[9]=74

$zamena = 2 // номер строки массива

LOGWRITE ("До")
LOGWRITE (" ")
FOR($a=0,$a<ARRSIZE($g))
   LOGWRITE ($g[$a])
END_CYC

$gsav = $g[$zamena]
TFWRITEARR("arr.txt", $g)
TFDELETE("arr.txt", $zamena+1)
TFWRITE("arr.txt", $gsav)
UNDEFINE($g)
TFREADARR("arr.txt", $g)
TFCLEAR("arr.txt", 1)

LOGWRITE (" ")
LOGWRITE ("После")
LOGWRITE (" ")
FOR($a=0,$a<ARRSIZE($g))
   LOGWRITE ($g[$a])
END_CYC

HALT

Code: (clickermann) [Select]
$g[0]=47
$g[1]=22
$g[2]=53
$g[3]=12
$g[4]=5
$g[5]=85
$g[6]=44
$g[7]=17
$g[8]=3
$g[9]=74

$zamena = 2 // номер строки массива

$gsav = $g[$zamena]
TFWRITEARR("arr.txt", $g)
TFDELETE("arr.txt", $zamena+1)
TFWRITE("arr.txt", $gsav)
UNDEFINE($g)
TFREADARR("arr.txt", $g)
TFCLEAR("arr.txt", 1)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Массивы.
« Reply #8 on: September 04, 2015, 08:18:43 AM »
Зачем через текстовый?  :o Неужели никто массивы не сортирует...

Code: (clickermann) [Select]
$g[0]=47
$g[1]=22
$g[2]=53
$g[3]=12
$g[4]=5
$g[5]=85
$g[6]=44
$g[7]=17
$g[8]=3
$g[9]=74

$zamena = 2 // номер строки массива

// сама перестановка
$len = ARRSIZE($g)
$temp = $g[$zamena]
FOR($i=$zamena, $i < ($len - 1))
   $g[$i] = $g[$i+1]
END_CYC
$g[$len-1] = $temp

// выведем результат
FOR($i=0, $i < $len)
   LOGWRITE ("$g[", $i, "]=", $g[$i])
END_CYC
HALT


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Массивы.
« Reply #9 on: September 04, 2015, 09:56:32 AM »
Зачем через текстовый?  :o Неужели никто массивы не сортирует...

Потому что там может быть не 9 строк а 100500. И сколько этот FOR все это будет перебирать?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Массивы.
« Reply #10 on: September 04, 2015, 10:38:00 AM »
А сколько он их будет писать и читать?
Но это всё в сторону быстродействия массивов.
Не думаю что в спрашиваемой задаче их больше 100, а скорее не больше десятка-двух, иначе бы он его руками не задавал каждый элемент  ;D