Теоретические сведения

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

1. if<условие> then <оператор-1> else <оператор-2>;

Ключевые слова if, then, else означают соответственно «если», «то», «иначе». Условие – это выражение булевского (логического) типа. Оно может быть простым или сложным. Сложные условия образуются с помощью логических операций and, or, not. При записи условий могут быть использованы все допустимые в Паскале операции отношения.

Если значение логического выражения (условия) истинно (True), выполняется <оператор-1>, если ложно (False) – <оператор-2>.

Пример: A:=3; B:=7;

if A>B then writeln ('A больше B')

else writeln ('A меньше или равно B');

На экране появится сообщение 'A меньше или равно B'.

 

2. if<условие> then <оператор>;

 

Если результат логического выражения (условия) истинно (True), то выполняется <оператор>, если ложно (False) – оператор, следующий сразу за оператором if.

Пример: A:=3; B:=7; C:=0;

if A>B then begin

C:=A+B;

A:=0

end;

C:=C+5;

writeln('C=', C:2);

В этом примере выражение A>B ложно, оператор C:=A+B не выполнится и на экране появится сообщение 'C=5'. Один оператор if может входить в состав другого оператора if (вложенность операторов):

if <условие-1> then

if <условие-2> then <оператор-1>

else <оператор-2>;

При вложенности операторов каждое else присоединяется к тому then, которое непосредственно ему предшествует.

Оператор выбора case является обобщением оператора if и позволяет сделать выбор из произвольного количества имеющихся вариантов вычислений.

Оператор case может иметь две формы.

1. Case <выражение-селектор> of <список-1> : <оператор-1>; <список-2> : <оператор-2>; ………………………………… <список-n> : <оператор-n> else <оператор> end;

2. Вторая (короткая) форма отличается от первой отсутствием строки else <оператор>.

Оператор case работает следующим образом. Сначала вычисляется значение выражения-селектора, затем выполняется тот оператор, константа выбора которого в списке равна этому вычисленному значению селектора. Если ни одна из констант ни одного из списков не равна текущему значению селектора, то выполняется оператор, стоящий за словом else. Если слово else отсутствует, то управление передается оператору, находящемуся за словом end.

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

Пример 1. Селектор интервального типа:

Case n of

1..10 : writeln ('число', n:3,'в диапазоне 1-10');

11..20 : writeln ('число', n:3,'в диапазоне 11-20');

21..30 : writeln ('число', n:3,'в диапазоне 21-30')

else writeln('число ',n:3,'вне контроля')

end; {case}

Пример 2. Селектор целочисленного типа:

Case n of

1, 5, 7 : x:=n+1;

10..20 : x:=n+10

else goto metka1

end; {case}

Пример 3. Селектор символьного типа:

Writeln('Y/y – продолжение работы');

Writeln('N/n – выход из программы');

Readln(selector);

Case selector of

'Y', 'y' : Work; {продолжение работы}

'N', 'n' : exit {выход из программы}

end; {case}

Пример 4.

Case day of

1..5 : writeln ('рабочий день');

6, 0 : writeln ('выходной день)

end;

Согласно формуле Зеллера соответствие между номером дня недели и его названием будет таким:

0 – воскресенье; 1 – понедельник; …………………. 6 – суббота.

Порядок выполнения работы

Выполнить три задачи, используя операторы if и case. Каждую задачу можно выполнять в разных программах или в одной. Эту одну программу можно организовать так, чтобы была возможность каждую задачу выполнять несколько раз с разными исходными данными, не выходя из режима выполнения программы. Ниже приведен как раз такой пример выполнения всех задач в одной программе.

 

Задача 1.

Значения a и x ввести с клавиатуры.

Вычислить

Задача 2.

Значения a, x и номер варианта k ввести с клавиатуры.

Вычислить

Задача 3.

Координаты точки (x, y) ввести с клавиатуры. Определить, попадет ли эта точка в заштрихованную область (кольцо):

 

PROGRAM EXAMPLE;

USES CRT;

VAR X1,A1,Y1:REAL; { ОПИСАНИЕ ПЕРВОЙ ЗАДАЧИ }

X2,A2,Y2:REAL; K:INTEGER; { ОПИСАНИЕ ВТОРОЙ ЗАДАЧИ }

X3,Y3,Z:REAL; { ОПИСАНИЕ ТРЕТЬЕЙ ЗАДАЧИ }

SELECTOR:BYTE;

BEGIN

REPEAT

CLRSCR; { ОЧИСТКА ЭКРАНА }

WRITELN(' ВВЕДИТЕ НОМЕР ЗАДАЧИ СОГЛАСНО МЕНЮ : ');

WRITELN;

WRITELN(' 1.........ЗАДАЧА 1 ');

WRITELN(' 2.........ЗАДАЧА 2 ');

WRITELN(' 3.........ЗАДАЧА 3 ');

WRITELN(' 4.........ВЫХОД ИЗ ПРОГРАММЫ ');

READLN(SELECTOR);

 

CASE SELECTOR OF

 

1: BEGIN { ПЕРВАЯ ЗАДАЧА }

CLRSCR;

WRITELN('ВВЕДИТЕ ВЕЩЕСТВЕННЫЕ ЧИСЛА X И A ');

READLN(X1,A1);

IF X1<A1 THEN Y1:=LN(SQR(A1)+1)

ELSE Y1:=SIN(A1*X1);

WRITELN('A=',A1:5:3,' X=',X1:5:3,' Y=',Y1:5:3);

WRITELN;WRITELN;

WRITELN('НАЖМИТЕ ENTER ДЛЯ ПРОДОЛЖЕНИЯ');

READLN;

END; { КОНЕЦ ПЕРВОЙ ЗАДАЧИ }

 

2: BEGIN { ВТОРАЯ ЗАДАЧА }

CLRSCR;

WRITELN('ВВЕДИТЕ ВЕЩЕСТВЕННЫЕ ЧИСЛА А И Х ');

READLN(A2,X2);

WRITELN('ВВЕДИТЕ НОМЕР ВАРИАНТА ( ЧИСЛО К) ');

READLN(K);

CASE K OF

0: Y2:=A2*X2+1;

1: Y2:=A2*SQR(X2)/2;

2: Y2:=X2-A2;

3: Y2:=1000

END; { CASE }

WRITELN('A=',A2:5:3,' X=',X2:5:3,' Y=',Y2:5:3);

WRITELN;WRITELN;

WRITELN('НАЖМИТЕ ENTER ДЛЯ ПРОДОЛЖЕНИЯ');

READLN;

END; { КОНЕЦ ВТОРОЙ ЗАДАЧИ }

 

3: BEGIN { ТРЕТЬЯ ЗАДАЧА }

CLRSCR;

WRITELN(' ВВЕДИТЕ КООРДИНАТЫ ТОЧКИ X И Y :');

READLN(X3,Y3);

Z:=X3*X3+Y3*Y3;

IF ( Z>=1 ) AND ( Z<=4 )

THEN WRITELN ('ТОЧКА ПРИНАДЛЕЖИТ ОБЛАСТИ')

ELSE WRITELN ('ТОЧКА НЕ ПРИНАДЛЕЖИТ ОБЛАСТИ');

WRITELN;WRITELN;

WRITELN('НАЖМИТЕ ENTER ДЛЯ ПРОДОЛЖЕНИЯ');

READLN;

END; { КОНЕЦ ТРЕТЬЕЙ ЗАДАЧИ }

4: EXIT; { ВЫХОД ИЗ ПРОГРАММЫ }

END; { CASE }

UNTIL FALSE;

END.