Вложенное ветвление (сложное)

Реализация сложного вложенного ветвления осуществляется при помощи синтаксических конструкций.

if (условие1) оператор1;

if (условие2) оператор2;

else оператор3;

Else оператор4;

В данное схеме есть классическое ветвление, у которого по внешней ветви при истинности условия есть еще внутреннее ветвление, т.е. дополнительные условия при истинности условия1.

Приведенная схема не является единственной. Более того, возможно множество комбинаций полных и сокращенных ветвлений внутри одного сложного разветвления. Например:

if (условие1) оператор1;

if (условие2) оператор2;

else оператор4;

Здесь при истинном условии1 есть дополнительный фильтр в виде сокращенного ветвления по условию2.

В следующей программе реализовано вычисление: является ли вычисленное Sin(x)>=0 одновременно равным Sin(x)<2.5. Значение х задано инициализатором.

. . . . . .

double x=1.0; bool f; // х задано при описании

f = (Math.Sin(x) >= 0) && (Math.Sin(x) < 2.5); // логическое условие с && - логическим //умножением

Console.WriteLine(" Итак:");

if ( f)

Console.WriteLine(" True x {0,5:f2} {1,7:f3} {2}", x, Math.Sin(x), f);

else

Console.WriteLine(" False x {0,5:f2} {1,7:f3} {2}", x, Math.Sin(x), f);

В результате выполнения логического умножения истинно значение выражения в случае, если обе части выражения имеют значение «истина». Программа включает классические варианты ветвления, имеющие ветви «да» и «нет». При вычислении синуса используются методы библиотеки Math. Обращение к методу класса в программе производится через имя класса: Math.Sin(x)

Следующая программа демонстрирует вычисление значения функции G=F(X,Y)

| true, если точка с координатами (X,Y) попадает в фигуру

G = <

| false, если точка с координатами (X,Y) не попадает в фигуру

Фигура - сектор круга радиусом R в диапазоне углов 270<= fi <=45

using System; //пространство имен

class Operator

{

public static void Main()

{const double R = 2.8; //Радиус

double x, y; //Координаты точки

bool g; //Значение функции

char rep; //Признак повторного выполнения

string str; //Строка для приема данных и вывода данных

Console.Clear(); // очистили экран

Console.Write("Введите X: "); // вывод строки на экран

str = Console.ReadLine(); //чтение строки с экрана

x = double.Parse(str); // конвертация значения из строки в вещественное число

Console.Write("Введите Y: ");

str = Console.ReadLine();

y = double.Parse(str);

if (x * x + y * y <= R * R) //в круге

if (x >= 0) //и справа от оси Y

if (y <= x) //и ниже прямой y = x

g = true; // в фигуре

else //и выше прямой y = x

g = false; // не в фигуре

else //и слева от оси Y

g = false; // вне фигуры

else //вне круга

g = false; //вне фигуры

str = string.Format("G({0:f3},{1:f3}) = {2}", x, y, g);

Console.WriteLine(str);

} //Конец определения метода

} //Конец объявления класса

В программе имеется вложенное ветвление. Внешнее ветвление позволяет определить, в пределах круга точка или нет? Если да, то определяем попадание точки в сектор круга. Таким образом, исключаются излишние проверки в случае, если точка вне круга. Обращаем ваше внимание: цвета в данном исходном коде полностью соответствуют среде программирования: синий – ключевые слова, зеленый – комментарии, голубой – имена классов, красный – форматы вывода.

Теперь рассмотрим программу, определяющую попадания точки в кольцо, образуемое двумя окружностями с радиусами r и R. Условия для попадания в кольцо для точки с координатами x и y можно записать так: (x2+y2>r2) И (x2+y2<R2)

Из условия видно, то учитываются только внутренние точки кольца, поскольку записаны строгие условия больше и меньше. Программа, решающая такую задачу будет выглядеть так.

double x, y;

double r = 1.0, R = 3.0;

Console.WriteLine(" Попадание точки в кольцо: ");

Console.WriteLine(" Введите координаты (x,y): ");

x = double.Parse(Console.ReadLine());

y = double.Parse(Console.ReadLine());

if ( ((x*x+y*y)>r*r) && ((x*x+y*y)<R*R) )

Console.WriteLine("YES {0} {1}",x,y);

Else

Console.WriteLine(" NO {0} {1}",x,y);

Наши рекомендации