Цели:

  1. Сформировать понятие о составном операторе;
  2. Получить навыки использования операторных скобок;
  3. Закрепить знания и умения по составлению программ на ветвления;
  4. Познакомиться со структурой оператора выбора;
  5. Научиться использовать оператор выбора.

Операторные скобки

После служебного слова then, или после служебного else будет выполняться только один оператор. Если необходимо, чтобы выполнялось несколько операторов их нужно взять в операторные скобки:


                begin
                    ...
                end;
            

Группу операторов, находящуюся внутри операторных скобок, будем называть составным оператором. Фактически, весь раздел операторов, внутри операторных скобок, представляет собой один составной оператор.

Для того, чтобы при большом количестве операторных скобок, программа была более читаемая, end желательно записывать под begin.

|| Даны действительные числа x, y (x≠y). Меньшее из этих двух чисел заменить их суммой, а большее - их произведением.


                program zadacha3_8;                                        // название программы
                var
                    a, b, sa, sb: longint;                                 // описание переменных
                Begin                                                      // начало
                    writeln('Введите два числа');                          // вывод сообщения
                    readln(a,b);                                           // ввод a, b
                    sa:=a;                                                 // sa присваивают значение переменной a
                    sb:=b;                                                 // sb присваивают значение переменной b
                    if a>b then                                            // если a>b, то
                        begin
                            b:=sa+sb;                                      // b присвоить значение суммы sa и sb
                            a:=sa*sb;                                      // a присвоить значение произведения sa и sb
                        end
                    else                                                   // иначе
                        begin
                            a:=sa+sb;                                      // a присвоить значение суммы sa и sb
                            b:=sa*sb;                                      // b присвоить значение произведения sa и sb
                        end;
                    writeln ('первоначальные числа a=',sa,'  b=',sb);      // вывод результата
                    writeln ('полученные числа a=',a,'  b=',b);
                End.                                                       //конец
            

|| Составить программу решающую квадратное уравнение вида ax2+bx+c=0.


                program zadacha3_9;                                        // название программы
                var                                                        // описание переменных
                    a, b, c: integer;
                    x, d, x1, x2: real;
                Begin                                                      // начало
                    writeln('введите  коэффициенты  а,b,c');               // вывод сообщения
                    readln(a, b, c);                                       // ввод a, b, c
                    d:=sqr(b)-4*a*c;                                       // вычисление  дискриминанта
                    if d<0 then writeln('уравнение  не  имеет  корней');   // проверка условий, если d<0, то выводим сообщение что 'уравнение  не  имеет  корней'
                    if d=0 then                                            // если d=0, то ищем 1 корень и его выводим
                        begin
                            writeln('уравнение  имеет  1  корень');
                            x:=-b/(2*a);
                            writeln('x= ',x);
                        end;
                    if d>0 then                                            // если d>0, то ищем корни уравнения и выводим их
                        begin
                            writeln('уравнение  имеет  2 корня');
                            x1:=(-b+sqrt(d))/(2*a);
                            x2:=(-b-sqrt(d))/(2*a);
                            writeln('x1= ',x1);
                            writeln('x2= ',x2);
                        end;
                End.                                                       //конец
            

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

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

Структура оператора выбора такова:


                case <ключ выбора> of
                   <список выбора>
                   [else <операторы>]
                end;
            
Рассмотрим несколько примеров:

|| Вводиться число от 1 до 4, определяющее пору года. Дать название этой поры года (1 - зима, 2 - весна, 3 - лето, 4 - осень).


                program zadacha3_10;                                        // название программы
                var 
                    n: byte;                                                // описание переменных
                Begin                                                       // начало
                    writeln('Введите номер поры года');                     // вывод сообщения
                    readln(n);                                              // ввод n
                    case n of                                               // задаем условие выбора
                        1: writeln('зима');                                 // если n=1, то выводим сообщение 'зима'
                        2: writeln('весна');                                // если n=2, то выводим сообщение 'весна'
                        3: writeln('лето');                                 // если n=3, то выводим сообщение 'лето'
                        4: writeln('осень');                                // если n=4, то выводим сообщение 'осень'
                        else                                                // если значение переменной n не совпало ни с одним элементом выбора, то
                            writeln('неправильно ввели номер поры года');   // выводим сообщение 'неправильно ввели номер поры года'
                    end;                                                    // окончание оператора вывода
                End.                                                        //конец
            

|| Составим программу "КАЛЬКУЛЯТОР", которая после ввода двух чисел и одного из знаков +, -, *, / произведёт вычисления, а результат выдаст на экран.


                program zadacha3_11;                                        // название программы
                var                                                         // описание переменных
                    a, b, s: real;
                    sim: char;
                Begin                                                       // начало
                    writeln('Введите два числа');                           // вывод сообщения
                    readln(a, b);                                           // ввод a и b
                    writeln('Введите знак операции');                       // вывод сообщения
                    readln(sim);                                            // ввод sim
                    case sim of                                             // задаем условие выбора
                        '+': s:=a+b;                                        // если sim='+', то находим сумму a и b, и присваиваем полученное значение переменной s
                        '-': s:=a-b;                                        // если sim='-', то находим разность a и b, и присваиваем полученное значение переменной s
                        '*': s:=a*b;                                        // если sim='*', то находим произведение a и b, и присваиваем полученное значение переменной s
                        '/': s:=a/b;                                        // если sim='/', то делим a на b, и присваиваем полученное значение переменной s
                    end;                                                    // окончание оператора выбора
                    writeln ('результат ', a, sim, b,' = ', s);             // выводим результат
                End.                                                        //конец
            

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

Вопросы для повторения:

  1. В каких случаях после служебных слов then и else нужно писать begin … end, а в каких нет?
  2. Что представляет собой составной оператор?
  3. Почему end желательно записывать под begin?
  4. Для чего в задаче 3_8 введены переменные sa, sb?
  5. Сколько строк может быть записано в списке выбора?
  6. Может ли в операторе выбора отсутствовать часть else?
  7. Сформулируйте, что может являться ключом выбора?
  8. Можно ли оператор выбора заменить условным оператором if … then?
  9. Сколько операторов if then понадобилось бы для решения задачи 3_10?

Задания для самостоятельной работы:

  1. Даны действительные числа x, y (x≠y). Меньшее из этих двух чисел заменить их полусуммой, а большее - их удвоенным произведением.
  2. Даны два целых числа M, N. Если M делится нацело на N, то вывести на экран частное от деления, в противном случае - сообщение "M на N нацело не делится".
  3. Даны три числа. Удвоить их, если они упорядочены по возрастанию, иначе отрицательные заменить их модулями.
  4. Дано натуральное число n (n≤9999). Если число четырёхзначное, то получите и выведите перевёртыш этого числа (3528 → 8253), иначе выведите ответ "Число не четырехзначное".
  5. Дано натуральное число n. Если оно двухзначное, то впишите в середину ноль (для 56 → 506), иначе выведите ответ "Число не двухзначное".
  6. Даны натуральные числа k, l (l≤k, l≤8). На клетки (k, l) расположена шахматная фигура "конь". Вывести на экран координаты клеток, на которые может походить данная фигура, при этом учитывайте, что нельзя выходить за пределы доски.
  7. Вводится число от 1 до 15. Вывести данное число, записанное римскими цифрами (I, II, III, IV, V, VI, …, XV);
  8. В спортивных соревнованиях Шарик, кот Матроскин, дядя Фёдор и почтальон Печкин заняли соответственно 1, 2, 3 и 4 места. Составить программу, которая по номеру места выдаёт имя участника соревнований.
  9. Вводиться номер поры года. Вывести названия месяцев для этой поры года (1 – декабрь, январь, февраль, . . .);
  10. Дано натуральное число N (N<20), определяющее сумму денег в рублях. Дать для этого числа наименование: "рубль", "рубля", "рублей";
  11. Дано натуральное число N (N<100), определяющее возраст человека в годах. Дать для этого числа наименование: "год", "года", "лет";
  12. Вводится число от 1 до 7, определяющее день недели. Вывести расписание уроков в вашем классе в этот день.