Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
технологии программирования.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.25 Mб
Скачать

Структурные операторы

     Структурные операторы — это конструкции, построенные по опреде­ленным правилам из других операторов. К структурным операторам относятся:

  • составной оператор;

  • условный оператор;

  • операторы выбора;

  • операторы цикла;

  • оператор доступа 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.       Указание: использовать селектор символьного типа.

     

 Оператор доступа

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

     with <имя объекта> do <оператор>;

     Для обращения к составной части объекта можно не указывать имя этого объекта в операторе, расположенном после слова do, т.к. оно уже задано после слова with .

     Пример.

     // Составные имена пишутся полностью

     Form1.Canvas.Pen.Color := clRed ;

     Form1.Canvas.Pen.Width:=5;

     Form1.Canvas.Rectangle(10, 10, 100, 100);

Или

     WithForm1.Canvas do

     begin

        Pen.Color:=clRed;

        Pen.Width:=5;

        Rectangle (10, 10, 100, 100);

     end ;

     В обоих приведенных примерах на форме красным пером толщиной пять пикселей рисуется прямоугольник. Для обращения к свойствам и методу (процедуре) рисования формы удобно использовать оператор доступа (второй вариант).