Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет_Паскаль2012.doc
Скачиваний:
9
Добавлен:
09.06.2015
Размер:
253.44 Кб
Скачать

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

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

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

BEGIN

[Оператор1;

ОператорN]

END;

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

3.2.2. Условные операторы обеспечивают выполнение или невыполнение некоторого оператора, группы операторов или блока в зависимости от заданных условий.

Оператор условияможет принимать одну из следующих форм:

  1. IF_условие_THEN_оператор1_ELSE_оператор2;

  2. IF_условие_THEN_оператор;

Условие– выражение булевского типа, при его записи могут использоваться все возможные операции отношения. Если значение выражения истинно, то выполняетсяоператор1, если ложно –оператор2. Во втором варианте, если выражение ложно, то выполняется оператор, следующий в программе сразу за операторомIF. Один операторIFможет входить в состав другого оператораIF, т.е. этот оператор может быть вложенным. При вложенности операторов каждоеELSEсоответствует томуTHEN, которое ему непосредственно предшествует.

Пример 7. 1) Программа определения принадлежности точки с координатамиX,Yокружности радиусомRс центром в начале координат.

PROGRAM KRUG;

USES CRT;

VAR X,Y,R,L: REAL;

BEGIN

CLRSRT;

WRITELN(‘введите значенияX,YиR’);

READ(X,Y,R);

L:=SQRT(SQR(X)+SQR(Y));

IFL<RTHENWRITELN(‘точка находится внутри круга’);

ELSEWRITELN(‘точка находится вне круга’);

END.

2) поиск в массиве элементов, равных заданному значению, определение их количества, формирование из индексов этих элементов массива и его печать.

READ(J); {задание значения}

S:=0;

FOR I:=1 TO N DO IF A[I]=J THEN BEGIN

S:=S+1;C[S]:=I

END;

{печать результатов поиска}

IF S=0 THEN WRITELN('в массиве элем. равных заданному нет')

ELSE BEGIN WRITELN('в массиве ',s:3,' элем. равных’,J);

WRITELN(‘ номера элементов, равных заданному: ‘,)

{печать массива из номеров элементов}

FOR K:=1 TO S DO WRITE(‘ ‘,C[K]);

END;

Оператор выборапозволяет сделать выбор из произвольного числа имеющихся вариантов и имеет формат:

CASE_выражение-селектор_OF

список1 :оператор1;

список2 :оператор2;

списокN :операторN;

ELSE[оператор]

END;

Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна текущему значению селектора, то выполняется оператор, стоящий послеELSE.

Пример 8. Определение диапазона, в котором находится вводимое с клавиатуры число.

READ(I);

CASE I OF

1..10: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 1 до 10’);

11..20: WRITELN(‘числоI=’,I:3,’лежит в диапазоне от 11 до 20’);

21..30: WRITELN(‘числоI=’,I:3,’лежит в диапазоне от 21 до 30’);

ELSEWRITELN(‘числоI=’,I:3,’находится вне диапазона 1 - 30’);

END;

3.2.3. Операторы повтораиспользуются при организации циклов.

Оператор повтора FORсостоит из заголовка и тела цикла и может иметь два формата:

1. FOR_параметр-цикла:=S1_TO_S2_DO_оператор;

2. FOR_параметр-цикла:=S1_DOWNTO_S2_DO_оператор;

S1 иS2 – выражения, определяющие начальное и конечное значение параметра цикла.FOR…DO– заголовок цикла,оператор– тело цикла. Тело цикла может быть простым или составным оператором. ОператорFORобеспечивает выполнение тела цикла с увеличением параметра цикла (TO) или с уменьшением параметра цикла (DOWNTO) на единицу.

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

Пример 9. 1)Вычисление переменных А и В, значения которых зависят от переменной цикла, и их печать.

FOR I:=1 TO 4

BEGIN A:=2*I; B:=4+I

WRITELN(A:3,B:4)

END;

2) Перевод угла в градусах в радианы.

WRITELN(‘угол в градусах угол в радианах’);

FOR I:=0 TO 18 DO BEGIN

GRAD:=I*20;

RAD:=GRAD*PI/180;

WRITELN(‘ ‘,GRAD:12:2,’ ‘,RAD:12:4);

END;

Оператор повтора repeatимеет формат:

REPEAT

тело цикла;

UNTIL_условие;

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

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

Пример 10. Вычислениеy=x2приx=8, 6, 4, 2.

X:=8

REPEAT

Y:=SQR(X);

WRITELN (X:3,Y:4);

X:=X-2

UNTILX=0;

Оператор повтора WHILEаналогичен операторуREPEAT, но проверка условия выполнения тела цикла производится в начале цикла. Оператор имеет формат:

WHILE_условие_DO_тело цикла;

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

Все операторы повтора могут быть вложенными.

Пример 11. 1) Увеличение переменнойIна 2 до тех пор, пока она меньше 30.

I:=10;

WHILE I<30 DO I:=I+2;

2) Вычисление переменных А и Nпо заданным формулам до тех пор, пока 2*Aне станет меньше или равно 3*N+1.

A:=1; N:=2;

WHILE 2*A<=3*N+1 DO

BEGIN A:=A*2;

N:=N+1;

END;

3) Перевод угла в радианах в градусы.

RAD:=0;

WRITELN(‘угол в радианах угол в градусах’);

WHILE RAD<6,28 DO BEGIN

GRAD:=RAD*180/PI;

WRITELN(‘ ‘,RAD:12:4,’ ‘,GRAD:12:2);

RAD:=RAD+0.1;

END