Главная
страница 1
Структурные типы данных.
Повсеместное использование компьютеров основано на их высокой скорости обработки информации и большой памяти. Мы уже научились использовать скорость работы ЭВМ: команды циклов позволяют составлять короткие алгоритмы, при выполнении которых ЭВМ быстро совершает последовательность действий. До сих пор, однако, во всех наших алгоритмах объём информации, хранимый в памяти ЭВМ в процессе выполнения алгоритма, был невелик (до 10 переменных). А как быть, если необходима работа с 1000 и более величин. Для работы с большим объёмом информации (однотипных данных) используются массивы.

С понятием «массив» приходится сталкиваться при решении экономических и научно-технических задач обработки совокупностей большого количества значений. В общем случае массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип.

Рассмотренные ранее простые типы определяют различные множества атомарных (неразделимых) значений. В отличие от них, структурные типы задают множества сложных значений, каждое из которых образует организованную совокупность нескольких значений другого типа. Типы данных, имеющие сложную внутреннюю структуру, в информатике называют структурными. В структурных типах выделяют регулярный тип (массивы).
Регулярные типы данных.

Название регулярный тип массивы получили за то, что в них объединены однотипные (логически однородные) элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.



Массив – это упорядоченный набор переменных одного типа, обозначенных одним именем.

Переменные, которые мы использовали до сих пор при составлении программ – простые переменные. Любая простая переменная характеризуется:



  1. Своим именем (обозначением);

  2. Типом (т.е. множеством значений и операций над ней);

  3. Значением.

Под любую переменную выделяется ячейка памяти, обращение к которой осуществляется по имени.

Использование только простых переменных затруднительно или делает невозможным решение многих важных задач.

Пусть в памяти ЭВМ каким-то образом получена (пусть введена) последовательность из 10 чисел. И пусть требуется найти максимальное из введённых чисел (а затем разделить каждый элемент последовательности на это максимальное число).

Способ, который нам уже знаком – использование переменных. Чтобы запомнить 10 различных чисел, надо 10 переменных. Пусть это будут переменные a, b, c, d, e, f, g, h, i, j. Чтобы найти максимальное из этих значений, надо:



  • вначале положить max = а и сравнивать max поочерёдно со всеми остальными переменными и заменять max на новое значение, если значение переменной больше максимального.


program ex1;

var a, b, c, d, e, f, g, h, i, j, max: real;

begin

read (a, b, c, d, e, f, g, h, i, j);

writeln (a, b, c, d, e, f, g, h, i, j);

max: = a;

if max < b then max: = b;

if max < с then max: = с;

if max < d then max: = d;

и так далее, пака не будут просмотрены все переменные.

a: = a/max;

b: = b/max;

c: = c/max; …

writeln (‘максимальное число = ‘, max);

writeln (‘a =’, a ‘b =’, b, …);

end.

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



a




b




j










………………………..




то в программе можно было бы написать один условный оператор в цикле. Такую возможность и представляет использование массивов.

Массивом называется упорядоченная совокупность величин одинакового типа, объединённых общим именем. Члены этой последовательности – это элементы массива. Упорядоченность заключается в том, что элементы массива располагаются в последовательных ячейках памяти. Каждый элемент массива определяется его положением в массиве, т.е. значением его индекса.

Массив можно представить как несколько одинаковых ящиков, скреплённых вместе. На всю конструкцию как целое повешен один ярлык с именем (А), все ящики пронумерованы (т.е. каждый имеет свой индекс), например А:


А




1

2

5

8

9

- элементы массива

1

2

3

4

5

- индексы

Чтобы получить доступ к нужному элементу массива, необходимо указать имя массива и индекс этого элемента. Элементы массива длины 20 могут иметь, например, индексы 1, 2, …, 20 или 0, 1, 2, …, 19 и т.д.

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



Способ индексации, тип элементов, длина массива – фиксируются в описании того типа, к которому принадлежит массив.

С
интаксическая диаграмма описания типа массив.

Массив описывается при помощи задания типа его компонентов (элементов) и типа индексов.

mas = array [T1] of T2;

При задании типа индексов (Т1) фактически указывается число компонентов массива, поэтому тип индексов может быть любым скалярным (кроме вещественного) или ограниченным типом.

Тип элементов массива Т2 может быть любым простым или сложным.
Пример 1. Описать целочисленный массив b, состоящий из 10 элементов.

Возможны два способа задания массивов. Можно сначала определить некоторый тип со структурой массива, например:



type mas = array [1 .. 10] of byte;

а затем описать переменную, как имеющую данный тип:



var b: mas;

Можно обойтись и без определения типа. Тогда в разделе описания переменных указывается вся необходимая информация о типах индексов и компонентов.



b: array [1 .. 10] of byte;
Пример 2. Имеется описание:

type t = array [1 … 20] of real;

Это описание типа, имя которого t. Объектами типа t будут упорядоченные наборы по 20 элементов, имеющих тип real

Пусть переменная а описана в программе как переменная типа t:

var a: t;

тогда при выполнении программы значениями переменной а будет массив длины 20, элементы которого имеют тип real. Чтобы получить доступ к нужному элементу массива, необходимо указать имя массива и индекс этого элемента в квадратных скобках. Для того, чтобы рассмотреть эти элементы по отдельности, для них применяются обозначения а[1], а[2], …, a[20] – это переменные типа real.

Переменные a[1], a[2], … - могут использоваться в программе в операторах наравне с другими переменными типа real.

Заключённый в квадратные скобки индекс – это не обязательно целое число. В качестве индекса может быть любое выражение, имеющее тот же тип, что и индекс. В нашем случае им может быть любое выражение со значением типа integer, например a[i], a[2*i], a[2*i-1] и т.д.


Необходимо различать понятия размер массива и размерность массива. Размер массива – количество элементов в нём. Размерность массива – число индексов, определяющих положение элемента в массиве.

Массив, состоящий из одной строки (столбца) называется одномерный массив (вектор). Массив, состоящий из нескольких строк, одинаковой длины, называется двумерный (матрица)

В одномерных массивах (вектор) положение каждого элемента задаётся (определяется) одним индексом. В двумерных массивах (матрица) – положение каждого элемента определяется двумя индексами (например, номером строки и номером столбца)
Примеры описания типов и переменных.

type mas1 = array [-5 .. 15] of real;

mas2 = array [1 .. 10,1 .. 10] of integer;

var a: mas1; b: mas2;

Переменная а – есть вектор (одномерный массив) с вещественными компонентами, перенумерованными от –5 до 15.

Переменная b – есть квадратная матрица целых чисел, состоящая из 10 строк и 10 столбцов.

Примеры описания массивов.

Пример 1.

type M = array [1 .. 15] of real;

var mas: M;

или


var mas: array [1 .. 15] of real;

(описан массив mas из 15 вещественных чисел);



Пример 2.

work: array [(mon, tue, wed)] of integer;

или


type W = array [(mon, tue, wed)] of integer;

var work: W;

(описан массив из трёх целых чисел, индексы элементов массива имеют перечислимый тип и принимают значения названий дней недели mon, tue, wed).



Пример 3.

type bool = array [‘a’ .. ‘z’] of boolean;

var b: bool;

или


b: array [‘а’ .. ‘z’] of boolean;

(описан массив элементов булевого типа b, тип индексов – ограниченный символьный).



Пример 4.

type ch = array [1 .. 3, 1 .. 5] of real;

var c: ch;

или


c: array [1 .. 3, 1 .. 5] of real;

(описан двумерный массив с вещественных чисел, содержащий 3 строки и 5 столбцов).



Пример 5.

d: array [(black, white)] of 11 .. 20;

(описан массив d целых чисел с индексами black, white. Любой элемент массива может принимать значения от 11 до 20).


Смотрите также:
Структурные типы данных
62.68kb.
1 стр.
Система генерации общих типов данных в фундаментальных
98.26kb.
1 стр.
Поиск информации в базе данных
62.37kb.
1 стр.
Типы драйверов Драйверы различаются по возможностям, которые они предоставляют, а также по тому, каким образом обеспечивается к ним доступ и управление. Можно рассматривать три основные типа драйверов: Символьные драйверы
23.21kb.
1 стр.
Типы, формы и структурные элементы современного урока
199.9kb.
1 стр.
Ускоритель вэпп-3, ияф со ран. Структурные исследования клатратных гидратов высокого давления
106.77kb.
1 стр.
Занятие 1 Основные типы данных Операции с переменными Цикл for Условный оператор if
41.86kb.
1 стр.
Структурные изменения в клетках мицелия
38.01kb.
1 стр.
Архитектура системы конфигурирования карботрона hits. Метод хранения данных. {RC}
36.88kb.
1 стр.
Вопросы к итоговому междисциплинарному экзамену по дисциплине «Программное обеспечение компьютерных сетей»
53.79kb.
1 стр.
Реферат «технология xdsl»
121.87kb.
1 стр.
Б. Нойес Привязка данных в Windows Forms Книга охватывает все аспекты привязки данных в Windows Forms. Описываются средства, обеспечивающие связь с базой данных, такие, как типизированные наборы данных и адапт
69.76kb.
1 стр.