Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programirovanie_ekzamen.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
236 Кб
Скачать
☆
  1. Порядковые типы. Перечисляемый тип

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

В общем виде объявление перечисляемого типа выглядит так:

Тип =( Значение1, Значение2, ... Значение i)

где:

тип — имя перечисляемого типа данных;

Значение i — символьная константа, определяющая одно из значений, которое может принимать переменная типа Тип.

Примеры:

TDayOfWeek = (MON,TUE,WED,THU,FRI,SAT,SUN);

TColor = (Red,Yellow,Green);

Примечание

Согласно принятому в Delphi соглашению, имена типов должны начинаться с буквы Т (от слова Туре — тип).

После объявления типа можно объявить переменную, относящуюся к этому типу, например:

type

TDayOfWeek = (MON,TUE,WED,THU, FRI,SAT,SUN) ;

var

ThisDay, LastDay: TDayOfWeek;

Помимо указания значений, которые может принимать переменная, описание типа задает, как значения соотносятся друг с другом. Считается, что самый левый элемент списка значений является минимальным, а самый правый — максимальным. Для элементов типа DayOfWeek справедливо:

MON < TUE < WED < THU < FRI < SAT < SUN

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

if (Day = SAT) OR (Day = SUN) then

begin

{ действия, если день — суббота или воскресенье }

end;

Приведенную инструкцию можно записать и так:

if Day > FRI then begin

{ действия, если день — суббота или воскресенье }

end;

  1. Тип массив (статический): описание, ввод, вывод

Массивы содержат фиксированное число элементов одного типа, так называемого типа элемента. На приводимой ниже синтаксической диаграмме тип элемента следует за словом of.

В индексных типах, по одному для каждой размерности массива, указывается число элементов. Допустимыми индексными типами являются все порядковые типы, за исключением длинного целого и поддиапазонов длинного целого. Массив может быть проиндексирован по каждой размерности всеми значениями соответствующего индексного типа; число элементов поэтому равно числу значений в каждом индексном типе. Число размерностей не ограничено.

Приведем пример типа массив:

array[1..100] of Real

Если тип элемента в типе массив также является массивом, то результат можно рассматривать как массив массивов или как один многомерный массив. Например,

array[boolean] of array[1..100] of array[Size] of Real

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

array[boolean,1..10,Size] of Real

Ввод:

For i:=1 to 10 do readln(massiv[i]);

Вывод: тоже, но witeln

  1. Тип запись: описание, ввод, вывод. Оператор With

Тип запись содержит установленное число элементов или полей,

которые могут быть различных типов. Описание типа запись указыва-

ет тип каждого поля и идентификатор, который именует поле.

--------- ------

тип запись --->¦ record +--T---------------->¦ end +-->

L--------- ¦ --------- ^ L------

L->¦ список +--

¦ полей ¦

L---------

список -------------

полейT->¦ фиксирован-+-T----------------------------T---------->

¦ ¦ ная часть ¦ ¦ ---- ------------- ^ ¦ ---- ^

¦ L------------- L->¦ ; +--->¦ вариантная +-- L->¦ ; +--

¦ L---- ^ ¦ часть ¦ L----

L--------------------------- L-------------

------------------ ---- ------

фиксированная ---->¦ список +-->¦ : +--->¦ тип +--T-->

часть ^ ¦ идентификаторов ¦ L---- L------ ¦

¦ L------------------ ¦

¦ ¦

¦ ---- ¦

L------------+ ; ¦<-------------------------

L----

Фиксированная часть типа запись содержит список фиксирован-

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

дое поле содержит информацию, которая всегда отыскивается одним и

тем же способом.

Приведем пример типа запись:

record

year: integer; { год }

month: 1..12; { месяц }

day: 1..31; { число }

end

В вариантной части, изображенной на синтаксической диаграмме

описания типа запись, память распределяется более чем для одного

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

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

Варианты налагаются друг на друга в памяти, поэтому в любое время

возможен доступ ко всем полям во всех вариантах.

вариантная часть

¦ ----- --------- --- --------

L->¦case+-T------------------->¦тип поля+->¦of+---->¦вариант+-T>

L----- ¦ ^ ¦признака¦ L--- ^ L-------- ¦

¦ -------- ---- ¦ L--------- ¦ ---- ¦

L>¦иденти-+>¦ : +-- L----+ ; ¦<----

¦фикатор¦ L---- L----

L--------

-----------------

тип поля ---->¦ идентификатор +---->

признака ¦порядкового типа¦

L-----------------

---------- ---- ---- ----

вариант ---->¦константа+-T->¦ : +->¦ ( +-T------------->¦ ) +-->

^ L---------- ¦ L---- L---- ¦ ^ L----

¦ ---- ¦ ¦ ¦

L----+ , ¦<----- ¦ ------- ¦

L---- L->¦список+--

¦полей ¦

L-------

Вы можете видеть на диаграмме, что каждый вариант идентифи-

цирован по крайней мере одной константой. Все константы должны

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

с типом поля признака. Доступ к вариантным и фиксированным полям

один и тот же.

В вариантной части можно указать необязательный идентифика-

тор - идентификатор признака поля. При наличии идентификатора

признака поля он становится идентификатором дополнительного фик-

сированного поля записи - поля признака. Программа может исполь-

зовать значение поля признака для указания, какой вариант являет-

ся активным в настоящий момент. Без указания поля признака

программа выбирает вариант по другому критерию.

Ниже приводятся несколько примеров типов запись:

record

firstName,lastName : string[40];

birthDate : Date;

case citizen : boolean of

True : (birthPlace: string[40]);

False : (country : string[20];

entryPort : string[20];

entryDate : Date;

exitDate : Date);

end

record

x,y : real;

case kind : Figure of

rectangle : (height,wigth: real); { прямоугольник }

triangle : (size1,side2,angle: real); { треугольник }

circle : (radius: real); { круг }

end

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]