Мой сайт
Четверг, 21.11.2024, 09:29
» Меню сайта
» Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Составной оператор

     При решении задач часто приходится рассматривать не два, а большее количество вариантов. Это можно реализовать, используя несколько условных операторов. В этом случае после служебных слов Then и Else записывается новый условный оператор. Если в условном операторе после then или после else нужно выполнить несколько операторов, то используют составной оператор – конструкцию вида: 

begin <последовательность операторов> end.

Пример 1. Нахождение корней квадратного уравнения.

program n_11;
var a, b, c: real;   var d: real;   var x, x1, x2: real;
begin
     writeln ('Решение квадратного уравнения');
     write ('Введите коэффициенты a, b, c  >>');
     readn (a, b, c);
     d:=b*b-4*a*c;
     if d<0 then writeln ('Корней нет');
     if d=0 then
           begin
                 x:=-b/2/a;
                 writeln ('Корень уравнения x=', x:9:3)
           end;
     if d>0 then
           begin
                 x1:=(-b+sqrt(d))/2/a;
                 x2:=(-b-sqrt(d))/2/a;
                 writeln ('Корни уравнения:');
                 writeln ('x1=', x1:9:3);
                 writeln ('x2=', x2:9:3)

          end;
 end.

Пример 2. Написать программу, которая по введенному с клавиатуры числу будет определять название месяца, количество дней в месяце и время года.

program number_of_month;
var month:byte;
begin
      write('Введите номер месяца: ');
      readln (month);
     if (month<1) or (month>12) then writeln('Вы ввели неверный номер месяца!')
     else
     begin
          write('Название месяца месяца: ');
          if month=1 then writeln('январь')
          else
               if month=2 then writeln('февраль')
              else
                   if month=3 then writeln('март')
                   else
                       if month=4 then writeln('апрель')
                       else
                           if month=5 then writeln('май')
                           else
                               if month=6 then writeln('июнь')
                               else
                                   if month=7 then writeln('июль')
                                   else
                                      if month=8 then writeln('август')
                                      else
                                          if month=9 then writeln('сентябрь')
                                          else
                                              if month=10 then writeln('октябрь')
                                              else
                                                   if month=11 then writeln('ноябрь')
                                                   else writeln('декабрь');
           end;
     write('Количество дней в месяце: ');
     if (month=1) or(month=3)or(month=5)or(month=7) or (month=8)or(month=10)or(month=12) then writeln('31')
     else
          if (month=4)or(month=6)or(month=9)or(month=11)then writeln('30')
          else  writeln('28 или 29');
   write('Время года: ');
      if (month>=3)and (month<=5)then writeln('весна')
      else
           if (month>=6)and (month<=8)then writeln('лето')
           else
               if (month>=9)and (month<=11)then writeln('осень')
               else  writeln('зима');
End.

    Программа выполняет все заданные условия, но она очень громоздкая. Вы уже заметили насколько этот подход однообразный и утомительный. Язык Паскаль предоставляет для этих целей другую управляющую структуру (оператор выбора case), которая позволяет построить ветвление по ряду условий в форме, более удобной для чтения программ.

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

    Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит так называемый ключ выбора (или селектор) - выражение любого типа (кроме типов REAL и STRING).

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

case выражение of
значение1 : оператор (группа операторов);
значение2 : оператор (группа операторов);
. . . . . . . . . . . . . . . . . . . . . .
значениеN : оператор (группа операторов)
else оператор (группа операторов);
end;

 

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

Может случиться, что в списке выбора не окажется константы равной вычисленному значению ключа. В этом случае управление передается оператору, стоящему за словом ELSE.

Например,

case NUMBER mod 2 of
0 : writeln (NUMBER, ‘- число четное‘)
else : writeln (NUMBER, ‘- число нечетное‘);
end;

 

Если один оператор выполняется при нескольких значениях, то их можно перечислить через запятую.

case MONTH of
1, 2, 3 : writeln (‘Первый квартал‘);
4, 5, 6 : writeln (‘Второй квартал‘);
7, 8, 9 : writeln (‘Третий квартал‘);
10, 11, 12 : writeln (‘Четвёртый квартал‘);
end;

 

Оператором может являться не только простой оператор, но также составной и пустой операторы.

case CODE of
1 : for i := 1 to 5 do
writeln (‘*******‘);
2 : begin {
составной оператор}
x:=sqr(y-1);
writeln (x);
end;
3 : {
пустой оператор}
end;

   

Любому заданному значению селектора соответствует лишь один вход в списке операторов. Константы должны принадлежать тому же типу, что и селектор. Если селектор принимает значение, которому не соответствует ни один вход, то будет выполняться оператор, следующий за словом else. Если же этого оператора нет, то никакие альтернативы не будут выполняться.

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

case Chislo of
0..9 : write (‘Это число является цифрой‘);

Упростим наш второй пример, используя оператор выбора CESE.

program number_of_month;
var month:byte;
begin
   write('Введите номер месяца: ');
   readln (month);
   if (month<1) or (month>12) then writeln('Вы ввели неверный номер месяца!')
      else
      begin
             write('Название месяца месяца: ');
             case month of
             1: writeln('январь');
             2: writeln('февраль');
             3: writeln('март');
             4: writeln('апрель');
             5: writeln('май');
             6: writeln('июнь');
             7: writeln('июль');
             8: writeln('август');
             9: writeln('сентябрь');
             10: writeln('октябрь');
             11: writeln('ноябрь')
              else writeln('декабрь');
     end;

    write('Количество дней в месяце: ');
         case month of

         1,3,5,7,8,10,12: writeln('31');
         4,6,9,11:  writeln('30');
         else writeln('28 или 29');
         end;
    write('Время года: ');
         case month of
         3..5: writeln('весна');
         6..8: writeln('лето');
         9..11: writeln('осень');
         else  writeln('зима');
         end;
   end;
End.

Теперь программа выглядит более компактно и читабельно.

» Вход на сайт
» Поиск
» Календарь
«  Ноябрь 2024  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930
» Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • База знаний uCoz

  • » Инфознайка
    Copyright MyCorp © 2024uCoz