Оператор выбора 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.
|