В математике наряду со множеством, часто рассматривают упорядоченные наборы чисел (например координаты точки в двумерном, трехмерном пространстве). Упорядоченные двойки, тройки и т.д. чисел в языке Паскаль удобно задавать с помощью массивов длины 2, 3 и т.д.
Массив – это упорядоченный набор однотипных элементов определенной длины. Каждый элемент массива имеет свой номер (индекс). К каждому элементу массива имеется прямой доступ. Это означает, что для того, чтобы обратиться к какому-либо элементу массива, нет нужды перебирать все его предыдущие элементы, нам достаточно указать номер этого элемента.
Первый способ.
В разделе описания переменных мы можем описать массив следующим образом:
Var A:Array[n1..n2] Of базовый тип;
Здесь А – название массива;
Array – служебное слово (англ. массив).
n1,n2- соответственно номер первого и последнего элемента массива.
Базовый тип – любой из уже изученных типов.
Количество элементов массива будет равно n2-n1+1.
Например, запись
Var Massiv:Array[1..20] Of Real;
означает, что полученный массив будет состоять из 20 вещественных чисел, первое из которых будет иметь номер 1, последнее – 20. Наш массив будет иметь название Massiv.
Второй способ.
Описание массива заключается в создании нового оригинального типа. Для того чтобы программист мог создавать свои новые типы данных в Паскале существует раздел описания типов Type. Этот раздел находится между разделом описания констант и разделом описания переменных.
Type
<Имя типа>=Array[n1..n2]Of Базовый тип;
После этого в разделе описания переменных мы можем описать массив, который имеет созданный нами тип, например,
Type
Mas=Array[10..19] Of Integer;
Var B:Mas;
В данном случае мы сначала описали новый тип Mas – массив из десяти целых чисел с номерами от 10 до 19, затем описали переменную B типа Mas. Переменная В – переменная типа Mas.
Чтобы обратиться к какому либо элементу массива, необходимо указать имя массива и в квадратных скобках номер элемента. В[5], A[i] и т.д. Номером элемента может быть любое целочисленное выражение.
Замечание: номерами элементов могут быть не только выражения типа Integer, но так же и типа Char, перечисления и диапазоны.
2. Обработка массивов
В большинстве случаев для обработки массивов используются циклы. В цикле имеется возможность поочередно перебрать все элементы массива.
Для ввода массива с клавиатуры может быть использован цикл следующего вида: пусть у нас имеется массив с именем А, состоящий из n элементов, тогда:
For i:=1 To n Do Read(A[i]);
В этом случае, пользователь вводит через пробел n элементов массива.
Ввод данных в массив происходит следующим образом: сначала значение счётчика цикла равно 1; выполняется операция read (A[1]); после чего счётчик цикла становится равным 2; выполняется операция Read(A[2])… и т.д. до значения i=n включительно.
Для вывода массива на экран используется следующий цикл:
For i:=1 To n Do Write(A[i]);
Writeln;
В данном случае на экран в одну строку будут выведены все n элементов массива, после чего курсор переместится на строку вниз.
Как уже было сказано для обработки массивов используются циклы.
Пример.
Пусть имеется массив М, состоящий из n элементов с номерами от 1 до n. Найти Сумму элементов массива, вывести ее на экран.
Sum:=0;
For i:=1 To n Do Sum:=Sum+M[i];
Writeln(‘Сумма элементов массива = ’ ,Sum);
3. Матрицы – двумерные массивы
В математике очень распространено такое понятие, как матрица. Матрица – это таблица из коэффициентов A=(aij). Элементы матрицы образуют столбцы и строки. Первый индекс ( i ) указывает номер строки, второй ( j ) – номер столбца, на пересечении которых находится элемент aij.
Определим некоторые действия над матрицами.
1. 1. Две матрицы равны, если равны все элементы, стоящие в одинаковых местах.
2. 2. Суммой двух матриц A=(aij) и B=(bij) называется матрица С=(сij), где сij= aij+bij;
3. 3. Произведением матрицы A=(aij) на число L называют матрицу, у которой каждый элемент равен произведению соответствующего элемента матрицы А на число L.
В программировании матрицы удобно представлять с помощью двумерных массивов. Двумерный массив отличается от одномерного массива тем, что каждый элемент в двумерном массиве имеет два индекса также, как и элементы матрицы.
Описание двумерных массивов отличается от описания одномерных массивов только тем, что в мы указываем начальное и конечное значение для обоих индексов.
Array[n1..n2,m1..m2] Of Базовый Тип;
n1, n2 – начальное и конечное значения первого индекса;
m1, m2 – начальное и конечное значения второго индекса.
Вообще, мы можем описать не только двумерные, но и трех-, четырех-, … -мерные массивы, для этого необходимо указать через запятую начальные и конечные значения для каждого индекса.
Для ввода и для вывода двумерных массивов используются два вложенных цикла:
Ввод массива:
For i:=1 To n Do
For j:=1 To m Do
Read(A[i,j]);
Вывод массива:
For i:=1 To n Do
Begin
For j:=1 To m Do
Write(A[i,j]:3);
Writeln;
End;
Для обработки двумерных массивов также используются два вложенных цикла.
Пример.
Найти произведение массива А на число L.
For i:=1 To n Do
For j:=1 To m Do
A[i,j]:=A[i,j]*L;
4. Строковые переменные и строковые константы
Данные строкового типа, также как данные символьного, числового, логического типов, подразделяются на переменные, константы и выражения.
Строковые константы – это последовательность символов, заключенных в апострофы, например, ‘Пример’, ‘АВС 1А’.
Строковые константы, также как и числовые, могут быть описаны в разделе описания констант.
Const Str= ‘СТРОКА’;
Переменные строкового типа описываются с помощью служебного слова String:
Var s1,s2:String[N];
где String – служебное слово;
S1,s2 – переменные строкового типа;
N – максимальная длина строки (от 0 до 255).
Строковым переменным можно присваивать значения строковых переменных и строковых констант. Кроме того, мы можем обратиться к отдельному символу в строке. Для этого, после имени переменной, в квадратных скобках необходимо указать его номер, как это делалось с символьными массивами. Отдельный элемент строки – символьная константа, мы можем присвоить ему значение символьной константы, либо символьной переменной.
При считывании значений строковых переменных с клавиатуры во избежание ошибок следует использовать оператор ввода Readln.
При работе со строками часто приходится составлять строку из двух и более строк, прибавлять к строке какие-либо символы и т.д. Для этого в Паскале предусмотрена такая операция, как конкатенация строк (сцепление). Для обозначения конкатенации в Паскале используется знак «+».
Str1:=Str1 + ‘1’+ Str2 + ‘asd’;
Строки можно сравнивать. Сравнение строк происходит слева направо для первого несовпадающего символа
‘Иванов’< ‘Иванова’
‘Кот’ > ‘Код’
5. Встроенные функции для обработки строк
Для обработки строковых данных используется ряд стандартных процедур и функций. Рассмотрим их. При этом Str, Str1,Str2 – переменные типа String, i,j – выражения типа integer;
Length(Str) – функция, вычисляющая длину переменной Str. Результат функции имеет целочисленный тип.
Copy(Str,i,j) – Функция, которая выделяет из строки Str подстроку длиной j, начиная с позиции i.
Delete(Str,i,j) – Процедура, которая удаляет из строки Str подстроку длиной j, начиная с позиции i.
Insert(Str1,Str2,i) – Процедура, которая вставляет в строку Str1 строку Str2, начиная с позиции i.