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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
#1

Даны целые числа. Выяснить, найдутся ли среди точек четыре таких, которые являются вершинами квадрата - C++

26.10.2010, 21:34. Просмотров 1571. Ответов 13
Метки нет (Все метки)

Даны целые числа x1, y1, x2, y2, ...xn, yn.Выяснить, найдутся ли среди точек с координатами (x1;y1), (x2;y2),...(xn;yn) четыре таких, которые являются вершинами квадрата.Определить подпрограммы вычисления расстояния между 2-мя точками, определения взаимного расположения прямых и другие, необходимые для решения.
Решение на С++ должно быть, не получается.....
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2010, 21:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Даны целые числа. Выяснить, найдутся ли среди точек четыре таких, которые являются вершинами квадрата (C++):

Даны целые положительные числа аь а2,., а„. Найти среди них те, которые являются квадратами некоторого числа т - C++
Упорядочить по возрастанию элементы каждой строки мат рицы размером пхт. Дана строка. Подсчитать количество букв к в последнем ее...

Даны натуральное число n, целые числа а(1),…., a(n). Выяснить, имеются ли среди чисел а(1),… a(n) совпадающие. - C++
Даны натуральное число n, целые числа а(1),…., a(n). Выяснить, имеются ли среди чисел а(1),… a(n) совпадающие. Был бы очень благодарен...

Даны целые числа a1, a2, ., an. Получить те положительные числа из этой последовательности, которые являются полными квадратами - C++
ПОМОГИТЕ решить задачу на C++ Заранее спасибо! Даны целые числа a1, a2, ..., an. Получить те положительные числа из этой...

Определить номера точек, которые могут являться вершинами квадрата - C++
В одномерном массиве с чётным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1,...

Даны четыре разных числа. Найти среди них два наибольших - C++
Даны четыре разных числа. Найти среди них два наибольших. Чет я не понимаю как это все написать через if кто может написать ? как...

Даны четыре разных числа. Найти среди них два наибольших - C++
Задача: Даны четыре разных числа. Найти среди них два наибольших. С применением if. Помогите написать код, пожалуйста

13
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
28.10.2010, 20:28  [ТС] #2
Напишите пожалуйста используя синтаксис типа библиотек <stdio.h> и printf и scanf....f то я только начинающий и программирую на версии С++ 3.1

Добавлено через 2 часа 17 минут
Точнее мне нужноименно на чистом СИ...
0
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 20:53 #3
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
#include <stdio.h>
#include <math.h>
 
struct POINT
{
    int x, y;
};
 
struct LINE
{
    POINT p1, p2;
};
 
struct QUARE
{
    POINT topLeft, bottomRight;
};
 
//Растояние между точками
float distance( POINT p1, POINT p2)
{
    return sqrt( (p2.x - p1.x)*(p2.x - p1.x) + (p2.y - p1.y)*(p2.y - p1.y) );
};
 
//проверка паралельности прямых
bool parallel(LINE l1, LINE l2)
{
    bool p;
    //A1*B2-A2*B1
    p = (l1.p1.y - l1.p2.y)*(l2.p2.x - l2.p1.x) - (l2.p1.y - l2.p2.y)*(l1.p2.x - l1.p1.x);
    return p?false:true;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    return 0;
}
Это начало
про линии можешь почитать на
http://ru.wikipedia.org/wiki/Прямая

квадрат чет пока не знаю
1
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
28.10.2010, 21:12  [ТС] #4
Спасибо...напиши про квадраты если что еще....
0
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 21:32 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//проверка квадрата
/*
   tl _____ tr
     |       |
     |____|
   bl         br
*/
bool isquare(POINT tl, POINT bl, POINT br, POINT tr)
{
    if( tl.x!=tr.x && bl.x!=br.x ) return false;
    if( tl.y!=bl.y && tr.y!=br.y ) return false;
    return true;
};
можно так проверить

Добавлено через 4 минуты
на растояния надо проверить стороны между собой.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
bool isquare(POINT tl, POINT bl, POINT br, POINT tr)
{
        if( tl.x!=tr.x && bl.x!=br.x ) return false;
        if( tl.y!=bl.y && tr.y!=br.y ) return false;
        if( distance(tl, tr)!=distance(tl, bl) ) return false;
        return true;
};
1
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
30.10.2010, 00:25  [ТС] #6
int _tmain(int argc, _TCHAR* argv[]) а что это значит?Я про структуры понял и программа впринципе понятна, только на досе она выдает синтаксические ошибкки и в выше указанной строке тоже, и что она значит...?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
30.10.2010, 00:57 #7
Berens, int argc - колличество аргументов коммандной строки
argv - сами аргументы
_TCHAR - использует unicode, если он включен или просто char если выключен
1
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
30.10.2010, 01:07  [ТС] #8
В данном контексте не понимаю как он используется....
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
30.10.2010, 02:29 #9
Berens, Никак. Абсолютно. Вообще это используется, чтобы вводить аргументы с коммандной строки.
1
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
30.10.2010, 07:38  [ТС] #10
А здесь его не нужно заменить или просто выкинуть можно?
0
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
30.10.2010, 14:16 #11
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
//////////////////////////////////////////////////////////////////////////////////////
//Даны целые числа x1, y1, x2, y2, ...xn, yn.Выяснить, найдутся ли среди точек 
//с координатами (x1;y1), (x2;y2),...(xn;yn) четыре таких, которые являются 
//вершинами квадрата.Определить подпрограммы вычисления расстояния между 2-мя точками, 
//определения взаимного расположения прямых и другие, необходимые для решения.
//////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <iterator>
#include <set>
//////////////////////////////////////////////////////////////////////////////////////
struct  T_int_point
{
    int X_;
    int Y_;
    //--------------------------------------------------------------------------------
    T_int_point(int X, int Y) : X_(X), Y_(Y)
    {}
    //--------------------------------------------------------------------------------
    T_int_point  operator+(T_int_point  p) const
    {
        int  X_res = X_ + p.X_;
        int  Y_res = Y_ + p.Y_;
        return  T_int_point(X_res, Y_res);
    }
    //--------------------------------------------------------------------------------
    T_int_point  operator-(T_int_point  p) const
    {
        int  X_res = X_ - p.X_;
        int  Y_res = Y_ - p.Y_;
        return  T_int_point(X_res, Y_res);
    }
    //--------------------------------------------------------------------------------
    void  print() const
    {
        std::cout << "("
                  << X_
                  << ", "
                  << Y_
                  << ")";
    }
    //--------------------------------------------------------------------------------
    bool  operator< (T_int_point  p) const
    {
        return  X_ == p.X_ ? Y_ < p.Y_ : X_ < p.X_;
    }
};
//////////////////////////////////////////////////////////////////////////////////////
typedef  std::set<T_int_point>   T_int_points;
typedef  std::set<T_int_points>  T_squares;
//////////////////////////////////////////////////////////////////////////////////////
T_int_point  vect(const T_int_point  A, const T_int_point  B)
{
    return  B - A;
}
//////////////////////////////////////////////////////////////////////////////////////
int dist_a_square(const T_int_point  A, const T_int_point  B)
{
    T_int_point  vect_AB = vect(A, B);
    return  vect_AB.X_ * vect_AB.X_ + vect_AB.Y_ * vect_AB.Y_;
}
//////////////////////////////////////////////////////////////////////////////////////
void  print_points_forming_squares(const T_int_points&  int_points)
{ 
    T_squares  squares;
    //Перебираем все сочетания по две точки в поисках гипотенузы 
    //прямоугольного треугольника:
    for(T_int_points::const_iterator  A_hip_it = int_points.begin(); 
        A_hip_it != int_points.end(); ++A_hip_it)
    {
        for(T_int_points::const_iterator  B_hip_it = A_hip_it; 
            B_hip_it != int_points.end(); ++B_hip_it)
        {
            if(B_hip_it == A_hip_it)
            {
                continue;
            }
            //Перебираем все точки множества в поисках вершины
            //для предполагаемой гипотенузы прямоугольного треугольника.
            for(T_int_points::const_iterator  C_it = int_points.begin();  
                C_it != int_points.end(); ++C_it)
            {
                if(    C_it == A_hip_it
                    || C_it == B_hip_it)
                {
                    continue;
                }
                //Проверяем, образуют ли точки равнобедренный 
                //прямоугольный треугольник с гипотенузой AB.
                int AB_hip_len2 = dist_a_square(*A_hip_it, *B_hip_it);
                int AC_cat_len2 = dist_a_square(*A_hip_it, *C_it);
                int BC_cat_len2 = dist_a_square(*B_hip_it, *C_it);
 
                if(AC_cat_len2 == BC_cat_len2
                   && AB_hip_len2 == AC_cat_len2 + BC_cat_len2)
                {
                    T_int_point  D = *C_it + vect(*C_it, *B_hip_it) + vect(*C_it, *A_hip_it);                    
                    //Если точка, дополняющая прямоугольный 
                    //треугольник до квадрата существует:
                    if(int_points.find(D) != int_points.end())
                    {
                        T_int_points  square;
                        square.insert(*A_hip_it);                        
                        square.insert(*B_hip_it);
                        square.insert(*C_it);
                        square.insert(D);
 
                        squares.insert(square);
                    }
                }
            }
        }
    }
 
    std::cout << (squares.empty() 
                      ? "Нет вершин квадратов."
                      : "В данном множестве точек являются вершинами квадратов:")
              << std::endl;
 
    //Печатаем все квадраты из squares:   
    for(T_squares::iterator  square_it = squares.begin(); 
        square_it != squares.end(); ++square_it)
    {
        std::cout << "квадрат № "                  
                  << std::distance(squares.begin(), square_it) + 1
                  << "\t\t";
        for(T_int_points::const_iterator  vertice_it = square_it->begin(); 
            vertice_it != square_it->end(); ++vertice_it)
        {
            
            vertice_it->print();
            std::cout << "    ";
        }
        std::cout << std::endl
                  << std::endl
                  << std::endl;
    }    
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    const int  POINTS_IN_SQUARE = 4;
    int  n;
    do
    {
        std::cout << "Введите количество точек >= "
                  << POINTS_IN_SQUARE
                  << ": ";
        std::cin >> n;
    }while(n < POINTS_IN_SQUARE);
    
    std::cout << "Введите целые координаты "
              << n
              << " различных точек: "
              << std::endl;
 
    T_int_points  int_points;
    do
    {
        std::cout << "X" 
                  << int_points.size() + 1 
                  << " = ";
        int x = 0;
        std::cin >> x;
 
        std::cout << "Y"
                  << int_points.size() + 1 
                  << " = ";
        int y = 0;
        std::cin >> y;
        std::cout << std::endl;
        int_points.insert(T_int_point(x, y));
    }while(static_cast<int>(int_points.size()) < n);
 
    print_points_forming_squares(int_points);
}
1
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
30.10.2010, 21:07  [ТС] #12
Спасибо но я ж уточнил поом что на чистом СИ мне надо
0
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
01.11.2010, 08:41  [ТС] #13
И если не трудно, можно составить блок схему, но по решению на СИ а не на СИ++....
0
Leer
0 / 0 / 0
Регистрация: 11.11.2011
Сообщений: 8
11.11.2011, 13:01 #14
Мне нужно решить подобную задачу на прологе: Даны целые числа х1,у1, х2,у2, ... хn,уn. Выяснить, найдуться ли среди точек с координатами (х1,у1)...(хn,уn) четыре таких, которые являются вершинами квадрата. помогите пожалуйста!!!!!
0
11.11.2011, 13:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2011, 13:01
Привет! Вот еще темы с ответами:

Даны 6 действительных чисел a,b,c,d,e,f,которые являются координатами R(a,b),S(c,d),T(e,f) трёх точек R,S и T на плоскости. (Блок схема) - C++
Даны 6 действительных чисел a,b,c,d,e,f,которые являются координатами R(a,b),S(c,d),T(e,f) трёх точек R,S и T на плоскости. Если точка Т...

Даны действительные числа a1, ., an. (n>=2 и заранее неизвестно). Выяснить, имеются ли среди чисел a1, ., - C++
Даны действительные числа a1, ..., an. (n&gt;=2 и заранее неизвестно). Выяснить, имеются ли среди чисел a1, ..., an совпадающие.

Диагонали (Четыре точки являются вершинами параллелограмма. Определить длину диагоналей и найти координаты ) - C++
Помогите!!! Четыре точки A(x1; y1), B(x2; y2), C(x3; y3), D(x4; y4) являются вершинами параллелограма. Определить длину диагоналей и...

Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма. - C++
Даны четыре точки А1(x1, y1), А2(x2, y2), А3(x3, y3), А4(x4, y4). Определить будут ли они вершинами параллелограмма.(помогите пожалуйста,не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru