Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_TP.doc
Скачиваний:
13
Добавлен:
22.12.2018
Размер:
1.4 Mб
Скачать

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

  1. Составной: задает последовательное выполнение операторов, входящих в него в прямом порядке.

BEGIN

<ОПЕРАТОРЫ>

END;

IF X>0 THEN

BEGIN

Z:=SQRT(X);

K:=X*X;

WRITELN(Z,K);

END;

  1. Условные: предназначены для выбора к исполнению 1 из 2-х возможных действий – операторов в зависимости от условия. При этом 1 из действий может отсутствовать(или THEN,или ELSE).

IF <ВЫРАЖЕНИЕ> THEN <ОПЕРАТОР>=ELSE<ОПЕРАТОР>

Порядок выполнения:

  • вычисляется выражение после IF, результат – логический тип.

  • При значении истины выполняется веточка THEN, в противном случае ELSE.

  • В случае отсутствия ELSE управление передается оператору следующему за условием.

Возможно сколько угодно уровней вложенности условных операторов. При этом ELSE относится к ближайшему IF.

Пример использования условного оператора:

Выполнить расчет площади в зависимости от значения идентификатора N:

N=1 – площадь треугольника;

N=2 – площадь прямоугольника;

N=3 – площадь трапеции.

PROGRAM EXAMPLE_5;

VAR

N:INTEGER; {N – ИДЕНТИФИКАТОР ГЕОМЕТРИЧЕСКОЙ ФИГУРЫ}

A,B,H,S:REAL;

BEGIN

WRITELN(‘ДЛЯ РАСЧЕТА ПЛОЩАДИ ТРЕУГОЛЬНИКА ВВЕДИТЕ N=1’);

WRITELN(‘ДЛЯ РАСЧЕТА ПЛОЩАДИ ПРЯМОУГОЛЬНИКА ВВЕДИТЕ N=2’);

WRITELN(‘ДЛЯ РАСЧЕТА ПЛОЩАДИ ТРАПЕЦИИ ВВЕДИТЕ N=3’);

READLN(N);

IF N<4 THEN {ПРОВЕРКА ПРАВИЛЬНОСТИ ВВЕДЕННОГО ЗНАЧЕНИЯ N}

BEGIN

WRITELN(‘ВВЕДИТЕ А,В,H’);

READLN(A,B,H);

IF N=1 THEN

BEGIN

S:=A*B/2;

WRITELN(‘ПЛОЩАДЬ ТРЕУГОЛЬНИКА S=’,S:5:2);

END;

ELSE

IF N=2 THEN

BEGIN

S:=A*B;

WRITELN(‘ПЛОЩАДЬ ПРЯМОУГОЛЬНИКА S=’,S:5:2);

END;

ELSE

BEGIN

S:=(A+B)*H/2;

WRITELN(‘ПЛОЩАДЬ ТРАПЕЦИИ S=’,S:5:2);

END;

END;

READLN;

END.

  1. Оператор выбора или варианта: обобщение условного оператора для случая произвольного числа альтернатив. С помощью него можно сопоставить различные значения выражения соответствующим им операторам.

Общий вид:

CASE <ВЫРАЖЕНИЕ> OF

КОНСТ.1: <ОПЕРАТОР 1>,

КОНСТ.2 :<ОПЕРАТОР 2 >,

КОНСТ.N: <ОПЕРАТОР N>

ELSE <ОПЕРАТОР>

END;

Алгоритм выполнения:

  • вычислить условие в выражении

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

  • По этой ветви выполняется оператор

  • После выполнения CASE OF управление передается на оператор следующий за END.

Пример распечатки действия светофора:

CASE COLOR OF

RED:WRITELN(‘STOP’);

GREEN:WRITELN(‘STOY’)

END;

CASE N OF

10:Y:=X*X

20: …

Задача. По порядковому номеру дня недели распечатать названия.

CASE DAY OF

1:WRITELN(‘MONDAY‘),

2:WRITELN(‘TUESDAY‘),

3:WRITELN(‘WHENSDAY‘),

4:WRITELN(‘THURSDAY‘),

5:WRITELN(‘FRIDAY‘),

6:WRITELN(‘SANDAY‘),

7:WRITELN(‘SATURDAY‘)

END;

Для того чтобы задать некоторые действия для случая несовпадения значения выражения константам оператора используется ELSE. До END пишем ELSE: WRITELN(‘ОШИБКА’), далее пишем END. Все константы должны иметь тип тот же, что и у выражения.

  1. Операторы цикла:

  • цикл с предусловием:

WHILE <ЛОГИЧЕСКОЕ УСЛОВИЕ> DO

BEGIN

<ОПЕРАТОРЫ ЦИКЛА>

END;

Пример:

А) WHILE M[I]<>0 DO

I:=I+1;

Б) WHILE X<=N DO

BEGIN

FACT:=FACT*X;

X:=X+1;

END;

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

PROGRAM EXAMPLE 6;

VAR

X:REAL;

K:INTEGER;

BEGIN

X:=0;

WHILE(COS(X)+SIN(X))>0 DO

BEGIN {Начало циклической части программы}

WRITELN('X=');

READLN(X);

END; {Конец циклической части программы}

WRITELN('X=',X:4:1,'Y=',(COS(X)+SIN(X)):4:1);

READLN

END.

WHILE DO задает повторяющееся выполнение оператора, содержащегося в нем.

Алгоритм выполнения цикла:

1) вычислить логическое выражение;

2) если результат эквивалентен истине (TRUE) , то выполняется тело цикла до бесконечности;

  1. если результат логического выражения ложь(FALSE) цикл прекращается, передавая управление на следующий оператор.

Пример. Определить сумму элементов в одномерном массиве ,пока она не превысит Р.

(фрагмент)

I:=1

REPEAT

I:=I+1;

S:=S+A[I]

UNTIL S>P

Пример: вечный цикл.

S:=0;

REPEAT

I:=1;

I:=I+1;

S:=S+A[I];

UNTIL I=10;

- цикл с постоянным условием:

Общий вид: REPEAT

{BEGIN,END - не надо} <операторы цикла >

UNTIL<логическое выражение>

Пример:

REPEAT

PROC(X,Y+1);

I:=I+1;

UNTIL I=0;

Алгоритм выполнения:

1. Выполняется тело цикла.

2. Вычисляется логическое выражение или условие из "UNTIL".

3. Если результат эквивалентен лжи, то повторяется тело цикла.

4. Если - истина, то цикл прекращается.

Пример. Использование оператора цикла с последующим условием.

PROGRAM EXAMPLE 7;

VAR

CH:CHAR; {CH - буквы текста }

BEGIN

WRITELN(' Введите текст');

REPEAT {Начало циклической части программы}

READ(CH);

UNTIL(CH='.') OR (CH='? ') OR (CH='!');

{Конец циклической части}

END.

- цикл с параметром:

Общий вид: (DOWN TO)

FOR <параметр цикла>:= <начальное значение> TO <конечное значение> DO

BEGIN<операторы>

END;

Алгоритм выполнения:

1. Выполняется тело цикла.

2. Перебираются целые значения от начального до конечного

3. Действие передается на следующий оператор.

Пример цикла DOWN TO:

FOR I:= X+2 DOWN TO X-2 DO

BEGIN

M[I*2-1]:=FUNC(A,B);

PROC(M,I);

END;