Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C/C++] Вывести вершины треугольника в порядке


Автор: En_t_end 16.9.2006, 06:33
Вывести вершины треугольника.
Вот моё решение, но оно неверно при A(3;5),B(3;0),C(0;0)
Код

#define BAD_INPUT_DATA_MESSAGE    "Last input data is bad or incorrect!!!"
#define EXIT_MESSAGE            "Press any key for exit..."

void my_exit(const char* message = NULL)
{
    if(message == NULL) return;
    cout << endl;
    cout << message;
    getch();
    exit(0);
}

void main(void)
{
    //New variables:
    double Ax=0,Bx=0,Cx=0;
    double Ay=0,By=0,Cy=0;

    //get position of point "A":
    cout << "Enter position of point A:" << endl;
    cout << "X: ";
    cin >> Ax;
    cout << "Y: ";
    cin >> Ay;
    //get position of point "B":
    cout << "Enter position of point B:" << endl;
    cout << "X: ";
    cin >> Bx;
    cout << "Y: ";
    cin >> By;
    //get position of point "C":
    cout << "Enter position of point C:" << endl;
    cout << "X: ";
    cin >> Cx;
    cout << "Y: ";
    cin >> Cy;
    if(Ax == Bx && Ay == By) my_exit(BAD_INPUT_DATA_MESSAGE);
    if(Ax == Cx && Ay == Cy) my_exit(BAD_INPUT_DATA_MESSAGE);
    if(Bx == Cx && By == Cy) my_exit(BAD_INPUT_DATA_MESSAGE);
    if((Ax == Bx && Ax == Cx) || (Ay == By && Ay == Cy)) my_exit(BAD_INPUT_DATA_MESSAGE);
    //***********************************

    cout << endl;
    cout << "Points in task order: ";
    if(Ax < Bx && Ax < Cx)
    {
        cout << 'A';
        if(Bx < Cx && By >= Cy) cout << "BC";
        else cout << "CB";
    }
    else
    {
        if(Bx < Ax && Bx < Cx)
        {
            cout << 'B';
            if(Cx < Ax && Cy >= Ay) cout << "CA";
            else cout << "AC";
        }
        else
        {
            cout << 'C';
            if(Ax < Bx && Ay >= By) cout << "AB";
            else cout << "BA";
        }
    }
    //Close programm:
    my_exit(EXIT_MESSAGE);
}

Автор: MAKCim 16.9.2006, 09:27
1. Найти min(x), max(x)
(пусть нашли и min(x) -> A, max(x) -> B)
2. Если Cy>=By => ((Ax,Ay),(Cx,Xy),(Bx,By))
    Если Cy<By    => ((Ax,Ay),(Bx,By),(Cx,Cy))

Автор: En_t_end 16.9.2006, 16:40
MAKCim, 
Благодарю

Автор: En_t_end 21.9.2006, 18:39
Вот конкретно часть определения порядка вывода(c изменениями):
Код

    if(Ax < Bx && Ax < Cx)
    {
        cout << 'A';
        //if(Bx < Cx && By >= Cy) cout << "BC";
        if(Bx >= Cx && By > Cy) cout << "BC";
        else cout << "CB";
    }
    else
    {
        if(Bx < Ax && Bx < Cx)
        {
            cout << 'B';
            //if(Cx < Ax && Cy >= Ay) cout << "CA";
            if(Cx >= Ax && Cy > Ay) cout << "CA";
            else cout << "AC";
        }
        else
        {
            cout << 'C';
            //if(Ax < Bx && Ay >= By) cout << "AB";
            if(Ax >= Bx && Ay > By) cout << "AB";
            else cout << "BA";
        }
    }

Решение ошибочно для A(0;0),B(0;1),C(1;0)
MAKCim, and all выручайте, над этой простой задачей бьюсь уже туеву тучу времени. Впрочем у меня так всегда.

Автор: MAKCim 21.9.2006, 21:49
Код

if (Ax < Bx)
{
    if (Ax < Cx)
        cout<<'A';
    else if (Ax > Cx || Ay > Cy) cout<<"CA";
    else cout<<"AC";
}
else if (Ax > Bx)
{
    if (Bx < Cx) 
    {
        cout<<'B';
        if (Ax < Cx)
        {
            if (Ay >= Cy) cout<<"AC";
            else cout<<"CA";
        }
        else if (Ax > Cx)
        {
            if (Cy >= Ay) cout<<"CA";
            else cout<<"AC";
        }
        else if (Ay > Cy) cout<<"AC";
        else cout<<"CA";
    }
    else if (Bx > Cx)
    {
        cout<<'C';
        if (Ax < Bx)
        {
            if (Ay >= By) cout<<"AB";
            else cout<<"BA";
        }
        else if (Ax > Bx)
        {
            if (By >= Ay) cout<<"BA";
            else cout<<"AB";
        }
        else if (Ay > By) cout<<"AB";
        else cout<<"BA";
    }
    else if (By > Cy)
        cout<<"CBA";
    else cout<<"BCA";
}
else if (Cx < Bx)
{
    cout<<'C';
    if (By > Cy) cout<<"BC";
    else cout<<"CB";
}
else if (By > Ay)
    cout<<"ABC";
else cout<<"BAC";

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)