Определение четверти на координатной плоскости | Язык Паскаль
Pascal. Основы программирования Сложные Средние Простые задачи

Определение четверти на координатной плоскости

Всем известна прямоугольная (декартова) система координат, в которой две перпендикулярные оси делят плоскость на четверти. В первую четверть попадают точки, у которых обе координаты (x и y) больше нуля. Во вторую: x < 0, y > 0; в третью: x < 0, y < 0; в четвертую: x > 0, y < 0.

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

Для решения этой задачи уместно использовать условные операторы if-else вложенные друг в друга.

Программа на языке Паскаль (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.

Примеры выполнения программы:

x = 4
y = 5
Четверть I
x = -3
y = 5
Четверть II
x = -4
y = -10
Четверть III
x = 5
y = -1
Четверть IV
x = 0
y = 4
Точка лежит на оси

Зачем использовать вложенные 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.