В простых типах данных каждое данное имеет свое название (идентификатор). В этом разделе вводится структурная взаимосвязь между данными, хранимыми в оперативной памяти путем организации массива, состоящего из непрерывно расположенных данных, не снабженных отдельными именами. Эти данные в свою очередь могут быть простыми или сложными и называются элементами массива.
Основное преимущество массива состоит в том, что его элементы не имеют отдельных имен, и нет необходимости описывать каждый элемент по отдельности. Достаточно описать весь массив. Объявление массива содержит следующее описание:
TYPE <имя типа> = ARRAY [тип индекса] OF <тип элементов массива>;
Каждый элемент именуется путем указания имени массива и порядкового номера, определяющего его позицию в массиве, то есть индекса. Если тип данных определен с помощью конструкции ARRAY ... OF то он называется регулярным типом.
Паскаль предоставляет пользователю широкие возможности по заданию типа индекса, которым может быть любой порядковый или интервальный типы данных, в том числе и определенные пользователем. Тип элемента массива иногда называется базовым. Он может быть как любым скалярным, так и структурированным типом данных. Правомерно существование массивов-массивов, записей, множеств. Однако не существует массивов файлов. Число компонентов массива неявно определяется через тип индекса при его объявлении и в дальнейшем не меняется.
Одномерные массивы. Вектора.
Если в описании массива типом элемента является простой тип данных, то такой массив называется вектором. Поскольку в таком массиве для идентификации величины используется только один индекс, то он называется одномерным. Такие одномерные массивы представляют собой простейшие структурированные данные. Обращение к элементам одномерного массива осуществляется с помощью индексированных переменных, например X[i]. Здесь X – имя массива, a i — константа, переменная или выражение того же типа, что и тип индекса в объявлении массива.
Пример 28. Определить частоту появления латинских прописных букв в тексте, вводимом с клавиатуры. Ввод данных завершить символом '*'.
Здесь, в качестве индекса удобно использовать ограниченный литерный тип 'А' .. 'Z', что обеспечивает с одной стороны - мнемонический смысл индекса, соответствующего счетчику частоты появления литеры в тексте, а с другой стороны – легкость перебора значений индекса.
В Паскале нет средств ввода, вывода массива целиком, поэтому эти действия приходится выполнять как циклические процессы над отдельными элементами массива, используя (в частности, в нашем примере) оператор FOR. Если Вам понадобится программа для предприятия, Вы можете заказать разработку программ для управления и автоматизации предприятий торговли и сферы обслуживания. В этом примере при выводе результатов с помощью форматного вывода реализован перевод целочисленного выражения COUNTER[СН]*100/ N в вещественную форму числа с фиксированной десятичной точкой.
PROGRAM PR28;
VAR COUNTER: ARRAY ['A'.. 'Z'] OF INTEGER;
CH: CHAR;
N: INTEGER;
BEGIN
{ Инициализация массива счетчиков букв COUNTER, то есть — присвоение его элементам значения 0 }
FOR СН := 'А' ТО 'Z' DO COUNTER[CH] := 0; {Обнуление счетчиков литер}
N := 0; { Обнуление счетчика числа символов в тексте}
REPEAT { Повторять для каждой новой литеры}
READ(СН); { Ввод очередного символа с клавиатуры }
N := N + 1; { Увеличение счетчика символов на единицу }
IF (СН >= 'A') AND (СН <= 'Z')
THEN COUNTER[CH] := COUNTER[CH] + 1;
{Наращивается элемент массива с индексом, соответствующим коду вводимого символа}
UNTIL СН = '*'; { Если True, то прочитана * - признак конца текста}
WRITELN('Всегo прочитано символов:', N);
WRITELN('буквa:' :10, 'частота:' :10, 'процент:' :10);
FOR СН := 'А' ТО 'Z' { Вывод элементов массива на экран }
DO WRITELN(CH:8,COUNTER[CH]:10,COUNTER[CH]*100/N:10:2)
END.
Предыдущая статья: Программирование данных.
Оглавление: Лекции по Pascal.
Следующая статья: Инициализация одномерного массива.