| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > Открытые массивы |
| Автор: ilyuha 10.7.2007, 16:59 |
| Здрасьте ситуация такая: я пишу прогу по обработке БД. заранее, естественно, количество ее элементов не известно. я решил заюзать открытые массивы, но до этого я их не использовал... только читал про них. и тут же возникла проблема. к примеру, если я пишу ... mytype=array of integer; ... то компилятор материться на отсутствие индексов... подскажите плиз, в чем трабла? ЗЫ юзаю я BP7 |
| Автор: nmn 10.7.2007, 20:26 |
| в паскале нет открытых массивов, можно использовать списки |
| Автор: ilyuha 10.7.2007, 20:54 |
| nmn, как так? везде пишут, что открытые массивы введены с 7-ой версии |
| Автор: Throne 10.7.2007, 21:14 |
| в трех разных изданиях (на бумаге) посмотрел статьи про массивы. нигде такого нет. |
| Автор: nmn 10.7.2007, 21:55 |
| при передаче массива параметром индексы не указываются это правда, но сколько я писал на паскале на 7 версии массивов без индексов не встречал |
| Автор: ilyuha 10.7.2007, 22:49 |
| nmn, блин. а как же быть? под мою задачу списками довольно геморно будет |
| Автор: greenpc 11.7.2007, 11:46 | ||
| ilyuha типа того
|
| Автор: ilyuha 11.7.2007, 12:40 |
| Хм, такое мне и в голову не приходило |
| Автор: Nite 11.7.2007, 16:03 |
| В BP7 нельзя выходить за границы сегмента. Поэтому максимальное число элементов массива, если они integer, будет порядка 32700. В общем случае, размер данных не должен превышать 65520 байт. Это число надо разделить на размер одного элемента (2 байта для integer), получишь максимальный размер массива. Чтобы не ругалось про выход за границы массива, можно описать тип так TMyArray=Array[1..32700] of Integer; И при обращениях к элементами придется индекс проверять явно, чтобы не было выхода за границы. |
| Автор: ilyalyu 11.7.2007, 17:05 |
| Странно, что нет открытых масивов. Пиши на Delphi или на FreePascal - там есть. |
| Автор: ilyuha 11.7.2007, 19:41 |
имхо, не лучший способ... я хочу грамотно юзать память боюсь, что нельзя... мы изучали борланд паскаль, и эта прога должна быть..... ммм.... короче, мне ее надо написать и по ней сделать курсавик... и я думаю надо юзать BP7 или TP7 народ, помогите организовать данные плиз |
| Автор: nmn 13.7.2007, 16:46 |
| ну так используй списки или как сказал greenpc, чем не открытый массив? Добавлено через 4 минуты и 58 секунд чем неграмотно данное использование памяти? ведь это будет не статический массив, ты сам будешь выделять память, а данная запись только что бы успокоить компилятор. |
| Автор: ilyuha 13.7.2007, 19:09 |
| nmn, тогда прошу прощения у Nite... я его не правильно понял а вообще, посоветуйте, с чем гемора менььше будет, со списками или с таким массивом? |
| Автор: nmn 13.7.2007, 21:26 |
| списки гибче, но там нужно время для поиска элемента, у массивов же время поиска отсутствует - там сразу известно где находится элемент, но отсутствует та гибкость, которая присуща спискам, нельзя так же легко поменять расположение элементов(это справедливо для структуированых типов), нельзя передавать элементы из одного массива в другой как в списках, там можно очень лего перебросить элемент из одной записи в другую и др. |
| Автор: ilyalyu 15.7.2007, 12:04 | ||
Извиняюсь.. Грамоте плохо обучен. Действительно, правильно - динамические |
| Автор: nmn 15.7.2007, 13:18 | ||
нет таких |
| Автор: ilyuha 15.7.2007, 14:28 |
Тогда почему компилятор ругаеться? и почему тогда именно для моих целей открытые массивы не подойдут? ЗЫ извиняюсь за ламерские вопросы,просто не юзал я их никогда |
| Автор: ilyalyu 18.7.2007, 18:21 | ||||
| ilyuha, как тут правильно подсказали, открытые масивы - это не совсем то. проще пояснить на примере. пример динамического масива:
пример открытого масива:
такой код позволяет передавать в функцию массив любой длины. если хочешь убедиться что открытый масив это не то же самое, что и динамический, попробуй в теле функции написать SetLength(arr, 1) и посмотри на ошибку. впрочем, это вопрос терминологии. |
| Автор: ilyuha 21.7.2007, 20:18 |
| спасибо |