1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Как надо написать в 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?
Нет, ты нашел совсем не то. Слав, я тебе от души советую: научись придавать значение каждому слову в том, что читаешь. Я с чего начал? С того, что есть два способа, причем один из них доступен практически во всех компиляторах (ТР, например), и этот метод называется динамической памятью, а второй есть только в продвинутых компиляторах (FPC, например, который ты скачал - да?), и он называется динамические массивы (dynamic array). То, что ты привел - это работа с динамической памятью. Ошибиться довольно легко, потому что в сети масса недоразумений по этому поводу.
Если ты теперь действительно являешься счастливым обладателем FPC, и тебе не нужна совместимость с ТР, то я рекомендую работать именно с динамическими массивами. Повторяю: это НЕ ТО, что ты нашел. Я расскажу сейчас именно про динамические масивы.
Цитата(TarasBer @ 1.11.2009 14:18)
Ну просто array of написать не получится.
TarasBer, внимательнее читай тему перед ответом, пожалуйста.
Итак, в FPC ты имеешь полное право написать так:
a: array of integer; b: array of array of LongInt; c: array of record e: char; d: double; end;
Размер такого массива не определен (то есть равен нулю, грубо говоря, если не считать описывающей массив структуры) до использования SetLength. После этого массив будет иметь столько элементом, сколько назначено, причем отсчет начинается с нуля. Освободить память можно посредством назначения нулевой длины. Например:
SetLength(a,10); a[0]:=123; a[9]:=456; {a[10]:=1; - неверно!!} SetLength(b,10,20); b[0,19]:=123456; SetLength(c,5); for i:=0 to 4 do with c[i] do begin e:='a'; d:=2.718281828*i; end; SetLength(c,3); {обрезали массив до 3 элементов, верхние больше использовать нельзя} c[2]:=c[0]; SetLength(c,0); {совсем убрали массив из памяти}
Процедура SetLength имеет такое же название, как аналогичная процедура для типа String. Конечно, и действие ее аналогично, но нельзя забывать и о различиях - название одинаковое, но вещи разные.
Этого средства (dynamic arrays) достаточно для огромного количества нужд. Поэтому лчень может статься, что в ближайшее время тебе не понадобится работа с динамической памятью. Если же все же возникнет нужда - скажи, объясним )).
ой, блин, просрочил паркинг - этот мессадж мне стоил доллар.. ))))))))
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой