Массивы в языке Pascal. Одномерные массивы
Обновлено: 12.04.2026
Переменные стандартных типов можно изобразить отдельными маленькими ячейками.

В таких ячейках могут содержаться любые значения из диапазона, определяемого типом переменной. Например, в ячейке, связанной с переменной, у которой тип integer, может храниться любое целое число в диапазоне примерно от -32000 до 32000.
Однако в Паскале и многих других языках программирования можно объявлять переменные, которые являются массивами таких однотипных ячеек. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее номеру в массиве.

Спрашивается, зачем это надо? Представьте, что программа работает с большим количеством однотипных данных. Скажем, около ста разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и то же выражение вычисления значения? Это очень неэффективно. Использование такого типа данных как массив решает эту проблему.
Ячейки массива можно назвать элементами. У каждого элемента есть индекс и значение. Индекс — это порядковый номер элемента в массиве. Он есть у элементов, потому что они упорядочены в массиве, то есть расположены друг за другом. Значение элемента — это данные, которые находятся в его ячейке, то есть то, чем заполнена ячейка.
У одного и того же массива во всех ячейках могут лежать данные, которые принадлежат только одному типу, например real. Поэтому вводят такое понятие как базовый тип массива — это тип элементов, из которых составлен массив. То есть есть "массив" как сложный тип данных, но при определении переменной такого типа мы обязаны указывать тип элементов, из которых состоит массив, то есть задавать базовый тип.
Теперь посмотрим на примере, как в Паскале можно определить массив, заполнить его ячейки своими данными, а потом извлекать из массива значения.
var n: array[1..5] of integer; begin writeln(n[1], ' ', n[2], ' ', n[3], ' ', n[4], ' ', n[5]); n[1] := 33; n[3] := 178; writeln(n[1], ' ', n[2], ' ', n[3], ' ', n[4], ' ', n[5]); end.
Выражение n[1] и подобные ему без последующего присваивания — это команда на то, чтобы узнать, какое значение хранится в ячейке массива под указанным в квадратных скобках индексом. Если же такое выражение (имя массива с числом в квадратных скобках) используется как переменная, которой присваивается значение, то значит в заданную в скобках ячейку записывается новое значение. Старое при этом теряется. Если мы посмотрим на результат выполнения программы, то увидим следующее:
0 0 0 0 0 33 0 178 0 0
Из такого вывода можем заключить, что в Pascal не инициированный (то есть еще нами не заполненный) массив содержит нули. Так обстоит дело не во всех языках программирования. В ряде других неинициированные ячейки содержат так называемый "мусор" — данные, которые были в памяти до этого.
Заполните массив из 4 элементов случайными числами.
Записывать данные в массив можно не только явным присваиванием. Процедуры и функции могут принимать в качестве фактических параметров массив или его элементы и выполнять заполнение в процессе своего выполнения. В коде ниже при выполнении процедуры read происходит присваивание элементам массива.
var a: array[1..4] of real; sum: real; begin read(a[1], a[2], a[3], a[4]); sum := a[1] + a[2] + a[3] + a[4]; writeln('Сумма: ', sum:4:2); end.
Пример выполнения:
4.5 1.8 6.1 2.2 Сумма: 14.60
Объявите массив из трех строк, заполните его с клавиатуры, выведите на экран значение второго элемента этого массива.
Однако такое использование элементов массива в качестве обычных переменных не дает никакой выгоды. Массивы ценны тем, что индексы могут быть переменными или выражениями, с помощью которых выполняется последовательный доступ ко всем элементам массива. Такое последовательное обращение обычно выполняется с помощью циклов.
var f: array[1..10] of real; i: integer; begin for i:=1 to 10 do begin f[i] := 0.5; write(f[i]:5:1); end; writeln; for i:=1 to 10 do begin f[i] := f[i] + random; write(f[i]:5:2); end; writeln; end.
В примере переменная i играет роль не только счетчика цикла, но и меняющихся индексов. В первом цикле всем элементам присваивается одно и то же значение. Во втором цикле к имеющемуся значению, находящемуся в ячейке под номером i, добавляется случайное число. После этого полученная сумма помещается в эту же ячейку массива, перезаписывая тем самым старое значение. Если выполнить программу, то на экран будет выведено примерно следующее:
0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1.05 1.09 1.22 1.34 1.10 1.36 1.04 1.35 0.92 1.12
Используя цикл, заполните массив пятью числами, которые вводятся с клавиатуры. Также в цикле подчитывайте их сумму. Выведите сумму на экран.
В программе выше массив состоит из десяти элементов. Обратим внимание, что мы используем это число три раза: при определении переменной и в заголовках циклов. Теперь представьте, что код программы куда длиннее, и мы решили поменять размерность массива. Нам придется просмотреть весь код и исправить обозначающее количество элементов число 10 на другое. Это не только утомительно, но и чревато ошибками.
Поэтому, когда в программе определяются массивы, часто также используются константы. С их помощью задают индекс последнего элемента массива, он же показывает размерность массива, если первый индекс равен единице. С константой наш код будет выглядеть так:
const N = 10; var f: array[1..N] of real; i: integer; begin for i:=1 to N do begin f[i] := 0.5; write(f[i]:5:1); end; writeln; for i:=1 to N do begin f[i] := f[i] + random; write(f[i]:5:2); end; writeln; end.
Если нам захочется поменять длину массива, надо будет исправить только значение константы N. Константы объявляются в специальном разделе const и здесь сразу же получают свое значение. Его, в отличие от переменных, нельзя менять в процессе выполнения программы, то есть выражение N := 20 в разделе действий вызовет ошибку уже на этапе компиляции.
Раз уж мы заговорили о длине массива, следует упомянуть функции length языка Pascal. Она возвращает количество элементов в массиве. Может возникнуть вопрос, зачем нужна функция length, если длина массива такая же как значение его последнего индекса? На самом деле это вовсе не обязательно. В Паскале первым индексом массива может быть любое целое число.
const F = -5; L = 0; var a: array[0..10] of Integer; b: array[1..10] of Integer; c: array[F..L] of Integer; i: Integer; begin writeln(length(a)); writeln(length(b)); writeln(length(c)); for i:=F to L do begin c[i] := random(100); write(i, '=', c[i], ' '); end; writeln; end.
11 10 6 -5=54 -4=59 -3=71 -2=84 -1=60 0=85
Более того, индексы элементов массива могут быть и символами, а также описываться другими порядковыми типами. То есть для индекса можно использовать тип, в котором определена дискретная последовательность значений, и все эти значения можно пересчитать по порядку. Индексировать можно не только константами и переменными, но и выражениями, результат вычисления которых дает значение перечислимого типа.
Итак, массив — это именованная группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы (хотя в языке программирования Pascal чаще всего именно с нее). Порядковый номер элемента массива называется индексом этого элемента.
Помним, все элементы определенного массива имеют один и тот же тип. У разных массивов типы данных могут различаться. Например, один массив может состоять из чисел типа integer, а другой — из чисел типа real.
Массивы, представляющие собой линейную структуру, являются одномерными. Это самая простая и в то же время базовая разновидность массивов. Однако есть и другие.
Задания для дополнительной или самостоятельной работы:
Создайте три массива одинаковой длины, один из них для целых чисел, два — для вещественных. Напишите такой код заполнения их значениями в одном цикле, чтобы для двух массивов значения генерировались функцией random, а для третьего определялись суммой значений в аналогичных ячейках двух первых массивов. Выведите значения массивов на экран.