Вложенное ветвление (сложное)
Реализация сложного вложенного ветвления осуществляется при помощи синтаксических конструкций.
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);