Определение четверти на координатной плоскости
Всем известна прямоугольная (декартова) система координат, в которой две перпендикулярные оси делят плоскость на четверти. В первую четверть попадают точки, у которых обе координаты (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.