Типы данных (ч. 1)

Алгоритмы и структуры данных

Контрольные вопросы по предмету

0


Подпишитесь на бесплатную рассылку видео-курсов:

Текст видеолекции

Перечисляемый тип данных

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

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

Например, перечисляемый    тип  Rainbow(РАДУГА)  объединяет скалярные значения

RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET (КРАСНЫЙ, ОРАНЖЕВЫЙ,  ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, СИНИЙ, ФИОЛЕТОВЫЙ).

 Перечисляемый тип Traffic_Light (СВЕТОФОР) объединяет скалярные

значения RED, YELLOW, GREEN (КРАСНЫЙ,  ЖЕЛТЫЙ, ЗЕЛЕНЫЙ).

   Перечисляемый тип  описывается  в разделе описания типов,  который

начинается со служебного слова type, например:

 type

  Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

     Каждое значение  является константой своего типа и может принадлежать только одному из перечисляемых типов, заданных в программе. Например, перечисляемый    тип  Traffic_Light не может быть определен в одной программе с типом Rainbow,  так как оба типа содержат одинаковые константы.

   Описание переменных, принадлежащих к скалярным типам, которые объявлены в  разделе описания типов,  производится с помощью имен типов.

Например:

          type  Traffic_Light= (RED, YELLOW, GREEN);

        var   Section: Traffic_Light;

   Это означает, что переменная Section может принимать значения RED, YELLOW или GREEN.

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

        var  Section: (RED, YELLOW, GREEN);

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

   К переменным перечисляемого  типа  может  быть  применим  оператор присваивания:            Section:= YELLOW;

     Упорядоченная последовательность значений, составляющих перечисляемый тип, автоматически нумеруется, начиная с нуля и далее через единицу. Отсюда следует, что к перечисляемым переменным и константам могут быть применены операции отношения  и  стандартные  функции  Pred, Succ, Ord.

Тип-диапазон (интервальный тип) Для данных порядкового типа можно объявить подтип, называемый тип-диапазон. Синтаксис описания таких типов: Type <имя типа> = <мин.значение>..<макс.значение>; Например: type Rus_Zaglavn = 'А'..'Я'; Тип Rus_Zaglavn (русские заглавные) - это подтип символьного типа Char. Тип-диапазон часто применяется при описании массивов (о массивах -далее). Если при работе программы значения какой-то переменной НЕ ДОЛЖНЫ выходить за известный диапазон, то тип-диапазон можно применить для контроля правильности работы программы.

Массивы

  Массивы представляют собой ограниченную упорядоченную совокупность однотипных величин.  Каждая отдельная величина называется компонентой массива. Тип   компонент может быть любым,  принятым в языке ПАСКАЛЬ, кроме файлового типа. Тип компонент называется базовым типом.    Вся совокупность компонент определяется одним именем.  Для обозначения отдельных компонент используется конструкция,  называемая переменной с индексом или с индексами:

            A[5]     S[k+1]     B[3,5].

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

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

           R1:=Z.

     Для ввода  или вывода массива в список ввода или вывода помещается переменная с индексом,  а операторы ввода или  вывода  выполняются  в цикле.

   Первый индекс  определяет  номер  строки,  второй - номер столбца.

Двумерные массивы хранятся в памяти ЭВМ по строкам.

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

   Первый способ - с использованием типизированных констант,   например:

     type Dim10= Array[1..10] of Real;

     const

    raM10: Dim10 = ( 0, 2.1, 4, 5.65, 6.1, 6.7, 7.2, 8, 8.7, 9.3 );

 

   При инициализации двумерных массивов значения компонент каждого из

входящих в него одномерных массивов записывается в скобках:

    type Dim3x2= Array[1..3,1..2] of Integer;

     const

    iaM3x2: Dim3x2= ( (1, 2)

                      (3, 4)

                      (5, 6) );

   Второй способ инициализации - использование разновидности процедуры FillChar:

     FillChar( var V; NBytes: Word; B: Byte );

  Эта процедура заполняет участок памяти однобайтовым значением. Например, для обнуления массива A[1..10] of Real можно записать:

    FillChar(A, 40, 0); или    FillChar(A, SizeOf(A), 0);

Строки

   Особое место в языке ПАСКАЛЬ занимают массивы символов.  Стандартный ПАСКАЛЬ допускает два способа хранения символьных массивов в  памяти ЭВМ: распакованный и упакованный. Распакованные массивы символов хранятся в памяти ЭВМ по одному символу в машинном слове, упакованные - по одному символу в байте. При описании упакованного массива символов используют служебное слово PACKED, например:

              var   MAS: Packed Array[1..20] of Char;

  Описание распакованного массива символов имеет вид:

              var   M: Array[1..20] of char;

 

   Для преобразования символьного массива из  распакованной  формы  в упакованную и наоборот,  из упакованной в распакованную,  в язык ПАСКАЛЬ введены две стандартные функции Pack, UnPack.

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

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

описания констант.

   Строковые переменные - это одномерные упакованные  массивы  символов, для описания которых в TURBO PASCAL введен тип String.

   Например, если строка содержит до 30 символов,  ее тип будет определен как

      type   s= String[30];

     Длина строки не может содержать более, чем 255 символов.

   В TURBO PASCAL определено понятие строки переменной длины,  в этом случае ее описание задается как

      type  s= String;

     Тип String без указания длины совместим со всеми типами строк.

   Особенностью строковых переменных является то, что к ним можно обращаться как к скалярным переменным, так и к массивам. Во втором случае применяется конструкция "переменная с индексом", что обеспечивает доступ к   отдельным символам строки.  При этом нижняя граница идекса равна 1. Отдельный символ строки совместим с типом Char.

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

   Для строк определены операции присваивания, слияния (конкатенации) и сравнения.

   Инициализация строк может производиться как с помощью типизированных констант:

     const sName: String[9]= 'IBM PC/AT';

  так и с использованием второй разновидности функции FillChar:

     FillChar( var V; NBytes: Word; C: Char );

  например:

     FillChar(A, SizeOf(A), '0');

     Для работы  со  строками в TURBO PASCAL включены процедуры и функции, которые обеспечивают редактирование и преобразование строк.

Множества

  Понятие множества в языке ПАСКАЛЬ основывается  на  математическом представлении о  множествах:  это ограниченная совокупность различных элементов. Для построения конкретного множественного типа используется перечисляемый или интервальный тип данных.  Тип элементов, составляющих множество, называется базовым типом.

   Множественный тип  описывается  с  помощью  служебных слов Set of,

например:  

         type  M= Set of B;

  Здесь М - множественный тип, В - базовый тип.

   Пример описания переменной множественного типа:

           type

             M= Set of 'A'..'D';

         var

            MS: M;

     Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных:

           var

            C: Set of 0..7;

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

           ['A', 'C']    [0, 2, 7]    [3, 7, 11..14].

  Константа вида

           [ ]

  означает пустое подмножество.

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

   Значение переменной  множественного  типа  может быть задано конструкцией вида [T], где T - переменная базового типа.

   К переменным и константам множественного типа  применимы  операции присваивания(:=), объединения(+), пересечения(*) и вычитания(-):

           ['A','B'] + ['A','D']      даст  ['A','B','D']

         ['A'] * ['A','B','C']      даст  ['A']

         ['A','B','C'] - ['A','B']  даст  ['C'].

     Результат выполнения  этих  операций  есть величина множественного

типа.

   К множественным величинам применимы операции: тождественность (=),

нетождественность (<>), содержится  в (<=), содержит (>=).  Результат

выполнения этих операций имеет логический тип, например:

         ['A','B'] = ['A','C']  даст FALSE

         ['A','B'] <> ['A','C'] даст TRUE

         ['B'] <= ['B','C']     даст TRUE

         ['C','D'] >= ['A']     даст FALSE.

     Кроме этих операций для работы с величинами множественного типа  в языке ПАСКАЛЬ используется операция            in    проверяющая  принадлежность  элемента  базового типа,  стоящего слева от знака операции,  множеству, стоящему справа от знака операции. Результат выполнения этой операции - булевский.  Операция проверки принадлежности элемента множеству часто используется вместо операций отношения, например:

           A in ['A', 'B'] даст  TRUE,

         2 in [1, 3, 6]  даст  FALSE.

Записи

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

   Описание записи   в   языке   ПАСКАЛЬ   осуществляется  с  помощью служебного слова RECORD,  вслед за которым описываются компоненты записи. Завершается описание записи служебным словом END.

   Например, записная книжка содержит фамилии,  инициалы и номера телефона, поэтому отдельную строку в записной книжке удобно представить в виде следующей записи:

            type   Row=Record

                     FIO: String[20];

                     TEL: String[7]

                    end;                                            var    str: Row;

   Описание записей возможно и без использования имени типа,   например:

         var  str: Record

                    FIO: String[20];

                    TEL: String[7]

                   end;