Турбо Паскаль 7.0

Укороченная форма оператора if

В операторе if часть, начинающаяся словом else, может отсутствовать. Часть, следующая за словом then, выполняется, если логическое условие, стоящее после слова if, имеет значение true. Если это логическое выражение имеет значение false, непосредственно выполняется оператор, следующий за if.

Наша программа может быть переписана с применением укороченной формы оператора if. Алгоритм сводится к последовательности проверок по­падания переменной Аде в различные диапазоны значений. Приведем изме­ненный текст программы:

Program Dialog; {расширенный диалог — второй вариант) const

Question =' What is your name?';

Rep(y1 =

'Паскаль — прост, но первый компилятор Паскаля был написан на Паскале';

Reply21 = 'Вас ждет удивительное путешествие';

Reply22 = 'сквозь джунгли особенностей и возможностей языка';

Reply3 =

'Паскаль — разумный компромисс между желательным и эффективным';

Reply4 = 'Паскаль академически элегантен';

var

Name: string;

Age: byte;

begin

WriteLn(Question); ReadLn(Name); {Ввод имени} WriteLn('Hello,', Name,'!'); {Вывод приветствия} WriteLn('How old are you?'); {Вопрос о возрасте} ReadLn(Age); {Ввод возраста} if 12 < Age then WriteLn(Reply1 );

if (12 <= Age) and (Age < 20) then begin

WriteLn (Reply21);

WriteLn (Reply22) end;

if (20 <= Age) and (Age < 40) then WriteLn(Reply3);

if Age >= 40 then WriteLn(Reply4) end.

Алгоритмически этот вариант решения задачи с использованием сокра­щенной формы оператора if существенно слабее первого варианта, в кото­ром использовалась полная форма. При исполнении программы будут про­верены все четыре условия, даже если при первой проверке найдено окончательное решение. Однако этот алгоритм не имеет вложенных друг в друга операторов и поэтому проще для понимания.

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

Оператор if — один из наиболее часто используемых структурных элемен­тов языка — обеспечивает ветвление алгоритма только на два направления. Вместе с тем ясно, что первый алгоритм решения задачи удачнее выражает ее сущность. Для реализации подобных алгоритмов необходим оператор множественного ветвления (выбора из нескольких ветвей ко­манд). Таким оператором в Паскале является оператор выбора case.

Общий вид этого оператора:

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

< альтернатива 2>:< оператор 2 >;

< альтернатива N >: < оператор N > else < оператор части Else> end;

Case и of — зарезервированные слова, которые являются отличитель­ным признаком оператора множественного ветвления. Селектор — это пере­менная или выражение порядкового типа. В зависимости от значения дан­ного выражения или переменной происходит ветвление программы. После заголовка оператора идет перечисление различных альтернатив, по кото­рым может выполняться программа. Альтернативы отделяются друг от друга точкой с запятой. Альтернатива состоит из метки, двоеточия и исполняемого оператора данной альтернативы. Используемая в операторе case метка может состоять из констант и диапазонов. Диапазоны значений в Паскале — это два крайних значения, написанные через двоеточие. Такая запись эквивалентна перечислению всех целых чисел в данном диапазоне. В общем случае метка может состоять из различных констант и диапазо­нов, разделенных запятыми, например, допустима такая метка: 4, 8 10, 12, 14 16. В качестве селектора нельзя использовать логические результаты сравнения чисел (условия), поэтому использованные в операторах if нера­венства здесь неприменимы.

Часть оператора case, состоящая из слова else и последнего альтернатив­ного варианта, является необязательной, она выполняется в том случае, если вычисленный в программе селектор не соответствует ни одной из перечис­ленных выше альтернатив. Если эта часть оператора case отсутствует, а се­лектор не подходит ни под одну из альтернатив, то оператор case не выпол­нит никаких действий. Завершается оператор case обязательным словом end;

Пример. С использованием оператора case наша программа приобрета­ет следующий вид

Program Dialog;

const

Question =' What is your name?';

Replyl =

'Паскаль — прост, но первый компилятор Паскаля был написан на Паскале';

Reply21 = 'Вас ждет удивительное путешествие';

Reply22 = 'сквозь джунгли особенностей и возможностей языка';

ReplyS =

'Паскаль — разумный компромисс между желательным и эффективным';

Reply4 = 'Паскаль академически элегантен';

var

Name: string;

Age: byte;

begin

WriteLn(Question); ReadLn(Name);

WriteLn('Hello,', Name,'!');

WriteLn('Howold are you?'); ReadLn(Age);

case Age of

0 11 :WriteLn(Reply1);

12 19 : begin WriteLn (Reply21); WriteLn (Reply22) end;

20 39: WriteLn(Reply3);

40 150:WriteLn(Reply4)

else WriteLn('Bbi ошиблись при вводе')

end

end.

Переменная Age играет роль селектора. В зависимости от значения дан­ной переменной происходит дальнейшее ветвление программы. В нашем примере в качестве альтернатив применяются диапазоны значений, по­скольку нельзя использовать результаты сравнения чисел, как в предыду­щей программе. Исходные неравенства заменены диапазонами. Например, проверка логического условия Age < 12 заменена проверкой принадлежно­сти диапазону 0 11.

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

If Ready then Exam_ok := true;

Идеальная логика эквивалентности:

If Ready then Exam_ok := true else Exam_ok := false;

Управление вычислительным процессом, цикл for

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

Естественный алгоритм для решения такой задачи:

(1) обозначим искомую сумму S и присвоим ей значение, равное нулю;

(2) последовательно N раз вычислим слагаемые ряда и прибавим их к переменной S.

Многократные повторения одних и тех же действий можно выполнить с помощью конструкций, которые в программировании называются цикла­ми. Повторяемые действия называются телом цикла. В Паскале существует несколько операторов цикла. Оператор for повторяет тело цикла заданное число раз. Он имеет следующие синтаксические формы:

for < счетчик цикла> := < первое значение> to < последнее значение> do

<тело цикла>;

for < счетчик цикла> := < первое значение>

downto < последнее значение> do <тело цикла>;

Счетчик цикла — это переменная одного из порядковых типов (из по­рядковых типов мы пока знаем только целые и логический тип, в главе 7 понятие порядкового типа будет расширено). Назначение этой переменной очевидное — она хранит число повторений операторов тела цикла, сле­дующего за словом do. Значение счетчика цикла изменяется автоматически от первого до последнего значения и увеличивается на единицу для первой формы записи (с оператором to) или уменьшается на единицу для второй формы записи (с оператором downto). Дополнительные изменения значе­ния счетчика цикла в части, обозначенной здесь как <тело цикла>, запреще­ны. В качестве первого и последнего значения могут использоваться кон­кретные числа, другие переменные целого типа, вычисленные ранее, и вы­ражения, имеющие значения целого типа.


Страница: