..

Сайт города Попасная.
 

 

Программирование

 

Интернет издания:

ПОПАСНЯНСКАЯ ПРАВДА

 


Главная официальный сайт регистрации в avon.

 

 

 

 

 

4. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Структурированный тип представляет собой набор элементов - данных, объединенных программистом в единый блок в соответствии с особенностями решаемой задачи. Данные, входящие в блок, могут быть однотипными или разнотипными, весь блок данных имеет общее имя. Каждый элемент отличается от других либо порядковым номером (индексом) - в массиве или в строке, либо своим именем - в записи, либо своим значением - во множестве. Эти типы представлены в данном разделе. Относящиеся к структурированным типам файловые типы представлены в разделе 8.

4.1. Массивы

Довольно часто возникают задачи, для решения которых необходимо ввести большое количество данных одинакового типа, к тому же при обработке этих данных необходимо выполнять одни и те же операции, например, задача сортировки последовательности введенных чисел. Рассмотрим ее на следующем примере. Вводится десять произвольных целых чисел, для хранения каждого из которых достаточно использовать переменную типа Integer. Необходимо расположить их в порядке убывания значений и вывести на экран. Одним из известных алгоритмов решения этой задачи является алгоритм сортировки методом «пузырька», который заключается в следующем. Элементы введенной последовательности просматриваются в цикле от первого до предпоследнего значения. Значение каждого элемента сравнивается со следующим по порядку, и если следующее значение больше, то они меняются местами. В результате выполнения этого цикла самое меньшее (самое «легкое») значение обязательно переместится в конец последовательности. Отсюда, кстати, и название метода. Теперь надо снова выполнить цикл просмотра для всех элементов последовательности, но за исключением уже двух элементов - предпоследнего и последнего. Таких циклов просмотра в самом неудачном случае надо выполнить на единицу меньше числа элементов в последовательности, и их включают во внешний цикл. В этом алгоритме важен порядок расположения значений, а не их имена. Поэтому имя у всех введенных чисел может быть одно, что необходимо, кстати, для организации цикла, а различаться они должны по номеру в последовательности. Такой способ обращения к данным и обеспечивают массивы. Массивом называется фиксированный набор индексированных элементов любого, но обязательно одного и того же типа. Элемент массива имеет общее для всего массива имя и персональный индекс, который называют номером, если он представляет собой число. При обращении к «цементу массива указывается имя -массива и значение индекса этого элемента. Например, если мы дадим массиву имя mas, то имя пятого элемента массива - mas[5]. Переменная типа массив объявляется в разделе описаний, причем при объявлении указывается тип индекса и тип элемента массива. Запись Var mas:Array[1..1O] of Integer; означает, что переменная mas объявлена как массив (Array - зарезервированное слово), имеющий 10 элементов с индексами от 1 до 10 (тип-диапазон); каждый элемент массива (Of - зарезервированное слово) является переменной типа Integer. Рассмотрим, как используются массивы в программе, реализующей описанный алгоритм сортировки.

Программа 4.1.

Const n=10;
Var
Mas:Array[1..n] of Integer;
i,j:Byte;
Exchange:Integer;
Begin
{Ввод исходной последовательности}
For i:=l To n Do Begin
Write('?');
Readln(Mas[i]);
End;
(Сортировка введеннной последовательности}
For i:=l To n-1 Do
For j:=1 To n-i Do
If Mas[j]<Mas[]+l] Then
Begin
Exchange:=Mas[j];
Mas[j]:=Mas[j+l];
Mas[j+1]:=Exchange;
End;
{Вывод отсортированной последовательности}
For i:=l To n Do
Write(Mas[i]:6);
End.

Обратите внимание, что при выполнении всех действий, за исключением некоторых операций присваивания, к массиву нельзя обращаться как к единому целому; допускается использовать только элементы массива. Попытка выполнить операцию со всем массивом сразу, например, вывести все его значения на экран - Write(Mas), приведет к ошибке. В то же время можно присвоить сразу всему массиву значение другого массива, но только если эти массивы одного и того же типа. Если ввести 10 произвольных чисел, например 15 2 45 -4 6 -8 13 7 -3 7, то программа их переставит местами таким образом, что они будут расположены в порядке убывания. В результате будет получена следующая последовательность: 45 15 13 7 7 6 2-3-4-8. Как видно из программы, использование массива позволяет просто и компактно реализовать данный алгоритм сортировки. Для сравнения можно вместо одного массива объявить 10 отдельных переменных и реализовать этот алгоритм, используя их. При объявлении массива для указания диапазона изменения значений индексов чаще всего применяется тип диапазон. Использованный в программе 4.1. массив можно описать следующим образом:
Const n=10;
Type Ind=l..n;
Var
mas:Array[Ind] of Integer;

Особенностью структуры типа массив является недопустимость изменения типа индекса в процессе выполнения программы. Поэтому границы типа-диапазона для индекса можно задавать с помощью константы, в данном случае - n, и нельзя задавать с помощью переменной. Индексами массива могут быть значения любого порядкового типа, за исключением Longlnt, а элементами - любого типа, включая структуры. Например, допустимо использование следующих описаний массивов:
Type Letter= ' а ' . . ' z ';
Type Line=Array[-24. .10] of Real;
Var a:Array[Boolean] of Char;
b:Array[Letter] of Byte;
c: Array[Byte] of Line;

Тип Line определен как массив из 35 элементов вещественного типа, нумеруемых числами от-24 до 10. Переменная а описана как массив из двух элементов типа символ; поскольку в стандартном типе Boolean всего два логических значения, элементы нумеруются как False и True, а не 0 и 1. Переменная b объявлена как массив из 26 элементов типа Byte, потому что индексами для элементов являются строчные буквы латинского алфавита. Переменная с содержит 256 элементов, нумеруемых числами от 0 до 255, причем каждый элемент является, в свою очередь, массивом из 35 вещественных чисел. Примеры правильного обращения к этим переменным приведены ниже:
а[х>=0]:='+';
b['w']:=10;
с[123][-12]:=6.7;

Массив может иметь несколько индексов. Примером такого массива является описанная выше переменная с. Массив с двумя индексами можно объявить и так:
Const
n=10;
m=5;
Type
Ind1=l..n;
Ind2=-5..m;
Var
mas:Array[Ind1,Ind2] of Integer;

Количество индексов не ограничивается. Однако особенности адресации к памяти при работе в среде DOS позволяют использовать для хранения данных, объявленных в разделе описаний одной программы, не более 64кб, то есть 65536 байт. Поэтому, например, объявление массива Var Alllnt:Array[lnteger] of Word, для которого в памяти потребуется ровно в два раза больше места, приведет к появлению следующей ошибки 'Structure too large' («Слишком большая структура»). Для задания значений элементов массивы можно объявлять как типизированные константы, например:
Const n=10; Type Ind=l..n;
TypeMas=Array[Ind] of Integer; Const mas: TypeMas=(1 2 3 4 5 6 7 8 9 10);

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

Const
n=3;
m=2;
Type
Ind1=1..n;
Ind2=l..m;
TwoDim=Array[Ind1,Ind2] of Integer;
Const mas:TwoDim=((1,2),(2,3),(3,8));

 

Вернуться к оглавлению

 
Popasnaya.com.ua Web-Source 2003 - 2004 / babelyuk jr / All Rights Reserved