2. Ветвления
[ Скачать с сервера (36.7 Kb) ]2019-04-05, 8:51 PM

В разветвляющихся программах последовательность выполнения операторов зависит от некоторого условия или условий. Для организации таких программ используют условный оператор и оператор выбора. Кроме них, возможно использование составного оператора, оператора перехода и пустого оператора. Рассмотрим структуру и назначение условного оператора, оператора перехода и составного оператора.

Составной оператор представляет собой последовательность операторов, заключенную в операторные скобки Begin и End. Его назначение состоит в  получении из нескольких операторов одного оператора. Это бывает необходимо для соблюдения синтаксических правил языка.

Условный оператор позволяет выбрать для исполнения один из двух операторов в зависимости от выполнения условия. Он имеет две формы:

1) If  <логическое выражение> Then <оператор> Else <оператор>;  

2) If  <логическое выражение> Then <оператор>;  

Первая форма называется полной,  вторая – неполной. Выполнение: если логическое выражение истинно (имеет значение True), то выполняется оператор, находящийся после Then, иначе (когда выражение ложно, т.е. имеет значение False) – оператор, стоящий после Else (для полной формы), или вообще не выполняется никакого действия (для неполной формы). 

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

Логические выражения бывают простыми и сложными. Простое логическое выражение представляет собой либо условие, содержащее два операнда и одну операцию отношения, либо логическую переменную. Сложное выражение состоит из простых выражений и логических операций Not, And, Or. В этом случае значение логического выражения определяется согласно следующим таблицам истинности (L, L1, L2 – некоторые логические выражения):

Оператор перехода позволяет нарушить естественный порядок выполнения операторов программы и передает управление оператору, помеченному меткой. Не следует увлекаться применением этого оператора, так как это приводит к нарушению понимания логики работы программы. Формат оператора: Goto <метка>; . В качестве метки можно использовать неотрицательное целое число, имеющее не более четырех знаков, или идентификатор. Метки предварительно описываются в разделе объявления меток программы (LABEL). 

 

Пример 2. Даны целые числа. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а иначе – заменить числа нулями.

Program Example_2;

Var Num1, Num2: Integer;

Begin 

Write(‘Введи два целых числа:’);

Readln(Num1, Num2); {ввод двух целых чисел}

If Num1<>Num2 Then {если числа не равны}

   If Num1>Num2 Then {если первое число больше второго}

      Num2:=Num1  {то второму числу даем значение первого}

   Else {иначе – первому числу даем значение второго}

      Num1:=Num2

Else {если числа равны, то заменяем из нулями}

  Begin {применяем составной оператор, так как надо выполнить 2 оператора}

     Num1:=0; Num2:=0

  End;

Writeln(‘Первое число=’,Num1,’  Второе число=’,Num2) {вывод результатов}

End.

 

Пример 3. Вычислить кратчайшее расстояние от заданной точки с координатами (X,Y) до границы фигуры (см. рисунок), если:

a) точка находится вне фигуры (Для точки, находящейся внутри фигуры, выдать соответствующее сообщение.);

b) точка находится внутри фигуры (Для точки, находящейся вне фигуры, выдать соответствующее сообщение.).

Program Example_3a;

Var X, Y, R, S: Real; {X, Y – координаты точки, R - кратч. расстояние}

Begin

Write(‘Введи координаты точки’);

Readln(X,Y);

S:=X*X+Y*Y; {S – вспомогательная переменная}

If (S>100) And Not ((X>0) And (Y>0)) Then 

   R:=Sqrt(S)-10 {2, 3, 4 четверти и вне круга с радиусом 10 }

Else

  If S<25 Then

     R:=5-Sqrt(S) {Внутри окружности с радиусом 5}

  Else

     If (X>10) Or (Y>10) Then {за пределами квадрата со стороной 10}

         If (Y<10)  Then

            R:=X-10

         Else 

             If X>10 Then

                R:=Sqrt(Sqr(X-10)+Sqr(Y-10))

             Else

                R:=Y-10

     Else

         R:=0; {для точки внутри фигуры}

If R>0 Then

   Writeln(‘Кратчайшее расстояние до фигуры равно ’, R:6:2)

Else

  Writeln(‘Точка находится внутри фигуры’)    

End.

 

Program Example_3b;

Label Metka;

Var X, Y, R, S: Real;

Begin

Write(‘Введи координаты точки’);

Readln(X,Y);

   S:=X*X+Y*Y;

If (S>=25) And (S<=100) And ((X<0) Or (Y<0)) Then

{В кольце, находящемся. в 2, 3 и 4 четвертях}

  If  (10-Sqrt(S)) < (Sqrt(S)-5) Then 

     R:=10-Sqrt(S)

  Else

    R:= Sqrt(S)-5

Else

  If (X>=0) And (Y>=0) And (X<=10) And (Y<=10) And (S>=25) Then

  {Остальная часть фигуры}

    Begin

       If  (10-X) < (10-Y) Then

          R:=10-X

      Else

         R:=10-Y;

     If (Sqrt (S) - 5) < R Then

       R:=Sqrt (S) - 5

   End

Else

  Begin

    Writeln(‘Точка находится вне фигуры’);

   Goto Metka

End;

If R=0 Then

   Writeln(‘Точка находится на границе фигуры’)

Else

  Writeln(‘Кратчайшее расстояние до границы фигуры=’,R:6:2);

Metka: End.

Категория: Pascal теория | Добавил: shadrinuro
Просмотров: 195 | Загрузок: 2 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar