28628

Операторы с условиями

Лекция

Информатика, кибернетика и программирование

Композиция условий и операторов. Операторы условного перехода. Операторы итерационных циклов.

Русский

2013-08-20

48 KB

5 чел.

Лекция 7: Операторы с условиями.

1. Композиция условий и операторов.

2. Операторы условного перехода.

3. Примеры программ с ветвящейся структурой.

4. Операторы итерационных циклов.

5. Примеры программ с циклами.

1. Композиция условий и операторов.

Простые операторы, несмотря на свою важность, недостаточны для того, чтобы представлять любые алгоритмы задач. Их использование подобно прямолинейному движению автомобиля на трассе. Очевидно, что вы не сможете далеко уехать, если не будете реагировать на светофоры и другие сигнальные знаки, в том числе указывающие на возможные разветвления на трассе. Аналогично обстоит дело и в программировании: прежде чем выполнять соответствующие действия бывает совершенно необходимо проанализировать (и учесть) те или иные условия, представляемые в Паскале как выражения типа Boolean.

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

операторы условного перехода (if-then-else и  if-then) и

операторы  итерационных циклов  (while- do и repeat-until).

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

2. Операторы условного перехода.

Операторы условного перехода имеют следующую синтаксическую структуру:

if  <условие> then  <оператор 1> else <оператор 2>;

if  <условие> then  <оператор >;

Оператор if-then-else выполняется следующим образом: вначале вычисляется значение условия (проверяется условие). Если это значение true - выполняется оператор1, а если значение  условия равно false  - выполняется оператор2. В качестве  оператора1 или оператора2 может быть любой оператор Паскаля (простой или сложный), однако это должен быть один оператор. Если по логике алгоритма необходимо выполнить последовательность из нескольких операторов вместо оператора1 или оператора2, то должен быть использован составной оператор, образуемый заключением последовательности операторов в операторные скобки begin end. Скобки begin end превращают любую последовательность операторов в один оператор.

Оператор if-then является сокращенной формой условного оператора, рассчитанного на тот случай, когда в ветви else используется пустой оператор.

Пустой оператор является одним из простых операторов: он не производит никаких действий и обозначается точкой с запятой (;).

     Замечание

После оператора ветви then (перед ключевым словом else) не должна стоять точка с запятой, т.к. она будет восприниматься как дополнительный (пустой) оператор, что нарушит синтаксическую структуру оператора if-then-else!

В качестве оператора1 или оператора2 в if-then-else может быть использован другой оператор if-then-else. Это - случай вложенных операторов if-then-else. Вложенные операторы if-then-else существенно усложняют читаемость программы, они могут также приводить к неоднозначности их чтения, поэтому следует по возможности избегать использования вложенных операторов if-then-else. Во многих случаях они могут быть заменены оператором выбора из нескольких альтернатив, который мы рассмотрим позднее.

Помимо операторов условного перехода в Паскале имеется также оператор безусловного перехода, имеющий синтаксическую структуру goto <метка>.

Оператор goto относится к числу нежелательных для использования операторов, т.к. способен серьёзно усложнить структуру программы, сделав её подобной "блюду спагетти". По этой причине мы не останавливаемся подробнее на этом операторе. Практически во всех случаях можно избежать использования goto , получая хорошо структурированные программы. Исключение составляет только безусловные переходы, для которых в Турбо Паскале предусмотрены специальные формы:

переход к концу программы - halt;

выход из процедуры или функции - exit;

выход из цикла - break;

переход к началу цикла - continue.

3. Примеры программ с ветвящейся структурой.

Пример программы с операторами if -then-else на Турбо Паскале:

       program quad_eq;

       {Корни квадратного уравнения}

       var a,b,c:real; d,f:real;

       begin writeln('Нахождение корней уравнения A*x*x + B*x + C =0');

             writeln('Введите коэффициенты уравнения:');

             write('A=');read(a); write('B=');read(b);write('C=');read(c);

             writeln('Корни уравнения:');

             if (a=0)  then writeln('Ошибка: А=0 ')

       else begin d:= (b*b -4*a*c); f:=-b/(2*a);

                 if d<0 then writeln('Нет вещественных корней');

                  if d=0 then writeln('X1=X2=',f);

                  if d>0 then writeln('X1=',(f+sqrt(d)/(2*a)):2:3,'  X2=',(f-sqrt(d)/(2*a)):2:3);

                          end;

       end.

4. Операторы итерационных циклов.

Ещё одним видом операторов с условиями являются операторы итерационных циклов. В Турбо Паскале имеются две разновидности таких операторов: оператор с предусловием (оператор while-do) и оператор с постусловием (оператор repeat-until). Синтаксическая структура этих операторов имеет следующую форму:

while < условие > do <оператор >;

repeat  <последовательность операторов > until <условие>;

Итерационный цикл - это цикл, в котором повторяется выполнение некоторого действия до тех пор, пока не будет выполнено некоторое условие.  Он позволяет описывать последовательности (цепочки) вычислений (длина цепочки, возможно, зависит от исходных данных) без явного перечисления этих последовательностей.

В каждом операторе итерационного цикла будем различать условие и тело цикла (повторяющееся действие). Тело цикла while-do  - это один оператор, записанный после do, а для цикла repeat-until - тело цикла может быть и последовательностью операторов, записанных между repeat и until.  

В цикле while-do при входе в цикл вычисляется значение условия. Если условие есть  true - выполняется тело цикла и повторно вычисляется значение условия. Если вычисленное условие окажется false - осуществляется выход из цикла и переход к следующему по порядку оператору программы. Тело цикла - один оператор, поэтому, как и в случае оператора if-then-else , если в теле цикла необходимо выполнить последовательность операторов, её следует заключить в операторные скобки begin end.

В цикле repeat-until при входе в цикл вначале выполняется тело цикла  (последовательность операторов между repeat и until), а затем вычисляется значение условия (стоящего после until). Если условие есть true - производится выход из цикла, если же false - повторяется тело цикла и опять проверяется условие. В цикле repeat-until ключевые слова repeat-until выполняют также и роль операторных скобок.

Резюмируя выполнение операторов while-do  и repeat-until, следует обратить внимание на их различие: для оператора while-do повторение тела цикла происходит при значении условия true, а для оператора repeat-until  при значении условия false. Соответственно выход из цикла while-do происходит при значении условия false, а для цикла repeat-until - при  значении условия true. Во многих случаях более предпочтительной конструкцией является repeat-until т.к. нет необходимости в использовании скобок begin end , однако иногда более простым оператором цикла является while-do (если в алгоритме возможен случай, когда тело цикла не выполнится ни разу).

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

Тело цикла может в свою очередь содержать оператор цикла. В этом случае мы имеем вложенные циклы.

5. Примеры программ с циклами.

Приведем два примера простых программ с итерационными циклами на Турбо Паскале. Первая из этих программ вычисляет разложение вводимого целого числа на простые множители, используя цикл while-do, а вторая - переводит исходное десятичное число в эквивалентное ему двоичное число, используя цикл repeat-until:

     program decompos; {программа разложения числа N на простые множители}

     var N,J:integer;

     begin write('Введите число N='); readln(N);write('N=1');  J:=2;

                while (N>=J) do if (N mod J = 0) then  begin write('*',J); N:=N div J end

                                                                     else J:=J+1; writeln

     end.

   

    program dec_bin;

       {Перевод десятичного числа в двоичное}

       var dec:integer; bin:string;c:char;

       begin write('Введите десятичное число:');read(dec);

                  bin:='';repeat if dec mod 2=1 then c:='1' else c:='0';

                                         bin:=c+bin;dec:=dec div 2;

                             until    dec=0;

                  writeln('Двоичное число:', bin);

       end.


 

А также другие работы, которые могут Вас заинтересовать

10293. Материализм философское мировоззрение 41.99 KB
  Материализм вещественный философское мировоззрение в соответствии с которым материя объективная реальность является онтологически первичным началом причиной условием ограничением а идеальное понятия воля дух и тому подобное вторичным результатом сле
10294. Онтология - раздел философии, изучающий бытие 14.07 KB
  Онтология раздел философии изучающий бытие. Основной вопрос онтологии: что существует Основные понятия онтологии: бытие структура свойства формы бытия пространство время движение. Онтология таким образом представляет собой попытку наиболее общего описания уни
10295. Полемика реалистов и номенолистов 12.4 KB
  Многие характерные особенности средневековой философии проявились в происходившей на протяжении нескольких веков борьбе реализма и номинализма. Реализм в его средневековом понимании не имеет ничего общего с современным значением этого термина. Под реализмом подразуме...
10296. Проблема истины 49.38 KB
  Проблема истины. Истина отражение объекта познающим субъектом воспроизведение его таким каким он предположительно существует сам по себе как бы вне и независимо от познающего субъекта и его сознания. Истиной может называться само знание содержание знания или...
10297. Проблема познаваемости мира 41.73 KB
  Проблема познаваемости мира. Проблема познаваемости мира является одной из важнейших в философии. Она стояла как центральная в Древней Греции в средние века и Новое время особенно остро встала эта проблема в нашем столетии. На всем протяжении развития философи
10298. Философия пространства и времени 46.15 KB
  Философия пространства и времени это раздел философии изучающий вопросы онтологии эпистемологии и сущности пространства и времени. Основные темы включают в частности следующие: существуют ли пространство и время независимо от сознания существуют ли они незави
10299. Рене Декарт - французский философ, математик, физик, физиолог 12.04 KB
  Рене Декарт французский философ математик физик физиолог. Родоначальник рационализма рационалистической методологии в теории познания. Средством познания сделал метод универсального сомнения. Философия Декарта была дуалистической. Он признавал наличие в мире двух...
10300. Сознание - состояние психической жизни человека 13.75 KB
  Сознание состояние психической жизни человека это способность познавать не только истину но и различать добро и зло справедливость и несправедливость прекрасное и безобразное. Термин сознание является трудным для определения поскольку данное слово исполь
10301. Бенедикт Спиноза 13.51 KB
  Бенедикт Спиноза был самым значительным философом. Главные интересы Спинозы были направлены на изучение и разработку философских проблем. Спиноза стремился построить философию на достоверных началах. Основу философской системы Спинозы составляет учение о субстанци...