Хелпикс

Главная

Контакты

Случайная статья





Примеры операторов CASE.



17.1.1. Примеры операторов CASE.

 

Операторы CASE особенно полезны с перечислимыми типами. Процедура WriteMonth записывает строковое хначение, соотвествующее значению перечислимого типа Month.

 

PROCEDURE WriteMonth(VAR Fout: TEXT; Mo: Month);

{Fout.3=W and Mo<>NoMonth -->

 записываем три символа соответствущих значению Mo в Fout.1}

BEGIN {WriteMonth}

CASE Mo OF

Jan: WRITE(Fout, ‘Jan’);

Feb: WRITE(Fout, ‘Feb’);

Mar: WRITE(Fout, ‘Mar’);

Apr: WRITE(Fout, ‘Apr’);

May: WRITE(Fout, ‘May’);

Jun: WRITE(Fout, ‘Jun’);

Jul: WRITE(Fout, ‘Jul’);

Aug: WRITE(Fout, ‘Aug’);

Sep: WRITE(Fout, ‘Sep’);

Oct: WRITE(Fout, ‘Oct’);

Nov: WRITE(Fout, ‘Nov’);

Dec: WRITE(Fout, ‘Dec’);

END;

END; {WriteMonth}

 

WriteMonth пердполагает, что Mo было присвоено одно из константных значений типа Month и явно исключает из своей области определения NoMonth. Более robust версия WriteMonth может проверять, что Mo имеет одно из двенадцати значений типа Month перед выполнением оператора CASE.

 

IF Mo IN [Jan .. Dec]

THEN

CASE Mo OF

Jan: WRITE(Fout, ‘Jan’);

Feb: WRITE(Fout, ‘Feb’);

Mar: WRITE(Fout, ‘Mar’);

Apr: WRITE(Fout, ‘Apr’);

May: WRITE(Fout, ‘May’);

Jun: WRITE(Fout, ‘Jun’);

Jul: WRITE(Fout, ‘Jul’);

Aug: WRITE(Fout, ‘Aug’);

Sep: WRITE(Fout, ‘Sep’);

Oct: WRITE(Fout, ‘Oct’);

Nov: WRITE(Fout, ‘Nov’);

Dec: WRITE(Fout, ‘Dec’);

END;

 

Защищая оператор CASE таким способом, программист может быть уверен, что он всегда (на всех Паскаль-машинах) будет выполняться корректно.

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

 

WHILE NOT EOF

DO

BEGIN

READ(Ch);

IF Ch IN [‘+’, ‘-‘, ‘*’, ‘/’]

THEN

CASE Ch OF

   ‘+’, ‘-‘:

     BEGIN

       WRITELN(‘Обнаружен аддитивный оператор’);

       CASE Ch OF

         ‘+’: NumPlus := NumPlus + 1;

         ‘-‘: NumMinus := NumMinus + 1

       END

     END;

   ‘*’, ‘/‘: WRITELN(‘Обнаружен мультипликативный оператор’);

END

ELSE

NumOther := NumOther + 1;

END

 

Обратите внимание на вложенный оператор CASE в котором действия группируются и вновь разбиваются. Похожим образом несколько вариантов неограниченного типа могут быть удобно обработаны:

 

IF AnswerCount <= 1

THEN

CASE AnswerCount OF

0: WRITE(‘There are none.’);

1: WRITE(‘There is 1.’);

END

ELSE

WRITE(‘There are ’, AnswerCount:3)

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.