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

> Прочтите прежде чем задавать вопрос!

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

> Ограничение для выделения памяти под массив
сообщение
Сообщение #1


Бывалый
***

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

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


Как надо написать в var'e, когда необходимо выделить некоторое количество ячеек для массива?

Код
var
a:array[1..?] of integer;
...

write('kakoe koli4estvo simvolov bydet v massive');
readln(n);

for i:=1 to n do
{zapolnenie masiva lyubym sposobom}

Если место ? написать n, вылетает ошибка, тогда что должно быть место вопросительного занка? Нельзя же просто писать максимальную цифру от фонаря, типа 9999?


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Вячеслав Людской @ 26.10.2009 18:16) *
Код
var
a:array[1..?] of integer;
...
write('kakoe koli4estvo simvolov bydet v massive');
readln(n);
for i:=1 to n do
{zapolnenie masiva lyubym sposobom}

Если место ? написать n, вылетает ошибка, тогда что должно быть место вопросительного занка? Нельзя же просто писать максимальную цифру от фонаря, типа 9999?
Ошибка не вылетит, если написать так:
const
m= 100;
var
a: array[1..m]of integer;
- а в программе допускать использование только тех значений n, которые не превосходят m. m при этом - константа, ее изменять нельзя. Это позволяет сделать программу немного проще изменяемой, но вообще-то проблемы не решает. Если ты хочешь выделять под массив ровно столько памяти, сколько нужно, то есть, грубо говоря, два способа:
1. использовать динамическую память;
2. использовать динамические массивы.
Насколько я помню (давно ТР не запускал уже), динамических массивов (то есть п.2) в ТурбоПаскале нет. Есть же они, например, в FreePascal. Поэтому, вопрос: что конкретно ты используешь?
Добавлю, что способ 1 посложнее в понимании, и в нем больше писанины, но он предоставляет практически полные возможности по управлению памятью. Способ 2 предоставляет более высокий уровень, он скрывает манипуляции с памятью (компилятор берет их на себя); во многих случаях он удобнее.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

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


Цитата(Lapp @ 28.10.2009 6:39) *

2. использовать динамические массивы.
Насколько я помню (давно ТР не запускал уже), динамических массивов (то есть п.2) в ТурбоПаскале нет.


Ну просто array of написать не получится.
Но можно сделать так:

type
TArr = array [0 .. 32766] of integer; {больше всё равно не выйдет - сегмент данных вмещает только 65536 байт}
PArr = ^TArr;

var
A: PArr;
i, n: integer;

begin
readln(n);
GetMem(A, n*sizeof(integer));
...
end.



--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Вячеслав Людской   Ограничение для выделения памяти под массив   26.10.2009 22:16
volvo   Смотря что тебе надо, сколько элементов будет хран…   26.10.2009 22:23
Вячеслав Людской   Вопрос был именно для случая, когда заранее неизв…   27.10.2009 23:06
Lapp   [code]var a:array[1..?] of integer; ..…   28.10.2009 10:39
TarasBer   2. использовать динамические массивы. Насколько я…   1.11.2009 18:18
Вячеслав Людской   const m= 100; var a: array[1..m]of integer; По…   28.10.2009 19:24
Lapp   По моему, тут мы просто так же от фонаря пишем 100…   29.10.2009 1:27
Вячеслав Людской   Я не правильно понял "вопрос: что конкретно …   29.10.2009 16:15
Lapp   Вот насчет этого не надо, всегда стараюсь, отвечат…   29.10.2009 19:41
Вячеслав Людской   :) Тогда, извиняюсь, "поэтому" я действ…   29.10.2009 21:02
Вячеслав Людской   Насчет динамических массивов: я нашел немного, сам…   1.11.2009 13:58
andriano   Которую из приведенных 5 строчек ты не понял? Есл…   1.11.2009 17:58
Lapp   Насчет динамических массивов: я нашел немного, Нет…   2.11.2009 10:49
Вячеслав Людской   Специально, чтобы не было таких предложений, я пр…   2.11.2009 13:37
Lapp   Сначала о простом: double - это один из веществен…   2.11.2009 18:49
-volvo-   Это значит только одно: Как только тебе не нужна б…   2.11.2009 19:40
Вячеслав Людской   Извиняюсь, маленько отвлекся. За объяснения спаси…   5.11.2009 21:23
Lapp   Строчка SetLength(a,10) - означает присвоить масси…   6.11.2009 11:48
andriano   Ну да. Аналогия: Тебе выдали пачку чистой бумаги -…   6.11.2009 14:40
Вячеслав Людской   Все понял, спасибо.   6.11.2009 18:10


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

 





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