Структурированный тип данных массив
Структурированные данные представляют собой элементы, которые в свою очередь являются данными простых или структурированных типов. В языке Pascal различают следующие структурированные типы данных: массивы, строки, записи, множества, файлы.
Массивв Pascal представляет собой конечный набор однотипных объектов (чисел, символов, строк и т. п.), имеющих общее имя и хранящихся в последовательно размещенных ячейках памяти. Использование массивов позволяет хранить элементы векторов и матриц в памяти компьютера с теми же обозначениями, что и в математических записях; организовать циклические вычисления с различными исходными данными; уменьшить объем программ, сделать их более наглядными и надежными.
Размер массива − это количество элементов, содержащихся в нем. Каждый элемент массива занимает определенное местоположение, определяемое порядковым номером, который называется индексом. Количество индексов, необходимое для точного определения положения элемента, называется размерностью массива. В языке Pascal различают одно-, двух- и многомерные массивы. Наиболее широко используются одномерные массивы, соответствующие математическому представлению векторов, и двумерные, соответствующие прямоугольным таблицам − матрицам.
Описание массивов
При описании массива указывают его имя, размерность и диапазон изменения каждого индекса, а также тип входящих в массив элементов.
Формат описания массива:
<имя массива> :array[диапазон индексов]of<тип элементов>
Можно декларировать массив-константу, тип данных массив или переменную-массив, например:
Const mas_const = (2.3, 4, 6.4, −2, −3.7);
{массив из пяти вещественных элементов-констант}
Var
D :array[1..10]ofinteger; {одномерный массив-переменная из десяти целочисленных элементов}
B : array[0..50,0..20] ofchar;{двумерный массив-переменная, размером 51 ´ 21, из символьных элементов}
C :array[-3..4]ofBoolean; {одномерный массив-переменная из восьми элементов логического типа}
Type norm_mas = array[1..10,1..10]ofinteger;
{описание типа данных пользователя – массив 10 ´ 10 из целых чисел}
VarD1, D2 : norm_mas; {двумерные переменные-массивы типа norm_mas}
Над массивами целиком определена операция присваивания, например, оператор вида
D1:=D2
означает, что всем элементам массива D1 присвоены значения элементов массива D2.
Могут быть также использованы логические выражения вида
D1=D2
и
D1<>D2.
Все остальные операции с массивами осуществляются поэлементно.
Формат обращения в программе к конкретному элементу массива:
<имя массива> [<номер элемента>]
Например,
D[1] − обращение к первому элементу одномерного массива D,
D[i] − обращение к i-му элементу одномерного массива D;
D[2*i+1] − обращение к элементу одномерного массива D, номер которого является значением выражения 2*i+1.
W[i, j] − обращение к элементу, расположенному на пересечении i-й строки и j-го столбца в двумерном массиве W,
W[1, 5] − обращение к элементу, являющемуся пятым в первой строке двумерного массива W,
W[3, j] − обращение к элементу третьей строки и j-го столбца.
Ввод элементов массива
Для работы с массивами широко используют циклы и вложенные циклы.
Ввод элементов одномерного массива D размером n можно кодировать следующим образом:
fori:=1tondoread(D[i]);
Выполняется указанный фрагмент кода в случае ввода значений-чисел следующим образом:
1) параметру цикла (целочисленной переменной i) присваивается начальное значение (единица);
2) выполнение программы приостанавливается в ожидании ввода пользователем значений элементов массива;
3) после ввода пользователем строки из n чисел, разделенных пробелом, и нажатия клавиши Enterвыполнение программы возобновляется, и введенные числа заносятся в качестве значений в массив D.
Вариантом кода, реализующего ввод значений элементов массива, является конструкция
fori:=1tondoreadln(D[i]);
Она выполняется так:
1) параметру цикла (целочисленной переменной i) присваивается начальное значение (единица);
2) выполнение программы приостанавливается в ожидании ввода пользователем первого элемента массива (обращение к процедуре ввода readln(D[i]));
3) после ввода пользователем значения первого элемента массива, который может быть целым или вещественным числом, символом или строкой (в зависимости от того, как описан массив D в разделе описаний программы), необходимо нажать клавишу Enter, что возобновит выполнение программы – введенное пользователем значение станет значением первого элемента массива D;
4) параметру цикла iприсваивается следующее значение (два). Далее повторяются шаги 2−4 алгоритма.
Когда значение параметра цикла достигнет конечного (станет равным n), и пользователь введет значение последнего элемента массива и нажмет Enter, цикл for..to..do завершит свою работу и управление перейдет следующему оператору.
Ввод элементов массива − многошаговая процедура. Поэтому следует позаботиться о том, чтобы в процессе выполнения программы были введены корректные данные. Один из способов повышения надежности ввода − вывод на экран подсказки в виде строки текста, дающего представление о количестве и типе элементов массива, например:
n:=7; {количество элементов массива}
writeln('Введите ',n,' целочисленных элементов
массива D ');
fori:=1ton do
Begin
write('D[',i,']=');
readln(D[i])
end;
Первый раз приостановка выполнения программы произойдет тогда, когда на экране монитора отобразится подсказка
D[1]=
Далее необходимо набрать значение первого элемента массива и нажать клавишу Enter. Подобная подсказка будет появляться каждый раз перед тем, как программа требует ввода очередных данных.
В языке Pascal, реализованном в Free Pascal, присвоение элементам массива заданных списком значений допустимо также и при описании массива. Например,
Var
D : array[1..10]ofinteger =
(3,5,8,12,7,4,6,34,3,43);
Для двумерного массива W, состоящего из n × m элементов, простейший фрагмент кода, реализующего ввод элементов массива, имеет вид:
fori:=1tondo
forj:=1tomdoread(W[i,j]);
При выполнении этого кода сначала требуется ввести с клавиатуры значения элементов первой строки, затем второй и т. д. Завершается ввод нажатием клавиши Enter.
Вывод элементов массива
Вывод одномерного массива тоже производится поэлементно с помощью, например, цикла for..to..do:
fori:=1tondowrite(D[i],’ ’);
или
fori:=1tondowriteln('D[',i,']=',D[i]);
Посредством первого оператора цикла значения элементов массива D, разделенные пробелами, выводятся в строку.
Например,
3 5 8 12 7 4 6 34 3 43
Второй оператор цикла выводит значения элементов массива D в виде 10 строк:
D[1]=3
D[2]=5
D[3]=8
D[4]=12
D[5]=7
D[6]=4
D[7]=6
D[8]=34
D[9]=3
D[10]=43
Вывести двумерный массив можно в строку и в столбец. Но наиболее информативным является представление в форме прямоугольной таблицы. Код, реализующий такой способ вывода, имеет вид:
fori:=1ton do
Begin
forj:=1tomdowrite(W[i,j]);
{вывод элементов i-й строки через пробел}
writeln {переход на новую строку}
end;