
- •8. Интервальный тип данных. Структурированные типы данных. МаСсивы
- •8.1. Интервальный (индексный) тип данных
- •8.2. Структурированные типы данных. Массивы. Их свойства, описание, ввод и вывод
- •8.3. Инициализация массивов
- •8.4. Работа с одномерными (линейными) массивами
- •8.5. Работа с двухмерными массивами (матрицами)
- •8.6. Динамические массивы
- •8.6.1. Двумерные динамические массивы
- •8.7. Передача массивов в качестве параметров в подпрограммы. Открытые массивы
- •Параметры-массивы и параметры-строки
8. Интервальный тип данных. Структурированные типы данных. МаСсивы
Рассмотрим вначале интервальный тип данных, который относится к простым порядковым типам.
8.1. Интервальный (индексный) тип данных
Интервальный или индексный тип данных может быть задан как отрезок изменения значений любого порядкового типа. При записи в программе отрезок задают двумя константами - экстремальными значениями переменной (минимальным и максимальным), которые разделены между собой в записи двумя точками. Первое (минимальное) и второе (максимальное) значения констант называют нижней и верхней границами отрезка, задающего интервальный тип. Нижняя граница всегда должна быть меньше верхней.
В качестве констант, задающих границы, могут быть использованы величины целого, символьного, логического или перечисляемого типов. Обе границы должны быть одного типа. Скалярный тип, на котором строится отрезок, называют базовым.
Примеры отрезков:
10..21
-99..99
'A'..'Z'
Над переменными, относящимися к интервальному типу, могут выполняться все операции и применяться все стандартные функции, которые допустимы для соответствующего базового типа.
При использовании интервальных типов данных в программах осуществляется проверка того, чтобы значения их переменных не выходили за границы, введенные для них в описании данного интервального типа.
Вопросы для проверки знаний.
1. В чем заключается назначение и какова форма записи величины интервального типа ?
2. Возможно ли задание следующих величин интервального типа (ответ пояснить) ?
а) -10..10; б) 100..-1; в) А..10; г) В..Y; д) 1..D; е)W..C.
8.2. Структурированные типы данных. Массивы. Их свойства, описание, ввод и вывод
Задача структурированных типов данных заключается в том, чтобы присвоить одно имя не одному, а целому набору образующих этот тип элементов. Внутри одного типа элементы (компоненты типа) имеют одинаковое имя и различаются только порядковыми номерами. Структурированными могут быть и множества переменных, и множества постоянных величин (констант). Каждая из этих компонент структурированного типа, в свою очередь, может иметь структурированный тип. Данное свойство называют вложенностью типов.
В Паскале возможно применение пяти структурированных типов:
1) массивы;
2) строки;
3) множества;
4) записи;
5) файлы.
Наиболее важными для решения расчетных задач являются массивы. Массивами называют ограниченные и упорядоченные совокупности однотипных величин, называемых элементами или компонентами массива.
Массивы обладают следующими общими свойствами:
1) всем элементам массива присваивается общее имя, которое называют именем массива;
2) каждый элемент массива может быть явно обозначен при помощи индексов и к нему имеется прямой доступ;
3) число индексов, используемых для задания адресов его элементов, называют размерностью массива (1 индекс- одномерный массив, 2 –двумерный массив и т.д.),
4) число элементов массива (задаваемое размерностью по каждому измерению - индексу) определяется при его описании и в дальнейшем не меняется;
5) тип элементов называется базовым типом, в языке Паскаль он может быть любым, кроме файлового.
Описание массива можно задать при помощи предварительного описания типа, можно без него.
Синтаксис описания типа массива (квадратные скобки – обязательный элемент записи описания):
имя типа = array[список индексов] of тип
где имя типа - правильный идентификатор языка Паскаль;
список индексов - список одного или нескольких индексных (интервальных) типов, разделенных запятыми;
тип - любой тип данных.
В качестве индексных типов в Паскале можно использовать любые порядковые типы, кроме longint и типов-диапазонов с базовым типом longint.
Пример 1. Описание типа с именем mas, в котором должно быть 10 целых переменных типа integer:
type
mas = array[1..10] of integer;
Определить переменные (одну или несколько) как массив можно и непосредственно при ее описании, без предварительного описания типа массива.
Синтаксис непосредственного описания переменных как массивов имеет вид:
список переменных:array[список индексов] of тип;
Список переменных может состоять только из одной переменной.
Примеры 2 непосредственного описания переменных как массивов:
var
a,b,c:array[1..10] of real;{одномерные вещественные массивы a,b,c длины 10}
int_1: array[1..20] of integer;{одномерные целочисленный массив int_1 длины 20}
int_2: array[1..20] of integer;
Matr:array[1..n,1..n] of real;{двумерный вещественный массив Matr, по каждому измерению размерность равна n }
Если переменные-массивы описаны одним списком (a,b,c в примере 2), то они считаются принадлежащими к одному типу. Если же переменные-массивы описаны в разных строках, то даже при внешнем совпадении они считаются принадлежащими к разным типам – например, переменные-массивы int_1 и int_2 в примере 2.
Для обеспечения совместимости массивов (принадлежности их к одному типу) при раздельном описании необходимо применять предварительное описание данного типа массивов.
Если типы массивов идентичны, то в программе один массив может быть присвоен другому. В этом случае значения всех переменных одного массива будет присвоены соответствующим элементам второго массива.
Так как тип, идущий за ключевым словом of в описании массива, - любой тип Паскаля, то он может быть и другим массивом. Например, описание типа вида:
type
massiv = array[1..10] of array[1..20] of real;
можно заменить более компактным описанием массива размерности 2:
type
massiv = array[1..10, 1..2] of real;
Для обозначения отдельных элементов (компонент) массива используется конструкция, называемая переменной с индексом (или с индексами, если размерность массива больше 1). В ней указывается имя массива, после которого в квадратных скобках стоит индекс – некоторое фиксированное значение из индексного типа, задающего размерность массива либо выражение, принимающее значения из этого же типа. При подстановке необходимо следить, чтобы индекс не выходил за пределы границ, предусмотренных описанием массива. При выполнении программы это приводит к неисправимой ошибке и ее автоматическому останову.
Примеры 3 допустимого обозначения элементов массивов, описания которых даны в примере 2:
a[2] b[10] int_1[5] int_2[20] Matr[2,3]
Примеры 4 недопустимого обозначения элементов массивов, описания которых даны в примере 2:
a[12] {описание задает элементы массива a с номерами от 1 до 10, номера 12 не существует}
b[-1] {то же самое для массива b}
Вводить и выводить массивы можно только поэлементно. Для этого в список ввода или вывода помещается переменная массива с индексом, а сами операторы ввода или вывода выполняются в цикле, который проходит по всем элементам массива.
При вводе и выводе элементов массива желательно использовать вывод поясняющих сообщений на экран, по которым пользователь представляет себе, величину какого элемента он вводит при каждом действии.
Пример 5. Ввод и вывод одномерного массива, описанного с предварительным описанием типа. При вводе и выводе на экран выдаются поясняющие сообщения:
const n = 4;
type mas = array[1..n] of integer;
var a: mas; i: integer;
begin
writeln('Vvedite elementi massiva');
for i:=1 to n do begin write(' a[',i,']=');readln(a[i]); end;
writeln('Vivod elementov massiva:');
for i:=1 to n do writeln(' a[',i,']=',a[i]:5);
end.
В зависимости от числа индексов в массивах, их делят на одномерные (один индекс) и многомерные (два и более индекса).
Вопросы для проверки знаний.
1. В чем заключается назначение структурированных типов ?
2. Какое свойство называют вложенностью типов ?
3. Назовите структурированные типы языка Паскаль.
4. Что называют массивом и его элементами (компонентами) ?
5. Какими общими свойствами обладают массивы ?
6. Что такое индекс и размерность массива, какие массивы называют одномерными и многомерными ?
7. Каков синтаксис описания типа массива ?
8. Каков синтаксис непосредственного описания переменных-массивов ?
9. Назовите два возможных способа описания переменных-массивов, принадлежащих к одному типу.
10. Как обозначают элементы массива ?
11. Как вводят и выводят массивы ?