Lektsia_13_Operatory_yazyka


3.6 Операторы языка
Простые операторы
     Простые операторы – это операторы, не содержащие других операторов. К ним относятся:
оператор присваивания;
оператор (безусловного) перехода;
пустой оператор;
оператор вызова процедуры.
     Оператор присваивания является основным оператором языка. Он предписывает вычислить выражение, заданное в его правой части, и присвоить результат переменной, имя которой указано в левой части оператора. Формат оператора присваивания:
     <имя переменной> =: <выражение>;
     Вместо имени переменной можно указывать элемент массива или поле записи . Отметим, что знак присваивания :=отличается от знака равенства = и имеет другой смысл. Знак присваивания означает, что сначала вычисляется значение выражения, а затем оно присваивается указанной переменной. Поэтому при условии, что х является числовой переменной, имеющей оп ределенное значение, допустима следующая конструкция: х:=х+1;
     Примеры. var x, a, b, c, root: real; box : Boolean; name: string;
                      . . .
                     x:=x+5.3; root:= sqrt(b*b-4*a*c);
                     box := False ; name :=’ Ann ’;
     Оператор перехода предназначен для изменения порядка выполнения операторов программы. Он используется в случаях, когда после выполнения некоторого оператора требуется выполнить не следующий по порядку, а какой-либо другой, помеченный меткой оператор. Метка, стоящая перед оператором, отделяется от него двоеточием.
     Напомним, что меткой может быть идентификатор или целое число без знака в диапазоне 0—9999, причем все метки должны быть предварительно объявлены в разделе объявления меток того блока процедуры, функции или программы, в котором эти метки используются. Формат оператора перехода:
     goto <Метка>;
     Пример. Label m 1;
                   . . .
                   goto m1;
                   . . .
              m1: writeln(‘…’);
     Передавать управление с помощью оператора перехода можно на операторы, расположенные в блоке программы выше или ниже оператора перехода. Запрещается передавать управление операторам, находящимся внутри структурных операторов, а также операторам, находящимся в других блоках (процедурах или функциях).
     Внимание! В соответствии с правилами структурного программирования оператор перехода следует использовать как можно реже.
     Пустой оператор представляет собой точку с запятой и может быть расположен в любом месте программы, где допускается наличие оператора. Как и другие операторы, пустой оператор может быть помечен меткой. Пустой оператор не выполняет никаких действий и может быть использован для передачи управления в конец цикла или составного оператора. Пустой оператор можно использовать в тех случаях, когда синтаксис языка предполагает наличие оператора, но никаких действий выполнять не надо.
     Оператор вызова процедуры служит для активизации стандартной или предварительно описанной пользователем процедуры. Он представляет собой имя этой процедуры со списком передаваемых ей параметров. Более подробно этот оператор будет рассмотрен позже.
Структурные операторы
     Структурные операторы — это конструкции, построенные по определенным правилам из других операторов. К структурным операторам относятся:
составной оператор;
условный оператор;
операторы выбора;
операторы цикла;
оператор доступа with.
     Составной оператор представляет собой группу из произвольного числа любых последовательно выполняемых операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками begin и end. Формат составного оператора:
                          begin
                              <оператор_1>;
                              <оператор_2>;
                               . . .
                               <оператор_ n >;
                         end ;
     Независимо от числа входящих в него операторов, составной оператор воспринимается как единое целое и может располагаться в любом месте программы, где допускается наличие оператора. Наиболее часто составной оператор используется в условных операторах и операторах цикла.
     Составные операторы могут вкладываться друг в друга, при этом на глубину вложенности составных операторов ограничений не накладывается.
     Условный оператор обеспечивает выполнение или невыполнение некоторых операторов в зависимости от соблюдения определенных условий. Условный оператор в общем случае предназначен для организации разветвления программы. Формат условного оператора:
     if <условие> then <оператор_1> [ else <оператор_2>];
Условие представляет собой выражение логического типа. Оператор работает следующим образом: если условие истинно (имеет значение true ), то выполняется оператор_1, в противном случае выполняется оператор_2. Оба оператора могут быть составными.
     Условный оператор может быть записан в сокращенной форме, когда слово else и оператор после него отсутствуют.
     Для организации разветвлений на три направления и более можно использовать несколько условных операторов, вложенных друг в друга. При этом каждое else соответствует тому then , которое непосредственно ему предшествует. Из-за возможных ошибок следует избегать большой вложенности условных операторов друг в друга.
Задание 7. Составить программу, которая вводит с клавиатуры три целых числа и, если сумма первых двух больше третьего, но меньше 10, выводит на экран первые 2 числа; в противном случае выводит на экран третье число.
     Оператор выбора является обобщением условного оператора и позволяет сделать выбор из произвольного числа имеющихся вариантов, то есть организовать разветвления на произвольное число направлений. Этот оператор состоит из выражения, называемого селектором, списка вариантов и необязательной ветви else , имеющей тот же смысл, что и в условном операторе. Формат оператора выбора:
           case <Выражение-селектор> of
                   <Список_1>: <0ператор_1>;
                   . . .
                  <Список_ N >: <Оператор_ N >
                  else <Оператор>;
           end ;
Выражение-селектор должно быть порядкового типа. Каждый вариант представляет собой список констант, отделенных двоеточием от относящегося к данному варианту оператора, возможно, составного. Список констант выбора стоит из произвольного количества значений и диапазонов, отделенных друг от друга запятыми. Границы диапазона записываются двумя константами через разделитель «..». Тип констант должен соответствовать типу выражения-селектора.
     Оператор выбора выполняется следующим образом:
1. вычисляется значение выражения селектора;
2. производится последовательный просмотр вариантов на предмет совпадения значения селектора с константами и значениями из диапазонов соответствующего списка;
3. если для очередного варианта этот поиск успешный, то выполняется оператор этого варианта. После этого выполнение оператора выбора заканчивается;
4. если все проверки оказались безуспешными, то выполняется оператор, стоящий после слова else (при его наличии).
Примеры .
а ) case i of                        б ) case NumberDay of
             1: z:= i+10;                        1..5 : strDay:=’Work’;
             2: z:= i+100;                      6, 7 : strDay:=’Rest’
             3: z:= i+100;                             else strDay:=’ ‘;
    end ;                                  end ;
Задание 8. Составить программу, которая при вводе с клавиатуры номера месяца выводит на экран сообщение: «Ученье – свет!» для всех месяцев, кроме июля и августа. Для июля и августа сообщение должно быть: «Ура! Каникулы!». При вводе числа за пределами диапазона 1..12 должно появляться сообщение: «В году 12 месяцев!».
Указание: использовать селектор интервального типа.
     Операторы цикла используются для организации циклов (повторов). Цикл представляет собой последовательность операторов, которая может выполняться более одного раза. Группу повторяемых операторов называют телом цикла. Всего имеется три вида операторов цикла:
с параметром;
с предусловием;
с постусловием.
     Обычно, если количество повторов известно заранее, то применяется оператор цикла с параметром, в противном случае – оператор с пост- или предусловием. Выполнение оператора цикла любого вида может быть прервано с помощи оператора перехода goto или предназначенной для этих целей процедуры Break, которая передает управление на оператор, следующий за оператором цикла. С помощью процедуры Continue можно задать досрочно t завершение очередного повторения тела цикла, что равносильно передач t управления в конец тела цикла.
     Операторы циклов могут быть вложенными друг в друга.
Оператор цикла с параметром
Оператор цикла с параметром имеет два формата:
     for <Параметр>:= <Выражение1> to <Выражение2> do <0ператор>;
и
     for <Параметр>:= <Выражение1> downto <Выражение2> do <0ператор>;
     Параметр цикла представляет собой переменную порядкового типа, которая должна быть определена в том же блоке, где находится оператор цикла; выражение1 и выражение2 являются, соответственно, начальным и конечным значениями параметра цикла и должны иметь тип, совместимый с типом параметра цикла.
     Оператор цикла обеспечивает выполнение тела цикла, которым является оператор, расположенный после слова do , до полного перебора всех значений параметра цикла от начального до конечного с соответствующим шагом. Шаг параметра всегда равен 1 для первого формата цикла и -1 – для второго формата. То есть значение параметра последовательно увеличивается или уменьшается на единицу при каждом повторении цикла.
     Цикл может не выполниться ни разу, если для цикла for ... to значение начального выражения больше конечного, а для цикла for ... downto значение начального выражения меньше конечного.
     Примеры. var i, j: integer;   ch: char;
                      begin
                         for i:=10 to 14 do write(i:4);  writeln;
                         for j:=14 downto 10 do write(j:4); writeln;
                         for ch:=’a’ to ‘e’ do write(ch:3);
                      end;
Результат: 10 11 12 13 14
                   14 13 12 11 10
                   a b c d e
Оператор цикла с постусловием
     Оператор цикла с постусловием целесообразно использовать в тех случаях, когда тело цикла необходимо выполнить не менее одного раза и заранее неизвестно общее количество повторений цикла. Формат оператора:
       Repeat
           <0ператор1>;
            . . .
           <0ператор N >;
        until <условие>;
     Условие – это выражение логического типа. Операторы, заключенные между словами repeat и until, составляют тело цикла и выполняются до тех пор, пока логическое выражение не примет значение true. То есть тело цикла повторяется при значении логического выражения, равном false. Поскольку условие проверяется в конце цикла, то операторы тела цикла выполняются, как минимум, один раз.
     В теле цикла может находиться произвольное число операторов без операторных скобок begin и end . По крайней мере, один из операторов тела цикла должен влиять на значение условия, в противном случае произойдет зацикливание.
Примеры.
а ) d:=1; s:=0;                         б ) d:=1; s:=0;
     repeat                                     repeat
        s:=s+d                                    s:=s+d;
     until ( d >100);                          d := d +1;
//бесконечный цикл                    until ( d >100);
Оператор цикла с предусловием
     Оператор цикла с предусловием целесообразно использовать в случаях, когда число повторений тела цикла заранее неизвестно и тело цикла может не выполняться. Во многом этот оператор аналогичен оператору repeat ... until , но проверка условия выполняется в начале оператора. Формат оператора цикла с предусловием:
     While <условие> do <0ператор>;
     Оператор тела цикла выполняется до тех пор, пока логическое выражение не примет значение false, то есть, в отличие от цикла с постусловием, цикл выполняется при значении логического выражения true.
     Пример. i:=30;
                   While (i<40) do i:=i+1; // если (i>40) ? – ни разу
                   Write(i); // если (i>10) ? – бесконеч .
     Если перед первым выполнением цикла условие не выполняется (значение логического выражения равно false ), то тело цикла вообще не выполняется и происходит переход на оператор, следующий за оператором цикла.
       Задание 9. Составить программу для решения методом Крамера СЛАУ 2×2 с произвольными целыми коэффициентами. В случае линейно-зависимых уравнений системы предусмотреть вывод сообщения “Infinitely many solutions”.
      Задание 10. Составить программу, которая вводит с клавиатуры целые числа до тех пор, пока их сумма не станет больше 100. Эту сумму и число слагаемых вывести на экран.
      Задание 11. Составить программу, которая вычисляет y=sin x при 2≤x≤4 с шагом h=0,2 и  выводит на экран:а) все значения x и sin x;б) только те x и y, для которых sin x<0,2;в) только те x и y, для которых 0,2<sin x<0,6.      Указание: использовать селектор символьного типа.
     

Приложенные файлы

  • docx 18379506
    Размер файла: 25 kB Загрузок: 0

Добавить комментарий