Определение четверти на координатной плоскости в Pascal
Всем известна прямоугольная (декартова) система координат, в которой две перпендикулярные оси делят плоскость на четверти. В первую четверть попадают точки, у которых обе координаты (x и y) больше нуля. Во вторую: x < 0, y > 0; в третью: x < 0, y < 0; в четвертую: x > 0, y < 0.
Требуется написать программу, определяющую по координатам точки, в какой четверти она находится. Координаты точки вводятся с клавиатуры.
Примеры выполнения программы:
x = 4 y = 5 Четверть I
x = -3 y = 5 Четверть II
x = -4 y = -10 Четверть III
x = 5 y = -1 Четверть IV
x = 0 y = 4 Точка лежит на оси
Программа на языке Паскаль (1 вариант)
var x, y: integer; begin write('x = '); readln(x); write('y = '); readln(y); if (x > 0) and (y > 0) then writeln('Четверть I') else if (x < 0) and (y > 0) then writeln('Четверть II') else if (x < 0) and (y < 0) then writeln('Четверть III') else if (x > 0) and (y < 0) then writeln('Четверть IV') else writeln('Точка лежит на оси'); end.
Для решения этой задачи уместно использовать условные операторы if-else вложенные друг в друга.
Зачем использовать вложенные if-else, если без них программа будет выглядеть проще и работать также?
Второй вариант решения задачи на языке Pascal
var x, y: integer; begin write('x = '); readln(x); write('y = '); readln(y); if (x > 0) and (y > 0) then writeln('Четверть I'); if (x < 0) and (y > 0) then writeln('Четверть II'); if (x < 0) and (y < 0) then writeln('Четверть III'); if (x > 0) and (y < 0) then writeln('Четверть IV'); if (x = 0) or (y = 0) then writeln('Точка лежит на оси'); end.
Дело в том, что во втором варианте программы поток выполнения будет проверять все ветки if, даже если будет уже известно, что точка принадлежит I или II четверти. Здесь каждая инструкция if никак не зависит от других. Другими словами, такая программа выполняет лишние бессмысленные действия.
В реальном программировании, чтобы избежать "лестницы", которую создают вложенные условные операторы, изменяют стиль написания кода: вложенный if поднимают к обрамляющему его else. С точки зрения компилятора программа ниже ничем не отличается от первого варианта. Она лишь лучше выглядит.
Третий вариант исходного кода
var x, y: integer; begin write ('x = '); readln (x); write ('y = '); readln (y); if (x > 0) and (y > 0) then writeln ('Четверть I') else if (x < 0) and (y > 0) then writeln ('Четверть II') else if (x < 0) and (y < 0) then writeln ('Четверть III') else if (x > 0) and (y < 0) then writeln ('Четверть IV') else writeln ('Точка лежит на оси'); end.