Алгоритмические конструкции

Операторы выбора.

 

Мы познакомились с командой присваивания, командами ввода ивывода информации. Это так называемые простые операторы. Для того, чтобы было удобно записывать алгоритмы, используются алгоритмические конструкции. К таким алгоритмическим конструкциям относятся:

- составной оператор;

- условные операторы;

- циклы.

 

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

 

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

BEGIN

<оператор 1>;

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

...

<оператор n>

END;

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

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

Использование сотавного оператора будет продемонстрировано ниже.

 

2. Оператор выбора IF.

 

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

Такой алгоритм в общем виде можно записать так:

 

Если <условие> то <действие>; (пример 1)

или

Если <условие> то <действие 1>

иначе <действие 2>; (пример 2)

 

Такая алгоритмическая конструкция называется развилкой и вязыке Pascal записывается следующим образом:

IF <условие>

ТHEN

<оператор 1>

ELSE

<оператор 2>

 

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

> больше

>= не меньше

< меньше

<= не больше

<> не равно

= равно

В качестве примера рассмотрим программу, которая определяет максимальное из двух чисел:

PROGRAM MAXIMUM;

VAR X,Y: INTEGER;

BEGIN

WRITE('Введите два целых числа: ');

READLN(X,Y);

WRITE('Максимальное из двух чисел равно ');

IF X>Y

THEN

WRITE(X)

ELSE

WRITE(Y)

END.

Обратите внимание, что ключевые слова THEN и ELSE отделяются от следующих за ними операторов пробелами (если вы поставитеточку с запятой, то это будет ошибкой!).

Если в команде ветвления после слов THEN или ELSE требуется выполнить не одну, а несколько команд, то они заключаются в операторные скобки BEGIN - END.

Например:

IF D<>0

THEN

BEGIN

X1:=((-B+sqrt(D))/(2*A);

X1:=((-B-sqrt(D))/(2*A);

END

ELSE

writeln('действительных корней нет');

 

Допустима и сокращенная форма команды ветвления:

IF <условие> THEN <оператор>;

 

Например: IF D<0 THEN WRITE('Делить на 0 нельзя');

 

3. Сложные условия

 

3.1. Что такое True и False

 

Все приведенные выше примеры содержат ПРОСТЫЕ условия. Под УСЛОВИЕМ мы будем понимать какое-либо выражение, о котором (после определения всех значений входящих в него переменных) можно сказать, что оно либо ИСТИННО либо. Например:

Ifa>bthen... - здесь условие a>b является True только тогда, когда значение переменной a больше значения переменной b. ЭТО ЖЕ условие можно записать по другому: a-b>0 или b<a или b-a<0. И во всех приведенных случаях выражение является истинным (True) тогда и только тогда, когда значение переменной a больше

значения переменной b.

Выражения, значения которых могут равняться True или False, принято называть ЛОГИЧЕСКИМИ. Как правило, в логических выражениях всегда присутствует знаки сравнения:

> - больше = - равно

>= - больше или равно <> - не равно

< - меньше

<= - меньше или равно

 

Попробуйте сами определить, когда приведенные ниже значения выражений являются True, а когда - False:

a=b a>=b a+1=b-1 s*s<=121 abs(x-x0)<e

 

3.2. Логический тип данных

 

Учитывая, что в языке Pascal имеются выражение, принимающие конкретные значения (True и False), был введен специальный тип данных. Этот тип данных принято называть ЛОГИЧЕСКИМ типом данных. Переменные данного типа описываются в блоке описания VAR с помощью ключевого слова BOOLEAN. Например:

varX: integer;

f: boolean;

...

Значением переменной f может быть либо True, либо False. True и False известны компилятору языка и Вы можете использовать их явно в программе. Например:

...

f:=True;

if f then WriteLn('А значение-то ИСТИННО!!!');

...

Как еще можно использовать переменные логического типа? Учитывая, что они принимают точно такие же значения, как и ЛОГИЧЕСКИЕ выражения, их можно использовать ВМЕСТО этих выражений (какпредложено в вышеприведенном примере). Возможные варианты:

...

Write('Сколько Вам лет'); ReadLn(Year);

Write('А сколько лет Вашему другу'); ReadLn(Year_Friend);

f:=(Year+5<Year_Friend);

if f then WriteLn('Ничегосебе, ВашдругстаршеВас

более чем на 5 лет?!');

...

Достаточно часто встречаются ситуации, когда одно и тоже условие используется в программе более одного раза. В этом случае приведенный способ использования ЛОГИЧЕСКОЙ переменной позволит Вам, во-первых, сократить текст программы, а, во-вторых, облегчит ее модификацию. Представляете, если одно и то же условие (логическое выражение) встречается в Вашей программе 10 раз, а потом вдруг выяснилось, что там ошибка...

 

3.3. Сложные условия

 

Давайте решим простую задачку:

Составить программу, которая определит возраст человека.

 

Решение.

 

Program YEARS;

Uses Crt;

Const year_1=1995; {Текущийгод}

var Old,year:integer;

Begin

ClrScr; {Очисткаэкрана}

Write('В каком году Вы родились:');

ReadLn(year);

Old:=year_1-year; {Вычислиливозраст}

If (Old<0) or (Old>150) then

WriteLn('Неврите, стольконеживут')

else

WriteLn('Вамполных ',Old,' лет');

RealLn

end.

Обратите внимание на СЛОЖНОЕ условие в операторе If. Слово OR (читается как О-О-Р) переводится как ИЛИ и называется ЛОГИЧЕСКОЙ ОПЕРАЦИЕЙ "ИЛИ". Кроме этой логической операции имеется еще ряд операций, которые приведены в таблице 1. В данной таблице в качестве F1 и F2 выступают логические выражения.

 

 

Таблица 1

Логические операции

 

|Логическая Название Запись Результат операции

|операция операции

---------------------------------------------------------------------------------------------

| Not Логическое |NOT F1 Логическое значение, про-

| "НЕ" тивоположное F1.

-------------------------------------------------------------------------------------------------

| And Логическое F1 and F2 Логическое значение True,

"И" если F1 и F2 равны True,

и False во всех остальных

случаях.

--------------------------------------------------------------------------------------------------

| Or |Логическое F1 or F2 Логическое значение True,

"ИЛИ" если хотя бы одно из зна-

чений F1 или F2 равно True

и False если F1 и F2 равны

False.

-------------------------------------------------------------------------------------------------

| Xor Логическое F1 xor F2 Логическое значение True,

| исключающее если значения F1 и F2 раз-

| "ИЛИ" личны, и False если они

равны.

------------------------------------------------------------------------------------------------

Например:

If (a>3)and(a<5) then... - условие истинно тогда и только тогда, когда a>3 И a<5. Во всех других ситуациях - False.

If (b+1>=4) or (c='ку-ку') then... - условие True тогда и только тогда, когда True одно из логических выражений, соединенных OR.

Пр.

y=x^2,если 1<x<=3.

if (x>1) and (x<=3) theny:=sqr(x) elsewriteln('функциянеопределена на данном промежутке');

Обратите внимание, что

+=============================================================+

| при записи СЛОЖНОГО логического выражения ПРОСТЫЕ выражения

| ЗАКЛЮЧАЮТСЯ В СКОБКИ!!!

+=============================================================+

 

4. Оператор множественного выбора CASE

 

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

 

case <переменная> of

значение1:<оператор1>;

значение2:<оператор2>;

...

значениеN:<операторN>

else

<оператор>

end;

 

В этой структуре

Тип <переменной> д.б. целый, символьный, перечисляемый;

Из <операторов 1,2..., N>, выполняется тот, с константой которого (<значением 1,2,...N>) совпадает значение <переменной>;

Просто <оператор>,стоящий после else выполняется, если значение <переменной> не совпадает ни с одним из <значений 1,2,...N>.

 

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

 

Program Month;

Uses Crt;

Var num_month:byte;

begin

ClrScr;

WriteLn('Программа определяет название месяца по номеру':60);

Writeln;

WriteLn('Задайте номер месяца:'); ReadLn(num_month);

TextColor(LightMagenta);

Case num_month of

1: WriteLn('Январь');

2: WriteLn('Февраль');

3: WriteLn('Март');

4: WriteLn('Апрель');

5: WriteLn('Май');

6: WriteLn('Июнь');

7: WriteLn('Июль');

8: WriteLn('Август');

9: WriteLn('Сентябрь');

10: WriteLn('Октябрь');

11: WriteLn('Ноябрь');

12: WriteLn('Декабрь')

else WriteLn('Увы, месяца с таким номером не существует')

end; {Конец Case}

ReadLn;

End.

Пояснение.

При запуске программы выводится титул, а затем запрос на ввод номер месяца. Если введено число 1, то на экране появиться слово Январь, если 2 - Февраль и т.д. Если будет введено число 0 или больше 12 (и меньше 256), то на экране появится сообщение Увы, месяца с таким номером не существует. Если введете число меньше 0 или больше 255, то программа закончится аварийно.

 

Если для нескольких констант нужно выполнить один и тот же оператор, их можно перечислить через запятую или, если это возможно, указать диапазон и сопроводить их одним оператором.

Пример:

case I of

0,2,4,6,8: writeln('четнаяцифра');

1,3,5,7,9: writeln('нечетная цифра');

10..100: writeln('число от 10 до 100');

else

writeln('Отрицательное число или большее 100')

end;

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: