
МИНИСТЕРСТВО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ, ПОДГОТОВКИ И РАССТАНОВКИ КАДРОВ РЕСПУБЛИКИ САХА (ЯКУТИЯ)
ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ РЕСПУБЛИКИ САХА (ЯКУТИЯ)
«РЕГИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ КОЛЛЕДЖ В Г.МИРНОМ»
Язык программирования Pascal
Массивы

Массив
- Массив – последовательность, состоящая из фиксированного числа однотипных элементов.
- Все элементы массива имеют общее имя (имя массива) и различаются индексами. Индексы можно вычислять, их тип должен быть ординальным.
- При описании массивов используются служебные слова array и of.
- В описании массива указывается тип его элементов и типы их индексов.

Массив
- Type = array [] of
- Тип элементов – произвольный, он может быть составным. Число типов индексов называется размерностью массива после описания типа массива конкретные массивы можно задать в разделе описания переменных.
![Массив Type vector = array [1..10] of real; Table = array[‘A’..’Z’,’1..5’] of integer; Var a,b:vector; C:table;](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_3.jpg)
Массив
Type vector = array [1..10] of real;
Table = array[‘A’..’Z’,’1..5’] of integer;
Var a,b:vector;
C:table;
![Массив A[7]:=3.1; B[k*k+1]:=0; C[‘m’,3]:=-14;](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_4.jpg)
Массив
A[7]:=3.1;
B[k*k+1]:=0;
C[‘m’,3]:=-14;
![Массив Описание массива можно совместить с описанием соответствующих переменных. Var a,b:array [1..10] of real; D:array [byte] of char;](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_5.jpg)
Массив
Описание массива можно совместить с описанием соответствующих переменных.
Var a,b:array [1..10] of real;
D:array [byte] of char;

Массив
Const : =()

Массив
Каждый одномерный массив определяется именем и числом переменных (одномерный массив):
массив (1:3), состоящий из 3 элементов – А(1)=1, А(2)=8, А(3)=6
![Массив var ch: array [1..11] of char ; h: char ; i: integer ; begin for i := 1 to 11 do read (ch[i]); for i := 1 to 11 do write (ch[i]:3); readln end .](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_8.jpg)
Массив
var ch: array [1..11] of char ;
h: char ;
i: integer ;
begin
for i := 1 to 11 do read (ch[i]);
for i := 1 to 11 do write (ch[i]:3);
readln
end .

Массив
- Одномерный массив можно представить как линейную структуру, в которой элементы следуют друг за другом.
- Однако бывают более сложные структуры данных. Например, двумерные массивы, которые можно описать как таблицу, в ячейках которой располагаются значения.
- Для обращения к данным массива указывается номера их строк и столбцов. Часто табличные массивы называют матрицами.
![Массив array [1..m, 1..n] of базовый_тип](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_10.jpg)
Массив
array [1..m, 1..n] of базовый_тип
- При этом описание может быть в разделе type и тогда создается новый тип, который можно использовать при объявлении переменных. Или массив может быть описан непосредственно в разделе переменных. m и n – это константы, их можно опустить и вставить конкретные значения, но лучше так не делать.
- Обычно подразумевают, что в интервале от 1 до m определяется количество строк, а в интервале от 1 до n – количество столбцов массива.
![Массив 1 вариант – описание массива через раздел type: const M = 10; N = 5; type matrix = array [1..M, 1..N] of integer ; var a: matrix; 2 вариант – описание массива в разделе переменных: const M = 10; N = 5; var a: array [1..M, 1..N] of integer ;](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_11.jpg)
Массив
1 вариант – описание массива через раздел type:
const
M = 10;
N = 5;
type
matrix = array [1..M, 1..N] of integer ;
var
a: matrix;
2 вариант – описание массива в разделе переменных:
const
M = 10;
N = 5;
var
a: array [1..M, 1..N] of integer ;
![Массив var matrix: array [1..3,1..5] of integer ; i, j: integer ; begin writeln ('Введите 15 чисел: '); for i := 1 to 3 do for j := 1 to 5 do read (matrix[i,j]); for i := 1 to 3 do begin for j := 1 to 5 do write (matrix[i,j], ' '); writeln end ; readln end .](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_12.jpg)
Массив
var
matrix: array [1..3,1..5] of integer ;
i, j: integer ;
begin
writeln ('Введите 15 чисел: ');
for i := 1 to 3 do
for j := 1 to 5 do
read (matrix[i,j]);
for i := 1 to 3 do begin
for j := 1 to 5 do
write (matrix[i,j], ' ');
writeln
end ;
readln
end .
![Массив const M = 3; N = 5; var matrix: array [1..M,1..N] of integer ; i, j: integer ; begin writeln ('Введите 15 чисел: '); for i := 1 to M do for j := 1 to N do read (matrix[i,j]); for i := 1 to M do begin for j := 1 to N do write (matrix[i,j]:5); writeln end ; readln end .](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_13.jpg)
Массив
const
M = 3;
N = 5;
var
matrix: array [1..M,1..N] of integer ;
i, j: integer ;
begin
writeln ('Введите 15 чисел: ');
for i := 1 to M do
for j := 1 to N do
read (matrix[i,j]);
for i := 1 to M do begin
for j := 1 to N do
write (matrix[i,j]:5);
writeln
end ;
readln
end .

Массив
При описании открытого массива (в разделе type или var ) указывается тип элементов, из которых он состоит (например, real , char и др.), но не указываются границы индексов.
Например:
mas1: array of real;
mas2: array of integer;

Массив
- Особенностью открытых массивов является то, что их индексы всегда начинаются с нуля (а не с единицы, которая чаще всего используется для обычных массивов).
- Чтобы в программе выделить память под открытый массив, следует воспользоваться процедурой setlength , которая принимает два фактических параметра – имя открытого массива и устанавливаемое количество элементов в нем.

Массив
- В результате работы setlength в памяти выделяется столько байт, сколько необходимо для хранения n-го количества элементов определенного типа. Так, если массив ранее описан как real и задано 5 элементов, то процедура setlength выделит под него 40 байт, т.к. для хранения каждого числа типа real требуется 8 байт памяти (хотя не обязательно 8, это может зависеть от компилятора).

Массив
- Функция high принимает в качестве параметра имя массива и возвращает индексный номер последнего элемента массива. Например, выделяется память под десять элементов открытого массива; значит, индекс последнего будет равен 9 (т.к. индексация начинается с 0), что и вернет функция high .
- Чтобы освободить, выделенную под массив память, используется оператор nil .

Массив
- Обычно открытые массивы используются для передачи в подпрограмму массивов переменных размеров. Это позволяет с помощью одной и той же подпрограммы обрабатывать массивы произвольной длины. Без использования открытых массивов пришлось бы для каждого массива иной длины писать собственную подпрограмму.
![Пример Функция sizeof возвращает количество памяти (в байтах), отведенное под переменную. var a: array [1..10] of real ; b: array of real ; i, n: integer ; sum: integer ; begin writeln('Переменная a занимает ', sizeof(a),' байт памяти.'); writeln('Переменная b занимает ', sizeof(b),' байт памяти.'); write(' : '); readln(n); setlength(b,n); writeln('Индекс последнего элемента массива ', high(b)); sum := 0; for i:=0 to high(b) do begin sum := sum + sizeof(b[i]) end ; writeln('Массив b занимает в памяти ', sum, ' байт(а);'); writeln('но переменная b по-прежнему ', sizeof(b),'.'); b := nil ; sum := 0; for i:=0 to high(b) do sum := sum + sizeof(b[i]); writeln('Сейчас массив b занимает в памяти ', sum, ' байт,'); writeln('т.к. память была освобождена с помощью nil.'); readln end .](http://fsd.mir-olymp.ru/html/2024/12/13/i_675bac65706a2/img_phpOPlbOh_19.jpg)
Пример
Функция sizeof возвращает количество памяти (в байтах), отведенное под переменную.
var
a: array [1..10] of real ;
b: array of real ;
i, n: integer ;
sum: integer ;
begin
writeln('Переменная a занимает ', sizeof(a),' байт памяти.');
writeln('Переменная b занимает ', sizeof(b),' байт памяти.');
write(' : ');
readln(n);
setlength(b,n);
writeln('Индекс последнего элемента массива ', high(b));
sum := 0;
for i:=0 to high(b) do begin
sum := sum + sizeof(b[i])
end ;
writeln('Массив b занимает в памяти ', sum, ' байт(а);');
writeln('но переменная b по-прежнему ', sizeof(b),'.');
b := nil ;
sum := 0;
for i:=0 to high(b) do
sum := sum + sizeof(b[i]);
writeln('Сейчас массив b занимает в памяти ', sum, ' байт,');
writeln('т.к. память была освобождена с помощью nil.');
readln
end .