IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Как создать резиновый массив?
сообщение
Сообщение #1


Гость






Синтаксиса не знаю, поэтому объясняю на пальцах:

массив[заранее_не_знаю_сколько_элементов]
i:=0
начало_цикла
 i:=i+1
 элемент_массива[i] = ввод_с_клавы(неск._букв)
 если элемент_массива[i] = 'особый_символ' то
   выйти из цикла
конец_цикла

Вопрос в том, как бы мне менять границы массива по ходу исполнения программы? Есть ли какие варианты? Может быть, использовать не массивы, а ещё что-то?
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Да, с обычным массивом такое делать нельзя. С динамическим , по-моему, тоже. Разве что каждый раз, когда надо менять размер массива, создавать новый и копировать в него влезшие элементы старого smile.gif . В голову лезут всякие списки, стеки,... деревья smile.gif . Пожалуй, есть одна более подходящая идея: реализовать многомерный динамический вектор. Это указатель на массив примерно [0..9] указателей на массив [0..9] указателей... ...на массив [1..10] элементов. Должно храниться общее число элементов. В таком n-мерном векторе может поместиться до 10^n элементов. Доступ, скажем, к 143-му элементу будет выглядеть p^[0]^[0]^[1]^[4]^[3]. Это будет намного быстрее, чем в списке. Памяти на вектор уйдёт больше, чем на обычный массив, но не так уж намного. Дело в том, что она не выделяется сразу для всех 10^n эл-тов, а по мере их добавления, так что, если не ошибаюсь, для хранения m элементов потребуется m div 10 + m div 100 +... + m div 10^(n-1) + n указателей. Менять границы можно new или delete соответствующего кол-ва указателей. Конечно, реализация несколько сложна, но всё вполне нормально пишется.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 12:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name