Интервальный тип (диапазон)

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

Обе константы должны принадлежать одному из стандартных типов (напомним, что тип real здесь недопустим). Значение первой константы должно быть обязательно меньше значения второй.

Формат:

type

<имя типа> = <константа1>. .<константа2>;

var

<идентификатор,…> : <имя типа>;

Пример.

type

Days = 1..31;

var

RabDay, BolnDay : Days;

В этом примере переменные RabDay и BolnDay имеют тип Days и могут принимать любые значения из диапазона 1..31. выход из диапазона вызывает программное прерывание.

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

const

Min = 1; Max = 31;

type

Days = Min .. Max;

var

RabDay, BolnDay : Days;

Операторы языка программирования паскаль

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

Простые операторы

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

Оператор присваивания

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

Формат оператора:

<имя переменной>:= <выражение>;

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

1) NOT

2) *, /, DIV, MOD, AND

3) +, -, OR,XOR

4) =, <>, <=, <, >, >=, IN.

Операции одинакового старшинства выполняются слева направо. С помощью скобок можно задать любой желаемый порядок вычислений.

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

Пусть, например, заданы следующие описания переменных:

VAR I,J,K:INTEGER;

A,B,C:REAL;

BOOL:BOOLEAN;

CH1,CH2:CHAR;

Тогда возможны следующие операторы присваивания:

I:= I DIV J + K

A:= B/C

BOOL:=A=B

CH1:=CH2

Оператор безусловного перехода

Оператор безусловного перехода предоставляет возможность изменять порядок выполнения операторов. С его помощью естественный порядок выполнения программы (т.е. оператор за оператором) прерывается и указывается, что дальнейшее выполнение программы должно продолжаться с оператора, помеченного меткой, которая использована в данном операторе перехода. Формат оператора:

GOTO <метка>

В качестве меток используются целые числа без знака из отрезка от 0 до 9999. В Турбо Паскале в качестве метки может быть использован любой идентификатор.

Примеры операторов перехода и помеченных операторов:

GOTO 25

GOTO M1

25: IF X>0 THEN X:=X*X

M1:I:=0

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

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

Оператор вызова процедуры

Оператор вызова процедуры служит для активизации предварительно определенной пользователем или стандартной процедуры. Например:

ClrScr;

InitWork(True);

Writeln('Hello');

1.4. Пустой оператор.

Пустой оператор никак не обозначается и не вызывает никаких действий. Пустой ператор - это просто лишняя точка с запятой в программе. Чаще всего пустой оператор встречается с меткой и ставится в конце составного оператора или в конце программы.

BEGIN

...

GOTO Metka; {переход в конец блока}

...

Metka: {пустой оператор помечен меткой}

END;

Структурные операторы

Структурные операторы представляют собой конструкции, построенные из других операторов по строго определенным правилам. Все структурные операторы подразделяются на группы: составные, условные, повтора и присоединения.

Составной оператор.

Составной оператор объединяет некоторую последовательность операторов в единый оператор путем заключения этой последовательности в операторные скобки - служебные слова BEGIN и END.

Формат оператора:

BEGIN <оператор 1>;<оператор 2>;..(оператор N> END

Операторы, входящие в составной оператор, выполнаятся в том порядке, в котором они записаны.

Примеры составных операторов:

BEGIN I:=0 END

BEGIN Y:=X/2; Х:=Х+H END

25.2.2 Условные операторы

В Турбо Паскале имеются два условных оператора IF и CASE. Рассмотрим оператор IF. С помощью оператора IF выбирается и выполняется один из операторов, входящих в его состав. Формат оператора: IF <логическое выражение> THEN <оператор1> ELSE <оператор2>

Выполнение такого условного оператора происходит так: если логическое выражение истинно, то выполняется первый оператор, если ложно, то второй.

Условный оператор используется также в сокращенной форме:

IF <логическое выражение> THEN <оператор>

В этом случае, если логическое выражение ложно, то не происходит никаких действий.

По синтаксису после THEN и ELSE может стоять только один оператор, поэтому если необходимо выполнить несколько операторов, то их объединяют в составной оператор.

Примеры условных операторов:

IF X<0 THEN I:=I+1 ELSE K:=K+1

IF (X<Y) AND D THEN BEGIN X:=SIN(X); Y:=Y+1 END

Во втором примере D - логическая переменная.

Рассмотрим оператор CASE.

Часто в программе бывает необходимо проверять достаточно много условий и в зависимости от них выполнять те или иные действия. Для этого можно использовать многократно вложенные друг в друга условные операторы. Однако в этом случае программа становится громоздкой и ее трудно понимать. Считается, что число уровней вложения не должно превышать двух-трех. Если же необходимо выбирать из большего числа условий, то целесообразным становится применение оператора варианта.

Формат оператора:

CASE <селектор варианта> OF

<константа варианта 1>:<оператор 1>;

<константа варианта 2>:<оператор 2>;

'...

<константа варианта n>:<оператор n>

END

Селектор варианта может быть любого простого типа, за исключением типа REAL. Константы варианта должны быть того же типа, что и селектор варианта.

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

CASE <селектор варианта> OF

<константа варианта 1>:<оператор 1>;

...

<константа варианта n>:<оператор n>;

ELSE <оператор>

END

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

Для того чтобы пометить оператор в списке выбора можно использовать несколько констант варианта, а также диапазоны. Например:

CASE CH OF

'A','B','E','I':CH1:=SUCC(CH1);

'K'..'R':CH1:=PRED(CH1)

END;

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

Примеры программ

Приведем примеры программ с использованием рассмотренных выше операторов.

Пример 3.1.

Написать программу вычисления десяти значений функции

y = Интервальный тип (диапазон) - student2.ru

Значения х вводятся оператором READ.

Программа 3.1.

PROGRAM PR31;

LABEL 1,2;

VAR I:INTEGER;

X,Y:REAL;

BEGIN

I:=1;

1:IF I>10 THEN GOTO 2;

WRITE('X=');

READ(X);

IF X<0 THEN Y:=ABS(X)

ELSE

IF X<=1 THEN Y:=EXP(X)

ELSE Y:=1/(2*X+1);

WRITELN(' Y=',Y);

I:=I+1;

GOTO 1;

2:END.

Пример 3.2. Вводится непустая последовательность положительных чисел, за которой следует нуль - это признак конца последовательности. Вычислить среднее арифметическое этих чисел.

Программа 3.2.

PROGRAM PR32;

LABEL 1,2,3;

VAR I:INTEGER;

X,S:REAL;

BEGIN

S:=0;

I:=0;

1:READLN(X);

IF X<0 THEN GOTO 2;

IF X=0 THEN GOTO 3;

S:=S+X;

I:=I+1;

GOTO 1;

2:WRITELN ('Недопустимое значение Х');

GOTO 1;

3:IF I>0 THEN WRITELN ('Среднее арифметическое равно',S/I)

ELSE WRITELN ('Пустая последовательность')

END.

Наши рекомендации