Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#16: 2011-10-07 00:26:21 ЛС | профиль | цитата
login писал(а):

const
arr3:array[0..1363] of integer ;

А он пишет:
Error: '=' expected but ';' found
потому и пишет, что const. Раз const - значит давай значения.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1429
Рейтинг: 50
#17: 2011-10-07 00:49:23 ЛС | профиль | цитата
ПОлучилось вот так )

code_25392.txt

И работает, щас буду пробовать размеры проверять.
------------ Дoбавленo в 00.43:
Работает, 65 000 значений, пишет и читает. (больше не проверял )

Код элемента:

#hws
func Init
lang(arr:array)
if(isndef(Numbers))
fvar(s, n, i, old)

s = Numbers
if(_arr.count(s))
for(i = 0; i < _arr.count(s); i++)
n &= s[i][0]
end
s = _arr.join(n, ',')
else
s = ''
end
lng.decl_priv_var(arr, 'array[0..65000] of integer')
end
sub(arr, 13 & 1)
end

func Array()
return(arr)
end


Нужный размер массива надо будет в проперти загнать.

Ура! Товарищи!
------------ Дoбавленo в 00.49:
Может можно было замутить динамический массив, если бы я знал как на делфи это выглядит?
карма: 0

0
файлы: 1code_25392.txt [1.9KB] [165]
Ответов: 3889
Рейтинг: 362
#18: 2011-10-07 00:51:16 ЛС | профиль | цитата
login писал(а):
как на делфи это выглядит?

AFAIK, без квадратных скобок, т.е. без размерности (размеры потом придётся указывать всё равно, через SetLength(массив, размер) ). Можно ещё объявить массив из массивов (Array of Array), то есть многомерный массив.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#19: 2011-10-07 01:05:50 ЛС | профиль | цитата
А как при помощи SetLength, сделать точку "добавить запись в конец массива"?
------------ Дoбавленo в 01.05:
А, наверное так:
1. узнать размер массива
2. увеличить размер массива на 1
3. записать значение в последнюю ячейку


карма: 0

0
Ответов: 3889
Рейтинг: 362
#20: 2011-10-07 01:10:56 ЛС | профиль | цитата
login писал(а):
записать значение в последнюю ячейку

Кстати, нумерация в динамических массивах относительная, то есть начинается с нуля.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#21: 2011-10-07 11:33:57 ЛС | профиль | цитата
Надеюсь что "2. увеличить размер массива на 1" это не медленная операция (при размере массива 50 000).
------------ Дoбавленo в 05.25:
Добавил элементы FTCG Big Array в раздел "Делаем компоненты".

------------ Дoбавленo в 08.19:
C 'array of array' еще прийдется поломать голову.
------------ Дoбавленo в 11.33:
Подскажите, как заставить работать этот пример из инета?

Add(MainForm,2953706,21,105)
{
Width=308
}
Add(InlineCode,490725,210,119)
{
WorkPoints=#3:in1|
EventPoints=#4:out1|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|18: out1:THI_Event;|42: procedure in1(var dt:TData;Index:Word);|5: end;|0:|14:implementation|0:|26:procedure THiAsmClass.in1;|4:var |33: ar1: array of array of integer;|5:begin|32:// An array of 4 by 4 elements: |23: SetLength(ar1, 4, 4);|19: // Use the array:|16: ar1[0,0] := 5;|16: ar1[0,1] := 7;|18: ar1[2,0] := 200;|17: // and so on...|0:|29:_hi_OnEvent_(out1, ar1[0,0]);|29:_hi_OnEvent_(out1, ar1[0,1]);|29:_hi_OnEvent_(out1, ar1[2,0]);|4:end;|0:|4:end.|0:|0:|0:|0:|0:|0:|0:|
link(out1,15938406:doAdd,[])
}
Add(Button,4071366,154,119)
{
Left=15
Top=30
Width=75
Height=185
Data=String(я строка из кнопки)
link(onClick,490725:in1,[])
}
Add(ListBox,15938406,266,119)
{
Left=105
Top=5
Width=190
Height=250
}


карма: 0

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#22: 2011-10-07 12:01:03 ЛС | профиль | цитата
login писал(а):
Подскажите, как заставить работать этот пример из инета?


code_25397.txt
карма: 22

1
файлы: 1code_25397.txt [1KB] [202]
Голосовали:login
Ответов: 3889
Рейтинг: 362
#23: 2011-10-07 12:10:46 ЛС | профиль | цитата
login, кстати, многомерный массив вовсе не обязан быть быть таблицей, каждому подмассиву можно назначать размерность индивидуально, через SetLength(массив[индекс_подмассива], размер)
карма: 1

0
Ответов: 1429
Рейтинг: 50
#24: 2011-10-07 12:37:57 ЛС | профиль | цитата
А как теперь скопировать один массив в другой, как подмассив?

code_25398.txt
карма: 0

0
файлы: 1code_25398.txt [1.2KB] [137]
Ответов: 3889
Рейтинг: 362
#25: 2011-10-07 12:43:52 ЛС | профиль | цитата
login писал(а):
скопировать один массив в другой

Может, Copy(массив,0,High(массив))
карма: 1

0
Ответов: 1429
Рейтинг: 50
#26: 2011-10-07 12:51:38 ЛС | профиль | цитата
Попробовал: Copy(ar2[0,0],0,High(ar1));

Error: Incompatible types

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

карма: 0

0
Ответов: 3889
Рейтинг: 362
#27: 2011-10-07 13:02:06 ЛС | профиль | цитата
login писал(а):
может это не возможно

Перебором в цикле
карма: 1

0
Ответов: 1429
Рейтинг: 50
#28: 2011-10-07 13:25:02 ЛС | профиль | цитата
1nd1g0 писал(а):
Перебором в цикле
в инете везде пишут, что делфи сам все делает, вполне достаточно даже
ar2 := ar1; Странно, что он пишет: .pas(36) Error: Incompatible types

Ужасно перебирать в цикле, массивы нужны большие.
------------ Дoбавленo в 13.25:
При простом копировании, копируется не массив а указатель на массив. Как-то можно получить указатель на массив, и записать его в строковый массив как строку, чтобы потом использовать его?
карма: 0

0
Ответов: 3889
Рейтинг: 362
#29: 2011-10-07 13:34:32 ЛС | профиль | цитата
login писал(а):
делфи сам все делает

Это ещё большой вопрос, КАКАЯ ВЕРСИЯ компилятора научилась это делать (кстати, что под FPC?)
login писал(а):
указатель на массив

Сам массив получаем прибавив к имени ^
Но он Вам не даст скомпилировать, скажет, что нужен указатель.
login писал(а):
получить указатель на массив, и записать его в строковый массив как строку

Что-то у меня серьёзные сомнения, что в этой среде массивы можно обрабатывать как непрерывные области памяти, как в cc++. Опять же, вероятно, придётся делать перебор.
------------ Дoбавленo в 13.34:
1nd1g0 писал(а):
что под FPC?

Сам спросил, сам ответил - под FPC компилируется без ошибок и даже работает.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#30: 2011-10-07 13:42:21 ЛС | профиль | цитата
да, но удобный финт типа: "ar2[0,0,0] := ar1;" - не работает. Наверное это невозможно. Или надо поставить компилятор посвежее.
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)