Дополнительные замечания по массивам

(Этот текст написан в дополнение к основному материалу про массивы, который вы можете прочитать в любой книжке.)

Работа с массивами и цикл for

Цикл for — ваш основной помощник в работе с массивами. Одна из наиболее частых операций — это «пробежаться» по массиву; она реализуется обычно циклом for i:=1 to n, где n — количество элементов в массиве.

Например, если вам надо вывести на экран весь массив, то это делается так:

for i:=1 to n do
    write(a[i],' ');

(Конечно, бывают ситуации, когда вам надо рассматривать не все элементы массива — тогда цикл может быть другим.)

Фиктивные элементы

Вы часто будете понимать, что вам нужен массив, размер которого заранее неизвестен. Например, в условии может быть сказано "задано N, а затем N чисел". В таком случае обычно в условии также указано максимальное допустимое значение N (например, N<=1000), и вы можете просто завести массив такой длины, которой вам заведомо хватит (массив из 1000 элементов в нашем примере), просто лишние элементы вы использовать не будете. В простых задачах этого достаточно; в будущем вы также узнаете, как делать массив размера, который неизвестен заранее.

Большие массивы во Free Pascal

Вы можете встретить в книжках указание, что в паскале невозможно создать массив, занимающий больше 64 Кб памяти, или примерно 32000 integer'ов1 и т.п. Это относится к Borland Pascal, во Free Pascal таких ограничений нет. Вы можете создавать достаточно большие массивы, их максимальный размер ограничен несколькими гигабайтами для 32-битных систем, и еще бОльшим значением для 64-битных систем (точные ограничения могут зависеть от системы; тут еще вопрос не только в том, какой массив позволяет создать паскаль, но и какой размер памяти позволит вашей программе использовать ваша операционная система).

Синтаксис задания больших массивов не отличается ничем особенным, например, чтобы сделать массив на 1000000 integer'ов, просто пишите

var a:array[1..1000000] of integer;

Ограничения памяти

Тем не менее, не следует увлекаться созданием больших массивов. Делайте такие массивы, которые вам реально нужны в задачах. Если, например, в условии сказано, что вашей программе дан массив из не более чем 1000 элементов — значит, и заводите массив на 1000 элементов (или на 1001, если вам нужен фиктивный элемент, и т.п.).

В частности, в каждой задаче на этом сайте, и в каждой задаче на олимпиадах присутствует ограничение по памяти, т.е. указан максимальный объем памяти, которую может потребовать ваша программа. (На этом сайте оно явно указано не в каждой задаче, но реально все равно всегда установлено и составляет порядка 64—256 Мб.) Если вы используете больше памяти, то в зависимости от тестирующей системы соответствующий тест будет помечен или как "Превышен максимальный объем памяти" (Memory limit exceeded) или т.п., или вы можете получить "Ошибку времени выполнения" (Runtime error). В частности, если ваша программа на всех тестах получает статус "ошибка времени выполнения" — возможно, вы потребовали себе слишком много памяти.

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


1 Это соотношение памяти и количества integer'ов верно тоже только для Borland Pascal, в котором переменная типа integer занимает 2 байта. Во Free Pasal в mode delphi переменная типа integer занимает 4 байта