Не могу найти ошибку в коде c++, который ищет зону на графике по координате

Многие координаты отображает неправильно и я искренне не понимаю, что не так. В какие-то моменты код выводит зону вообще вне условия. Образно написано if (y < 0) z = 45, но 45 выводит при координате y > 0. Помогите пожалуйста найти ошибки...

Тз: Разработать консольное Win32 приложение для определения номера зоны на диаграмме, в которую попала точка, введенная пользователем. Пользователь вводит с клавиатуры координаты X и Y некоторой точки. Определить в какую из зон, согласно приведенной ниже диаграмме, в соответствии со своим вариантом с попала точка. Если точка попадает на границу зон, отнести ее к зоне с большим номером.

вот сам график с зонами

Мой код:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    setlocale(LC_ALL, "");

    double x, y, f1, f2, f3, f4, z;
    int i;
    i = 100;
    for (i; i > 0; i--) {
        cout << "введите координату по x [-3; 3]: ";
        cin >> x;
        cout << "введите координату по y [-3; 3]: ";
        cin >> y;

        if ((x > 3) || (x < -3) || (y > 3) || (y < -3)) cout << "Чел, ты... Написала же, что промежуток [-3; 3]";
        else {
            f1 = -sqrt(x);
            f2 = -(x * x) - 1;
            f3 = ((x * x) / 4) + y * y;
            f4 = x - 1;

            // if ((y > - x * x - 1) && (y < - sqrt(x) && ((x * x) / 4 + )) cout << 1;

            if ((x == 0) && (y == 1)) z = 21;
            else if ((x < 0) && (y > 1)) z = 6;
            else if ((x > 0) && (y > 1)) {
                if (y >= f4) z = 5;
                else z = 4;
            }
            else if ((x < 0) && (0 < y <= 1)) {
                if (f3 > 1) z = 7;
                else z = 20;
            }
            else if ((x > 0) && (0 < y <= 1)) {
                if (y >= f4) {
                    if (f3 >= 1) z = 21;
                    else z = 19;
                }
                else {
                    if (f3 > 1) z = 3;
                    else z = 18;
                }
            }
            else if (y < 0) {
                if (x < 0) {
                    if (f3 <= 1) z = 12;
                    else {
                        if ((y > f4) && (y > f2)) z = 8;
                        else if ((y <= f2) && (y <= f4)) z = 13;
                        else if (y < f4) {
                            if (y < f2) z = 10;
                            else z = 9;
                        }
                    }
                }
                else if (x > 0) {
                    if (f1 <= y) {
                        if (y > f4) z = 16;
                        else if ((y <= f4) && (f3 <= 1)) z = 17;
                        else z = 2;
                    }
                    else {
                        if (y >= f4) z = 15;
                        else {
                            if (f3 <= 1) z = 14;
                            else {
                                if (y > f2) z = 1;
                                else z = 11;
                            }
                        }
                    }
                }
                else if (x == 0) {
                    if (3 >= y > 1) z = 6;
                    else if (1 >= y > 0) z = 20;
                    else if (0 > y >= -1) z = 15;
                    else z = 11;
                }
                else if (y == 0) {
                    if (-3 <= x < -2) z = 7;
                    else if (-2 <= x < 0) z = 20;
                    else if (0 < x <= 1) z = 19;
                    else if (1 < x <= 2) z = 18;
                    else z = 3;
                }
            }
            cout << z << endl;
        }
    }
    }

Ответы (0 шт):