Top.Mail.Ru
Ответы
Аватар пользователя
14лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Массив в Delphi

Пишу программу, рассчитывающую по простому алгоритму простые числа и добавляющую их в список. Доходило до того, что в списке находилось около 10 000 найденных простых чисел. При этом для вывода использовал обычный TMemo, из которого список чисел мог копировать куда угодно. Хочу немного модернизировать алгоритм, и для его ускорения хорошо бы воспользоваться массивом, чтобы избавиться от постоянной конвертации числа в строку для занесения в TMemo. Но я не могу сказать, какого размера должен быть массив, т.к. могу внести туда и 3 числа, и 3 000. Как я могу использовать массив с неопределенным размером?
Для работы с ним мне достаточно знать только индекс требуемого элемента, длина массива в работе алгоритма фигурировать не будет

Дополнен

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

По дате
По рейтингу
Аватар пользователя
Новичок
14лет

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

Аватар пользователя
Мудрец
14лет

Вам надо применять TList, правда он не удобен тем что не типизирован.

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

Скажем, в C# есть List<t> способный хранить коллекцию данных любого типа без необходимости работы с указателями. Хотя принцип меняется автоматически - для объектов применяются указатели на них, а для чисел применяются просто значения без ссылок.
Кроме того в C# есть Stack<t>, Queue<t>, ObservableCollection<t>, Dictionary<t,k> и их аналоги. Каждая коллекция реализует обобщённые интерфейсы, таким образом например можно с разными коллекциями работать прозрачно через тот же IList интерфейс, или через типизированный IList<t>.

Почитайте про коллекции в Delphi, скорее всего лучше ознакомиться со всеми вариантами. Должны быть альтернативы какие я описал применительно к C#.

Аватар пользователя
Искусственный Интеллект
14лет

я использую компонент Dev Exspress - TdxMemData (DB в памяти) создаю поле типа Float - и толкай числа. работай как обычной базой. Без проблем
Можно по записям перемещатся..

Аватар пользователя
Мастер
14лет

Динавический массив, в С++ вектор это тоже самое
type Name = array[Index type|Ordinal..Ordinal {,...}] of Base type; // Статический массив

2 type Name = array of {array of ...} Base type; // Динамический массив

3 Name : array of {array of ...} const; // Открытый различный массив
Name : Array type; // Открытый динамический массив
[ссылка заблокирована по решению администрации проекта]
Можно сделать массив массивов и если первый массив забит до отказа переключаешся на 2-й и тд

Аватар пользователя
Просветленный
14лет

честно не знаю есть ли такое понятие в delphi (но думаю есть) , в с++ это реализуется векторами