Массивы. До сих пор рассматривались переменные, имеющие только одно значение, которые могли содержать в себе только одну величину определенного типа
До сих пор рассматривались переменные, имеющие только одно значение, которые могли содержать в себе только одну величину определенного типа. Исключением являлись лишь строковые переменные, представляющие собой совокупность данных символьного типа, но и при этом о строке говорилось, как об отдельной величине. По своей сути компьютер предназначен для облегчения работы человека с большими информационными объемами. Как, используя только переменные известных Вам типов, сохранить в памяти и обработать данные, содержащие десятки тысяч чисел или строк? Можно создать столько переменных, сколько содержится данных, даже занести в них значения, но текст такой программы будет гигантской величины, а сколько времени потребуется для его составления? Естественно, об этом задумывались и авторы языков программирования. Поэтому во всех существующих языках имеются типы переменных, отвечающие за хранение больших массивов данных. В Pascal они так и называются: «массивы». Массив - упорядоченная последовательность данных одного типа, объединенных под одним именем. Под это определение подходит множество объектов из реального мира: словарь (последовательность слов), мультфильм (последовательность картинок) и т.д. Проще всего представить себе массив в виде таблицы, где каждая величина находится в собственной ячейке. Положение ячейки в таблице должно однозначно определяться набором координат (индексов). Самой простой является линейная таблица, в которой для точного указания на элемент данных достаточно знания только одного числа (индекса). Именно на базе линейных массивов строятся более сложные структуры. Описание типа линейного массива таково: Type < Имя типа> =Array [< Диапазон индексов> ] Of < Тип элементов>; В качестве индексов выступают переменные любых порядковых типов. При указании диапазона начальный индекс не должен превышать конечный. Тип элементов массива может быть любым. Описать переменную-массив можно без предварительного описания типа в разделе описания переменных: Например: S, BB: Array [1..40] Of Real; Теперь переменные S, BB и T представляют собой массивы из сорока вещественных чисел; массив N имеет индексы символьного типа и целочисленные элементы; массив R может хранить в себе 41 число типа Word. Присваивание - единственное действие, которое возможно произвести с массивом целиком. Для данного примера описания впоследствии допустима следующая запись: S: =BB; Однако присваивать можно только массивы одинаковых типов. Даже массиву T присвоить массив S нельзя, хотя, казалось бы, их описания совпадают, произведены они в различных записях раздела описания. Никаких других операций с массивами целиком произвести невозможно, но с элементами массивов можно работать точно так же, как с простыми переменными соответствующего типа. Обращение к отдельному элементу массива производится при помощи указания имени всего массива и в квадратных скобках - индекса конкретного элемента. Например: R[10] - элемент массива R с индексом 10. Фундаментальное отличие компонента массива от простой переменной состоит в том, что для элемента массива в квадратных скобках может стоять не только непосредственное значение индекса, но и выражение, приводящее к значению индексного типа, т.е. реализуется косвенная адресация: Организация работы с такой структурой данных, как массив, позволяет использовать цикл для заполнения, обработки и распечатки его содержимого. Форма организации данных уже встречалась в строковых переменных, т.к. переменные String очень близки по своим свойствам массивам Char. Отличия в следующем: строковые переменные можно было вводить с клавиатуры и распечатывать на экране (с обычным массивом это не проходит); длина строковой переменной была ограничена 255 символами (255B), а для размера массива критическим объемом информации является 64 kB. Рассмотрим несколько примеров заполнения массивов и вывода их содержимого на экран. В них использованы числовые типы компонент. Пример 9: Иллюстрация возможности непосредственного обращения к каждому элементу массива отдельно. Program M1; A: Array [1..20] Of Integer; A[1]: =7; {Заполняем массив значениями (отдельно каждый компонент)} End. Пример 10: Ввод с клавиатуры 20 целых чисел и их печать в обратном порядке. Program M2; A: Array [1..20] Of Integer; Begin For I: =1 To 20 Do {Организуем цикл с параметром I по всем возможным значениям индексов} End. Подобная программа, но без использования структуры массива в несколько раз длиннее. Именно поэтому введение в Pascal цикла с параметром было обусловлено необходимостью обработки информационных последовательностей (массивов). Пример 11: Заполнение массива значениями квадратов индексов элементов: Program M3; A: Array [1..N] Of Integer; Begin For I: =1 To N Do End. Для учебных целей часто необходимо использовать массивы, заданные с помощью генератора случайных чисел. В Pascal случайные числа формирует функция Random.Числа получаются дробными, равномерно расположенными в интервале от 0 до 1. Выражение, дающее целое случайное число в интервале [-50, 50], выглядит так: Trunc(Random*101)-50. Пример 12: Задать и напечатать случайный массив из сорока целых чисел: Program M4; A: Array [1..N] Of Integer; Begin For I: =1 To N Do A[I]: = Trunc(Random*101)-50 End End.
|