Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Информатика_заочн / Лекция2.5информатика

.doc
Скачиваний:
46
Добавлен:
17.03.2015
Размер:
65.54 Кб
Скачать

Лекция 4.

Перечислимый и ограниченный типы данных. Структурированные типы данных.

4.1. Перечислимый и ограниченный типы данных.

К скалярным типам данных относятся также перечислимый и ограниченный типы.

Перечислимый тип задается непосредственно перечислением всех значений, который может принимать переменная данного типа. Отдельные значения указываются через запятую, а весь список заключается в круглые скобки.

Перечислимый тип в программе можно описать двумя способами:

  1. type <имя типа>=(значение_1, значение_2, …, значение_n);

var <идентификатор_1, …>:<имя типа>;

  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 (массив из).

Описание массивов осуществляется двумя способами:

  1. type <имя типа>=array[<тип индекса>] of <тип элементов массива>;

var <идентификатор_1, …>:<имя типа>;

  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. Ввод и вывод одномерного массива. Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и вывод значений производится поэлементно в цикле.

Как уже говорилось выше, двумерный массив представляет собой матрицу. Положение каждого элемента матрицы характеризуется двумя индексами – номером строки и номером столбца, на пересечении которых находится данный элемент. При описании матрицы в типе индекса сначала указываются границы изменения строк, потом – границы изменения столбцов.

Описание двумерного массива:

1) type <имя типа>=array[<1..n,1..m>] of <тип элементов массива>;

var <идентификатор_1, …>:<имя типа>;

2) var <идентификатор_1, …>:array[<1..n,1..m>] of <тип элементов>;

где 1..n – границы изменения строк, 1..m - границы изменения столбцов.

Алгоритмы ввода и вывода при работе с двумерными массивами:

  1. Ввод и вывод двумерного массива:

ввод элементов:

вывод элементов в естественном виде: