Массивы Массивы - наиболее часто используемые типы данных. Каждое значение массива - это некоторое фиксированное количество значений одного и того же базового типа. Другими словами, такой тип данных позволяет объединять несколько значений одного типа в группу, причем имя дается всей группе в целом, а не каждому значению, сами же значения просто нумеруются. Доступ к элементам группы осуществляется по их номерам (индексам). Массивы характеризуются типом элементов, их количеством и «способом нумерации». Определение массива в программе имеет вид: Туре <имя нового типа > = Array [тип индекса] Of <тип элементов>; Здесь Array (массив), Of (из) - зарезервированные (служебные) слова. Тип индекса - любой дискретный тип, кроме longint. Поскольку индексов у элементов массива может быть несколько (например, в математике элементы матриц имеют два индекса), то в описании можно указать не один тип индекса, а несколько, разделенных символом «,». Примеры описания массивов type letters = array [1..40] of char; matrix1 = array [1..10] of array [1..5] of integer; matrix2 = array [1..10,1..5] of real; var alf : letters; а, С : matrix1; b : matrix2; В данном случае переменная alf описана как переменная типа letters, тогда значениями переменной alf будут массивы длины 40, элементы которых имеют тип char. А, С - переменные типа matrix1, В переменная типа matrix2. Возможно непосредственное описание массивов в разделе описания переменных: Var alf: array [ 1 . . 4 0 ] of char; mat: array [1..10] of array [1..5] of integer; a,b: array [1..10] of real; Тогда обращение к элементам массивов будет выглядеть следующим образом: alf [1]:= ‘a’; mat[1,1]:=5; а[1]: = 14 . 9 ; b[1]:=45; Элементы массива считаются переменными и могут участвовать в любых операциях, допустимых с элементами данного типа. Над всем массивом в целом возможна операция присваивания, когда типы выражений в обеих частях совпадают: b:=а; Матрицы Методы решения задач обработки одномерных массивов могут применяться и для обработки двумерных массивов. Поскольку положение элемента в двумерном массиве описывается двумя индексами (первый - номер строки, второй - номер столбца), программы для решения большинства матричных задач строятся на основе вложенных циклов. Обычно внешний цикл организуется по строкам матрицы, то есть в нем выбирается требуемая строка матрицы, а внутренний цикл - по столбцам матрицы, в нем выбирается элемент строки. Для присваивания значений элементам массива могут быть использованы операторы присваивания и операторы ввода. Имеется несколько способов объявления двумерных массивов. Например, имеется матрица А размерностью 2x3 (состоящая из двух строк по три элемента в каждой): Способ 1. В Паскале двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведенной выше: Const n=2, m=3; Type omyarray=Array[1..m] Of real; dmyarray=Array[1..n] Of omyarray; Var v: omyarray; a: dmyarray; В данном случае переменная v объявлена как одномерный массив из трех элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, в каждой по три элемента. Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении dmyarray: Const n=2, m=3; Type dmyarray=array[1..n] Of Array[1..m] of <тип элементов>; Var a: dmyarray; Способ З. Еще более краткое описание массива А можно получить, указывая диапазоны изменения индексов для каждой размерности массива: Const n=2, m=3; T yp e dm ya r r a y= A r r a y[ 1 .. n,1 .. m ] of <тип элементов>; Var a: dmyarray; Если нет необходимости описывать тип, то можно просто объявить массив в разделе описания переменных: Var a: Array[1..n,1..m] of <тип элементов>; Пример 1 Составление программы нахождения суммы элементов одномерного массива, при этом вывести элементы массива. Program PRG1; Const n=30; {количество элементов массива) Type m ya rra y=Arra y[ 1..n] of Inte ger; Var a: myarray; i, s: Integer; {i - переменная для работы с элементами массива, значение переменной s будет равно сумме всех элементов массива) Begin Writeln('Введите ', n, 'чисел'); for i : = l To n do {ввод массива с клавиатуры) Readln(a[i]) ; {чтение 1-го элемента} for i : = 1 To n do {вывод массива} Write (a[i]: 3 ) ; {вывод i-го элемента} Write ln; s : = 0; {начальное значение суммы) for i : = l To n do s:=s + a[i] ; {к сумме добавляется i-й элемент} Writeln('сумма элементов массива=' , s) ; End. При решении задач часто приходится заполнять массивы (присваивать значения элементам). Рассмотрим несколько способов заполнения массива для нахождения суммы элементов массива. Первый способ заполнения массива - это заполнение с клавиатуры (этот способ был рассмотрен выше - в примере программы PRG1). Второй способ - это заполнение с помощью генератора случайных чисел. Этот способ более удобен, когда в массиве много элементов, а их точные значения не слишком важны. Пример 2 Составление программы заполнения одномерного массива с помощью генератора случайных чисел. Program PRG2; Const n=30; {n - количество элементов массива} Type myarray=array[1..n] of Integer; Var a: myarray; i: integer; Begin for i : = l To n do a[i]:=-25+random(51); {... Продолжение программы} End. Функция Random выбирает случайное число x из отрезка от 0 до 51-1. Очередному элементу массива будет присвоена сумма числа -25 и выбранного случайного числа x; таким образом, массив будет заполняться случайными числами от -25 до -25 + (51 -1), то есть до 25. Третий способ заполнения массива - чтение значений элемента из файла. Можно заранее создать типизированный файл одномерных массивов (например, по тридцать элементов), а затем считывать из него сразу целый массив. Этот способ будет рассмотрен позже в главе «Файловые типы» (Запись данных в файл). Четвертый способ - использование раздела описания констант. Пример 3 Program PRG3; Const a: array[1..10] Of Integer; (1, 3, 8, -4, 0, 12, 9, 2, 8, -7); Var i: integer; Begin Writeln ('исходный массив:'); {Вывод исходного массива} for i : = l To 10 do write(a[i] :3); writeln; {... Продолжение программы} End. Пример 4 Осуществление ввода двумерного массива А размерностью 10x15, нахождение произведения матрицы А на число k, вывести сформированный массив. Program PRG4; Const n=10, m=15; Type myarray=array[1..n,1..m] of integer; Var a:myarray; k,i,j:integer; Begin k:=6; for i:=1 to n do for j:=1 to m do a[i,j]:=-25+random(51); for i : = l to n do for j:=1 to m do a[i,j]:=a[i,j]*k;{ произв-е элемента матрицы на k} for i : = l to n do begin {вывод i-строки массива} for j:=1 to m do write(a[ i , j]: 5 ) ; writeln; {переход на начало следующей строки} end; End. Информация взята из Учебного пособия «Основы алгоритмизации и программирования на языке Pascal. Справочник» Авторы – Н.Е. Тимошевская, Е.А. Перышкина. Школьный университет. ТУСУР. 2005 год.