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

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



Для программирования разветвлений в алгоритме чаще всего используется условный оператор if…then или if…then…else.













































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



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



Этот оператор имеет следующую форму: 



case <выражение> of 



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

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

……………………………………… 

значение n: оператор n; 



else begin

            операторы ветви else;

  end; 

end;

 

В этой конструкции операторы могут быть составными, <выражение> должно быть порядкового типа, т.е. integer, char, boolean. 



Тип <значение> должен совпадать с типом <выражение>, может быть одно или несколько, разделенных запятыми, а также может представлять собой 

некоторый диапазон значений.



 Вся конструкция должна завершаться ключевым словом end. 



Ветвь else вместе с оператором может отсутствовать.



Оператор работает следующим образом: 



1. вычисляется значение <выражения>. 



2. выполняется оператор, метка которого <значение> совпадает со значе-нием <выражение>. 



3. Если ни одно<значение> не совпадает со значением <выражение>, вы-полняется оператор после else.



























































Примеры:

Пример использования инструкции case для организации меню (схема)



program menu1;

var

     vybor:integer;

begin

     writeln('1 - Максимальная температура');

     writeln('2 - Минимальная температура');

     writeln('3 - Средняя температура');

     writeln;

     writeln('Введите номер задачи и нажмите <Enter>');

     write('Ваш выбор -> ');

     readln(vybor);

     case vybor of

         1:   begin

                   { вычисление максимальной температуры }

              end;

         2:   begin

                   { вычисление минимальной температуры }

              end;

         3:   begin

                   { вычисление средней температуры }

              end;

     end;

end.































С клавиатуры вводим номер месяца и компьютер определяет время года



program Prim2;

uses CRT;

var month: integer;

begin

      writeln('Введите номер месяца и нажмите  <Enter>');

      write('->');

      readln(month);

      case month of

       1,2,12 : writeln('ЗИМА');

       3,4,5  : writeln('ВЕСНА');

       6,7,8  : writeln('ЛЕТО');

       9,10,11: writeln('ОСЕНЬ');

      else writeln('Число должно быть от 1 до 12');

      end;

      readln;

end.





































































3. Написать программу, которая вычисляет стоимость междугороднего телефонного разговора. 

Формула:  цена минуты * количество минут разговора

(в зависимости от кода города – цена минуты разная)



program Prim3;

uses CRT;

var

    kod: integer;

    cena: real;

    dlit: integer;

    summ: real;

begin

       writeln('Вычисление стоимости разговора по телефону');

       writeln('Введите исходные данные:');

       write('код города ->');

       readln (Kod);

       write('Длительность разговора (целое количество минут ->');

       readln(dlit);

       write('Код города: ');

       case kod of

          432: Begin

                writeln('Владивосток');

                cena:=2.2;

               end;

          495: begin

                writeln('Mocквa');

                cena:=1;

               end;

          815: begin

                writeln('Мурманск');

                cena:=1.2;

               end;

          812: begin

                writeln('Санкт - Петербург');

                cena:=0.00000;

                Writeln('У нас бесплатно');

               end;

          846: begin

                writeln('Caмapa');

                cena:=1.4;

               end;

        end;

        summ:= cena * dlit;

        writeln('Цена минуты:', cena:6:2,'pyb.');

        writeln('Стоимость разговора:',summ:6:2,' pyb.');

        readln;



readln;

end.

































































































4.  Написать программу, которая вычисляет дату следующего дня. Рекомендуемый вывод на экран:





Введите цифрами сегодняшнюю дату (число месяц год) -> 31 12 2010

Последний день месяца!

С наступающим Новым годом!

Завтра 1.1.2011



Program Prim4;

Uses Crt;;



var

     day:integer;

     month:integer;

     year:integer;



     last:boolean;{TRUE, если текущий день  последний день месяца }

     r:integer;   {если год високосный, то остаток от деления year 	                 на 4 равен нулю }

begin

     writeln;

     writeln('Задайте цифрами сегодняшнюю дату');

     write('(  число месяц год  )-> ');

     readln(day,month,year);

     last:=FALSE;

     case month of

         1,3,5,7,8,10,12:if day=31

                            then last:=TRUE;

         4,6,9,11: if day=30

                          then last:=TRUE;

         2: if (day=28)

                            then begin

                                r:=year mod 4;

                                if r<>0 then

                                last:=TRUE;

                            end;

      end;

      if last  

              then begin

              writeln('Последний день месяца!');

              day:=1;

              if month=12

                  then begin

                       month:=1;

                       year:=year + 1;

                       writeln('С наступающим Новым годом!');

                  end

                  else month:=month + 1;

      end

         else day:=day + 1;

      writeln('Завтра ',day,'.',month,'.',year );

end.



5.  Написать программу, которая после введённого с клавиатуры числа (в диапазоне 0т 1 до 99, обозначающего денежную единицу, дописывает слово РУБЛЬ в правильной форме: 12 рублей, 21 рубль и т.д.



Uses Crt;

var

n: integer; {число}

m: integer; {остаток от деления n на 100 (последние 2 цифры) }

r: integer; {остаток от деления n на 10 (последняя цифра) }

begin

    writeln ('введите целое число(от 1 дo 999) ', 'и нажмите <Enter> ');

write ('-> ');

readln(n);

write (n, ' ');

{окончание определяется двумя последними цифрами }

if n>100

then m:= n mod 100;

if (m>= 11) and (m<= 14)

then

writeln ( 'рублей' )

else begin

r:=n mod 10;

case r of

0, 5..9: writeln ('рублей');

   1:    writeln ('рубль');

                                 2..4: writeln ('рубля');

end;

end;

readln;

end.