Программирование на Turbo Pascal




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


В Turbo Pascal есть конструкция if условие then действие else... Иногда эта конструкция бывает неудобна при выборе значений из большого числа однотипных данных.
Рассмотрим пример такой программы калькулятора: вводится одно число, вводится знак операции, вводится второе число. В зависимости от введённого знака операции вычисляем и получаем результат. Кроме арифметических операций + - / *, примем знак ^ - возведение в степень и символ q - вычисление корня. Код программы будет таким:
uses crt;
var
  x,y,z: real;
  c: char;
begin
  clrscr;
  write('Wwedi x: ');
  readln(x); {Первое число или основание}
  write('Wwedi znak: ');
  readln(c); {Знак операции}
  write('Wwedi y: ');
  readln(y); {Второе число или показатель}
{В зависимости от введённого знака производим вычисления}
  if c = '+' then z:= x + y;
  if c = '-' then z:= x - y;
  if c = '*' then z:= x * y;
  if c = '^' then z:= exp(y*ln(x));
  if c = 'q' then
begin
  y:= 1/y;
  z:= exp(y*ln(x));
end;
  writeln('rezultat = ',z:0:4);
  readln;
end.
Запустим программу и вычислим, например, корень 5-й степени из 16807:


Программа работает, но код программы можно записать проще, если использовать оператор выбора case.
Оператор записывается следующим образом:

Case переменная перечислимого типа of
Значение 1 : действие 1;
Значение 2 : действие 2;
...
Значение n : действие z;
End;
{завершение case}
К перечислимым типам относятся все числовые переменные целого типа и переменны типа char.
В нашей программе выбор при помощи оператора if можно заменить выбором case.
case c of
  '+' : z:= x + y;
  '-' : z:= x - y;
  '*' : z:= x * y;
  '^' : z:= exp(y*ln(x));
  'q' : begin y:= 1/y; z:= exp(y*ln(x)); end;
end;
Такая запись компактна и выглядит более понятно. Оператор case обладает ещё многими уникальными свойствами, например, если нужно произвести одно действие при выборе нескольких значений можно записать так:
Значение 1, Значение 2, ..... Значение n : действие;
Значения перечисляются через запятую, например в нашей программе можно записать:
'q' , 'Q' : begin y:= 1/y; z:= exp(y*ln(x)); end; - при такой записи пользователю программы не придётся заботиться о состоянии регистра букв при вводе символа q.
Так же, оператор case позволяет задавать диапазон значений, при условии, что символьные значения имеют нарастающую последовательность в таблице символов, и в случае целых чисел - числа имеют так же, нарастающую последовательность.
Между начальным и конечным значением ставится две точки.
Например, программа по подсчёту числа прописных и строчных символов в строке, а также числа символов, будет иметь всего несколько строчек:
uses crt;
var
  s: string;
  c: char;
  n, lc, bc, sc: integer;
begin
  clrscr;
  write('Wwedi stroky: '); readln(s);
  lc:= 0; bc:= 0; sc:= 0;
for n:= 1 to length(s) do
begin
  c:= s[n];
  case c of
  'a' .. 'z' : inc(lc);
  'A' .. 'Z' : inc(bc);
  '!', '.', ':', '?' : inc(sc);
end; {case}
end; {for}
  writeln('Malenkie: ', lc);
  writeln('Bolsye: ', bc);
  writeln('Sibols: ', sc);
readln;
end.



   ©Гуков Константин Михайлович 2006 - 2011     Почта: [email protected]