Форум программистов, компьютерный форум CyberForum.ru

Определить, какую фигуру образуют 4 точки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как посмотреть результат выполненной программы http://www.cyberforum.ru/cpp-beginners/thread169586.html
Привет! Чувствую себя идиоткой, но всё-же: Как сделать, чтобы в dev-C++ v.4.9.9.2 посмотреть результат выполненной программы? Написать-то программу получилось, но при запуске она мелькает черным окошком, и всё... Раньше я дописывала в конце system("PAUSE"); return 0;, или в крайнем случае: system("PAUSE"); return EXIT_SUCCESS;, но теперь у меня в конце программы следующий...
C++ Определить разность между значениями y и z Написать две программы для расчета значений переменных y и z по заданным формулам: y=cos(α)+cos(2α)+cos(6α)+cos(7α) z=4cos(α/2)*cos(5/2*α)*cos(4α). В первой программе использовать для ввода функцию scanf, для вывода - функцию printf. Во второй программе использовать операторы потокового ввода-вывода cin и cout. Определить разность между значениями y и z. З.Ы. Помогиге плиз составить эти... http://www.cyberforum.ru/cpp-beginners/thread169568.html
Вернуть текущюю дату. C++
вот например есть class Date { void Now() //метод который должен вернуть текущюю дату {} void main() { // через cout вывести текущюю дату на экран } };
C++ не правильно копирует (
#include <iostream> #include <clocale> #include <conio.h> #include <string.h> using namespace std; struct AEROFLOT { char name; int number; char type;
C++ Наращивание списка в конструкторе класса http://www.cyberforum.ru/cpp-beginners/thread169559.html
Доброго времени суток! Разбираясь с классами наткнулся на такое задание. класс должен включать обязательный атрибут char *name. Определить в классе статическую переменную – количество объектов и статическую переменную указатель на список объектов. Также определить метод Show(void) для распечатки имен объектов из списка. Реализовать классы так, чтобы список наращивался динамически при...
C++ Найти наименьшее количество одинаковых, идущих подряд элементов Дан вектор размерности N. Найти наименьшее количество одинаковых, идущих подряд элементов. подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3042 / 1687 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
27.09.2010, 10:39     Определить, какую фигуру образуют 4 точки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
///////////////////////////////////////////////////////////////////////////////
//Ввести 4 точки на плоскости и определить,какую фигуру они образуют:
//квадрат,ромб,трапеция,прямоугольник,параллелограмм 
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cmath>
#include <complex>
#include <iostream>
#include <set>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef double                 T_coord;
typedef std::complex<T_coord>  T_point;
typedef std::vector<T_point>   T_vertexes;
///////////////////////////////////////////////////////////////////////////////
struct T_point_compare
{
    bool operator() (T_point  p1,  T_point  p2)
    {
        if(p1.real() == p2.real())
        {
            return p1.imag() < p2.imag();
        }
        else
        {
            return p1.real() < p2.real();
        }             
    }
};
///////////////////////////////////////////////////////////////////////////////
typedef std::set<T_point, T_point_compare>   T_vertexes_set;
///////////////////////////////////////////////////////////////////////////////
bool  vectors_are_equally_directed(const T_point& V1, const T_point& V2)
{
    return  arg(V1 / V2) == 0; 
}
///////////////////////////////////////////////////////////////////////////////
void  print_tetragon_type(T_vertexes_set  vertexes_set)
{
    T_vertexes  vertexes(vertexes_set.begin(), vertexes_set.end());
    bool is_trapezia = false;
 
    T_point AB;
    T_point CD;
    T_point AC;
    T_point DB;
 
    while(std::next_permutation(vertexes_set.begin(), vertexes_set.end(), 
          T_point_compare()))
    {
        T_point A = vertexes[0];
        T_point B = vertexes[1];
        T_point C = vertexes[2];
        T_point D = vertexes[3];
 
        AB = B - A;
        CD = D - C;
        AC = C - A;
        DB = B - D;
 
        is_trapezia = vectors_are_equally_directed(AB, CD)
                      && !vectors_are_equally_directed(AB, AC);
 
        //      A-------------------B
        //
        //  C-----------------------------D
        //
        //               или
        //
        //  C-----------------------------D
        //
        //      A-------------------B        
 
        if(is_trapezia) break;
 
    }//while(std::next_permutation(vertexes_set.begin(), vertexes_set.end(), 
    if(!is_trapezia)
    {
        std::cout << "Это не трапеция."
                  << std::endl;    
    }
    else
    {
        bool is_parallelogram  = abs(AB) == abs(CD);
        bool is_equilateral    = abs(AB) == abs(AC);
        bool is_rectangular    = abs(arg(AC / CD)) == acos(-1.0) / 2;
        if(!is_parallelogram)
        {
            std::cout << "Это трапеция."
                      << std::endl;                
        }
        else//Это параллелограмм.
        {
            if(!is_equilateral
               && !is_rectangular)
            {
                std::cout << "Это параллелограмм."
                          << std::endl;               
            }
            else//равносторонний или прямоугольный (ромб, квадрат или прямоугольник)
            {
                if(!is_equilateral)
                {
                    std::cout << "Это прямоугольник."
                              << std::endl;                             
                }
                else//равносторонний
                {
                    if(is_rectangular)
                    {
                         std::cout << "Это квадрат."
                                  << std::endl;              
                    }
                    else
                    {
                          std::cout << "Это ромб."
                                  << std::endl;                                 
                    }                
                }//if(!is_equilateral)//else
            }//if(!is_equilateral && !is_rectangular)//else
        }//if(!is_parallelogram)//else
    }//if(!is_trapezia)//else
}
///////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите координаты вершин четырехугольника: "
              << std::endl;
 
    T_vertexes_set  vertexes_set;
    for(int i = 0; i < 4; ++i)
    {
        T_coord  X;
        T_coord  Y;
        do
        {
            std::cout << 'X'
                      << i + 1
                      << " = ";
            
            std::cin >> X; 
 
            std::cout << 'Y'
                      << i + 1
                      << " = ";
            
            std::cin >> Y;         
        }while(vertexes_set.count(T_point(X, Y)) > 0);
        vertexes_set.insert(T_point(X, Y));
        std::cout << std::endl;
    }
    print_tetragon_type(vertexes_set);
}
Добавлено через 9 часов 24 минуты
Пардон, в предыдущую программу вкрались ошибки.
Вот так будет правильно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
///////////////////////////////////////////////////////////////////////////////
//Ввести 4 точки на плоскости и определить,какую фигуру они образуют:
//квадрат,ромб,трапеция,прямоугольник,параллелограмм 
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cmath>
#include <complex>
#include <iostream>
#include <set>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef double                 T_coord;
typedef std::complex<T_coord>  T_point;
typedef std::vector<T_point>   T_vertexes;
///////////////////////////////////////////////////////////////////////////////
struct T_point_compare
{
    bool operator() (T_point  p1,  T_point  p2)
    {
        if(p1.real() == p2.real())
        {
            return p1.imag() < p2.imag();
        }
        else
        {
            return p1.real() < p2.real();
        }             
    }
};
///////////////////////////////////////////////////////////////////////////////
typedef std::set<T_point, T_point_compare>   T_vertexes_set;
///////////////////////////////////////////////////////////////////////////////
bool  vectors_are_equally_directed(const T_point& V1, const T_point& V2)
{
    return  arg(V1 / V2) == 0; 
}
///////////////////////////////////////////////////////////////////////////////
void  print_tetragon_type(T_vertexes_set  vertexes_set)
{
    T_vertexes  vertexes(vertexes_set.begin(), vertexes_set.end());
    bool is_trapezia = false;
 
    T_point AB;
    T_point CD;
    T_point AC;
    T_point DB;
    
    while(std::next_permutation(vertexes.begin(), vertexes.end(), 
          T_point_compare()))
    {
        T_point A = vertexes[0];
        T_point B = vertexes[1];
        T_point C = vertexes[2];
        T_point D = vertexes[3];
 
        AB = B - A;
        CD = D - C;
        AC = C - A;
        DB = B - D;
 
        is_trapezia = vectors_are_equally_directed(AB, CD)
                      && !vectors_are_equally_directed(AB, AC)
                      && !vectors_are_equally_directed(AB, -AC);
 
        //      A-------------------B
        //
        //  C-----------------------------D
        //
        //               или
        //
        //  C-----------------------------D
        //
        //      A-------------------B        
 
        if(is_trapezia) break;
 
    }//while(std::next_permutation(vertexes_set.begin(), vertexes_set.end(), 
    if(!is_trapezia)
    {
        std::cout << "Это не трапеция."
                  << std::endl;    
    }
    else
    {
        bool is_parallelogram  = abs(AB) == abs(CD);
        bool is_equilateral    = abs(AB) == abs(AC);
        bool is_rectangular    = abs(arg(AC / CD)) == acos(-1.0) / 2;
        if(!is_parallelogram)
        {
            std::cout << "Это трапеция."
                      << std::endl;                
        }
        else//Это параллелограмм.
        {
            if(!is_equilateral
               && !is_rectangular)
            {
                std::cout << "Это параллелограмм."
                          << std::endl;               
            }
            else//равносторонний или прямоугольный (ромб, квадрат или прямоугольник)
            {
                if(!is_equilateral)
                {
                    std::cout << "Это прямоугольник."
                              << std::endl;                             
                }
                else//равносторонний
                {
                    if(is_rectangular)
                    {
                         std::cout << "Это квадрат."
                                  << std::endl;              
                    }
                    else
                    {
                          std::cout << "Это ромб."
                                  << std::endl;                                 
                    }                
                }//if(!is_equilateral)//else
            }//if(!is_equilateral && !is_rectangular)//else
        }//if(!is_parallelogram)//else
    }//if(!is_trapezia)//else
}
///////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите координаты вершин четырехугольника: "
              << std::endl;
 
    T_vertexes_set  vertexes_set;
    for(int i = 0; i < 4; ++i)
    {
        T_coord  X;
        T_coord  Y;
        do
        {
            std::cout << 'X'
                      << i + 1
                      << " = ";
            
            std::cin >> X; 
 
            std::cout << 'Y'
                      << i + 1
                      << " = ";
            
            std::cin >> Y;         
        }while(vertexes_set.count(T_point(X, Y)) > 0);
        vertexes_set.insert(T_point(X, Y));
        std::cout << std::endl;
    }
    print_tetragon_type(vertexes_set);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru