1. Попов В.Б. Паскаль и Дельфи. Самоучитель - СПб.: Питер, 2004. - 544 с.: ил. ISBN 5-8046-0156-3
Оператор безусловного перехода – простой оператор, указывающий, что дальнейшее выполнение должно продолжаться, начиная с оператора, помеченного меткой, указанной в операторе перехода.
Оператор перехода имеет вид:
GOTO <метка>
Метка в Паскале – это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него. В качестве меток допускаются также целые числа без знака.
Метка располагается непосредственно перед помечаемым оператором и отделяется от него двоеточием. Оператор можно помечать несколькими метками, которые в этом случае отделяются друг от друга двоеточием. Перед использованием в программе метка должна быть объявлена в разделе описания меток.
Примечание Современная технология структурного программирования основана на принципе программирования без меток. Считается, что злоупотребление операторами перехода затрудняет понимание программы, делает ее запутанной и сложной в отладке.
Перечисляемый тип задается непосредственно перечислением всех значений, которые может принимать переменная данного типа. Каждое значение является константой своего типа и может принадлежать только одному из перечисляемых типов, заданных в программе. Перечисляемый тип описывается в разделе описания типов, который начинается со служебного слова type. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками, например:
type Colors = (red, white, blue); Days = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
Программист объединяет в одну группу в соответствии с каким - либо признаком всю совокупность значений, составляющих перечисляемый тип. Применение перечисляемых типов делает программы нагляднее. Благодаря перечисляемым типам повышается надежность программ за счет возможности контроля тех значений, которые получают соответствующие переменные.
Переменные любого перечисляемого типа можно объявлять без предварительного описания этого типа, например:
var TextColor: (black, white, green);
Значения, входящие в перечисляемый тип, являются константами. Действия над ними подчиняются правилам, применимым к константам. Они пронумерованы начиная от 0 в порядке следования в описании. Ко всем перечисляемым типам применимы операции отношения (если оба операнда одного типа). Порядок устанавливается последовательностью перечисления констант.
Для аргументов, относящихся к ординальным типам существуют такие предописанные функции:
§ ord (X) - возвращает ординальный порядковый номер значения выражения X.
§ pred (X) - возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру ORD(X)- 1), функция PRED(X) не определена для первого значения типа;
§ succ (X) - возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ORD(X) +1 . функция SUCC(X) не определена для последнего значения типа.
Пример: в программе определена переменная var с : Char; begin с := '5' ; end. функция PRED(C) вернет значение '4', а функция SUCC(C) - значение '6'.
Допускается и обратное преобразование: любое выражение типа WORD можно преобразовать в значение перечисляемого типа, если только значение целочисленного выражения не превышает мощности перечисляемого типа. Такое преобразование достигается применением автоматически объявляемой функции с именем перечисляемого типа.
К переменным перечисляемого типа может быть применим оператор присваивания. Переменные и константы перечисляемого типа не могут быть элементами списка ввода или вывода.
Пример (определение числа дней в месяцах года):
program Month; {$APPTYPE CONSOLE} uses SysUtils, TypInfo; type Month = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);var DayOfMonth : array[Month] of integer = (31,28,31,30,31,30,31,31,30,31,30,31); Year : integer; i : Month;begin write('введите требуемый год: '); readln(Year); for i := Jan to Dec do begin if i=Feb then if ((Year mod 4=0) and (Year mod 100<>0)) or (Year mod 400=0) then DayOfMonth[i] :=29; writeln(GetEnumName(TypeInfo(Month), Ord(i)),' - ',DayOfMonth[i]); end;readln;end.