
Лекции Информатика_заочн / Лекция2.5информатика
.docЛекция 4.
Перечислимый и ограниченный типы данных. Структурированные типы данных.
4.1. Перечислимый и ограниченный типы данных.
К скалярным типам данных относятся также перечислимый и ограниченный типы.
Перечислимый тип задается непосредственно перечислением всех значений, который может принимать переменная данного типа. Отдельные значения указываются через запятую, а весь список заключается в круглые скобки.
Перечислимый тип в программе можно описать двумя способами:
-
type <имя типа>=(значение_1, значение_2, …, значение_n);
var <идентификатор_1, …>:<имя типа>;
-
задание типа непосредственно в разделе описания соответствующих переменных в качестве компоненты:
var <идентификатор_1, …(значение_1, значение_2, …, значение_n);
Пример: type Oper=(plus, minus, multi, divide);
var A,B,C: Oper;
Ограниченный тип задается как интервал каждого заранее определенного перечислимого типа. Сам интервал задается указанием нижней и верхней границ интервала, разделенных двумя точками, причем нижняя граница интервала должна быть меньше верхней границы. Ограниченный тип описывается следующим образом: в разделе type указывается его имя и границы.
Пример: type A=1..20;
B=plus..minus;
или var A:1..20;
B:plus..minus;
Над ограниченными и перечислимыми типами данных применимы стандартные функции:
succ(x) – возвращает значение следующего за х,
pred(x) – возвращает значение предыдущего за х,
ord(x) – возвращает порядковый номер в перечислении.
NB! Значения перечислимого типа нельзя вводить и выводить соответствующими операторами в Паскале. Это можно осуществить только с помощью оператора присваивания.
4.2. Структурированные типы данных.
Рассмотрим следующие программы:
program Pr1; var k,x:integer; begin for k:=1 to 8 do begin x:=k*k; writeln(x); end; end. |
program Pr2; var k,x:integer; begin for k:=1 to 8 do x:=k*k; writeln(x); end. |
Два вопроса: сколько чисел напечатает каждая программа, и сколько чисел будет храниться в ячейке памяти в конце каждого цикла?
В программе Pr1 будет напечатано восемь чисел и сохранится только последнее число, а в программе Pr2 будет напечатано и сохранится только последнее число. Можно сохранить все восемь чисел, объявив не одну, а восемь переменных. А если чисел, например 25, или 100, или 1000 и более? Тогда воспользуемся специальным средством – массивом данных.
Массив данных – это структурированный тип данных (структурированные типы данных определяют упорядоченную совокупность скалярных переменных и характеризуются типом своих компонентов), состоящий из фиксированного числа элементов, имеющих один и тот же тип. Тип элементов массива называется базовым.
NB! Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.
Доступ к элементам массива осуществляется путем индексирования элементов массива. Тип индекса определяет границы изменения индекса. Если элементы массива имеют один индекс, то массив называется одномерным, а если n индексов то n-мерным. Будем изучать одномерные массивы, представляющие собой векторы, и двумерные массивы, так называемые матрицы.
Для описания массива предназначено словосочетание array of (массив из).
Описание массивов осуществляется двумя способами:
-
type <имя типа>=array[<тип индекса>] of <тип элементов массива>;
var <идентификатор_1, …>:<имя типа>;
-
var <идентификатор_1, …>:array[<тип индекса>] of <тип элементов>;
Пример:
type Vektor=array[1..7] of integer;
var A:Vektor;
или
var X:array[1..50] of real;
B:array[1..25,1..25] of integer;
Чтобы получить доступ к значению элемента массива нужно указать имя массива и индекс в квадратных скобках, например: X[2], X[i], A[1,5], A[i,j].
Если два массива, например X и Y, описаны одним типом, то к ним применима операция присвоения: X:=Y.
Алгоритмы ввода и вывода при работе с одномерными массивами:
-
Ввод и вывод одномерного массива. Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и вывод значений производится поэлементно в цикле.
Как уже говорилось выше, двумерный массив представляет собой матрицу. Положение каждого элемента матрицы характеризуется двумя индексами – номером строки и номером столбца, на пересечении которых находится данный элемент. При описании матрицы в типе индекса сначала указываются границы изменения строк, потом – границы изменения столбцов.
Описание двумерного массива:
1) type <имя типа>=array[<1..n,1..m>] of <тип элементов массива>;
var <идентификатор_1, …>:<имя типа>;
2) var <идентификатор_1, …>:array[<1..n,1..m>] of <тип элементов>;
где 1..n – границы изменения строк, 1..m - границы изменения столбцов.
Алгоритмы ввода и вывода при работе с двумерными массивами:
-
Ввод и вывод двумерного массива:
ввод элементов:
вывод элементов в естественном виде: