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

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

Войти
Регистрация
Восстановить пароль
 
serezhqqa
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 6
#1

В пятиугольнике, заданном координатами своих вершин, подсчитать количество прямых углов (если они есть). - C++

17.03.2013, 18:35. Просмотров 926. Ответов 4
Метки нет (Все метки)

1. В пятиугольнике, заданном координатами своих вершин, подсчитать количество прямых углов (если они есть).
2. Рассмотреть указанную последовательность в цикле и выйти из цикла, достигнув указанного условия с выдачей порядкового номера члена, при котором достигнуто условие. Если же за m оборотов цикла условие не достигнуто, напечатать об этом сообщение.

Помогите, пожалуйста...сам мучался никак не получается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 18:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В пятиугольнике, заданном координатами своих вершин, подсчитать количество прямых углов (если они есть). (C++):

Определить, пересекаются ли прямоугольники, заданные координатами своих углов - C++
Нужна еще помощь, буду благодарен. На с++ обязательно Два прямоугольника, расположенные в первом квадранте, со сторонами,...

Треугольник задается координатами своих вершин. С++ - C++
Треугольник задается координатами своих вершин. Среди некоторого количества треугольников указать те, которые являются тупоугольными. найти...

Найти площадь треугольника заданного координатами своих вершин - C++
Прошу помощи с решением задачки: :) Треугольник задан координатами своих вершин. Найти площадь треугольника.

Найти периметр треугольника, заданного координатами своих вершин - C++
2. Составьте программу для решения задачи. Найдите периметр треугольника, заданного координатами своих вершин (считать, что треугольник...

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

Вычисление периметра треугольника, заданного координатами своих вершин - C++
Прошу помогите если можете. Треугольник заданный координатами x1, y1, x2, y2, x3, y3 своих вершин. склвсты программу для вычисления...

4
Progr
2 / 2 / 0
Регистрация: 17.03.2013
Сообщений: 25
20.03.2013, 20:59 #2
Я новичок, так что пример кода не покажу, но объясню как можно реализовать. Есть формулы:
x = x0 + round(R * cos(A * PI / 180));
y = y0 + round(R * sin(A * PI / 180));
где x и y - координаты точки окружности, x0 и y0 - координаты центра окружности, R - радиус окружности, A - угол (А в верхней точке окружности равно 0 и далее увеличивается по часовой стрелке).
Этими формулами можно как - нибудь воспользоваться в этой задаче
0
IrineK
Заблокирован
20.03.2013, 22:24 #3
Progr, эти формулы годятся, если все вершины лежат на окружности радиуса R, чего они делать у пятиугольника вовсе не обязаны.

В данном случае нужно из каждой вершины строить два вектора на соседние и проверять их на перпендикулярность, т.е. считать скалярное произведение: если = 0, то у нас - прямой угол.

serezhqqa, ваш пятиугольник должен быть выпуклым, или это все равно?
0
IrineK
Заблокирован
20.03.2013, 23:40 #4
Решение для 3D.
Правда, не проверяется: комланарность, существование, выпуклость - это на совести вводящего данные )

Если с классами будет непонятно (судя по условию, циклы - это уже серьезно) - тогда рассматривайте main как псевдокод и постройте свое решение по аналогии.



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
//В пятиугольнике, заданном координатами своих вершин, подсчитать количество прямых углов (если они есть)
 
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
class Point
{   
public:
    Point() : x(0.),y(0.),z(0.) {}
    Point(const double &x, const double &y,const double &z):x(x),y(y),z(z)  {}
 
    const double X() const { return x; }
    const double Y() const { return y; }
    const double Z() const { return z; }
 
    friend const istream& operator>>(istream& stream, Point& p)
    {   cout<<"X, Y, Z:\t";
        stream>>p.x>>p.y>>p.z;
        stream.sync();
        return stream;
    }
    
    friend const ostream& operator<<(ostream& stream,const Point& p)
    {   stream  <<setprecision(6)<<setw(15)<<p.x
                <<setprecision(6)<<setw(15)<<p.y
                <<setprecision(6)<<setw(15)<<p.z<<"\n";
        return stream;
    }
 
private:
    double x,y,z;
};
 
class Vector
{
public:
    Vector(): x(0.),y(0.),z(0.) {}
        
    Vector(const double a, const double b,const double c)
    {   x = a; y = b; z = c;
    }
    
    void SetVector(const double a, const double b,const double c)
    {   x = a; y = b; z = c;
    }
 
    double* GetArray()
    {   double *A = new double[3];
        A[0] = x;
        A[1] = y;
        A[2] = z;
        return A;
    }
 
    const double X() const { return x; }
    const double Y() const { return y; }
    const double Z() const { return z; }
    
private:
    double x,y,z;
};
 
double VectorProduct(Vector P, Vector V)
{   double *PA = P.GetArray();
    double *VA = V.GetArray();
    double R = 0.;
 
    for(int i=0; i<3;i++)
        R += PA[i]*VA[i];
    return R;
}
 
 
int main()
{   const int N = 5;
    Point P[N];         //массив точек
    Vector V[N];        //массив векторов
    int i, found = 0, whereFound[5] = {0};  //found - счетчик найденных углов
                                //whereFound - массив из 0, если в какой-то вершине
                                //окажется прямой угол - тогда соответствующему элементу
                                //whereFound присвоим 1
    //вводим координаты вершин
    for(i=0;i<N;i++)
    {   cout<<"Coordinates of P["<<i<<"]\n";
        cin>>P[i];
    }
    
    //строим вектора 
    V[0].SetVector(P[0].X()-P[4].X(),P[0].Y()-P[4].Y(),P[0].Z()-P[4].Z());
    for(i=0;i<N-1;i++)
        V[i+1].SetVector(P[i+1].X()-P[i].X(),P[i+1].Y()-P[i].Y(),P[i+1].Z()-P[i].Z());
    
    //считаем скалярные произведения в каждой вершине
    for(i=0;i<N-1;i++)
        if (! VectorProduct(V[i],V[i+1]))
        {   found ++;               //найден прямой угол
            whereFound[i] = 1;      //угол найден для вершины i
        }
 
    if (! VectorProduct(V[4],V[0]))
        {   found ++;
            whereFound[4] = 1;
        }
 
    //выводим результат
    if(found)
    {   cout<<"\n\n"<<found<<" right angles found:\n";
        for(i=0;i<N;i++)
            if(whereFound[i])
                cout<<"    - at point "<<i<<"\n";
    }
    else
        cout<<"No right angles found";
 
    cin.sync();cin.get();
    return 0;
}
0
Изображения
 
serezhqqa
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 6
18.04.2013, 21:44  [ТС] #5
если кому интересно, решил выкрутиться так:
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
    
#include<stdio.h>
main()
{
float k,x1,x2,x3,x4,x5,y1,y2,y3,y4,y5;
 
printf("VVedite x1 \n");
scanf("%f", &x1);
 
printf("VVedite y1 \n");
scanf("%f", &y1);
 
printf("VVedite x2 \n");
scanf("%f", &x2);
 
printf("VVedite y2 \n");
scanf("%f", &y2);
 
printf("VVedite x3 \n");
scanf("%f", &x3);
 
printf("VVedite y3 \n");
scanf("%f", &y3);
 
printf("VVedite x4 \n");
scanf("%f", &x4);
 
printf("VVedite y4 \n");
scanf("%f", &y4);
 
printf("VVedite x5 \n");
scanf("%f", &x5);
 
printf("VVedite y5 \n");
scanf("%f", &y5);
 
k=0;
if (x1==x2 && y2==y3) k=k+1;
if (x2==x3 && y3==y4) k=k+1;
if (x3==x4 && y4==y5) k=k+1;
if (x4==x5 && y5==y1) k=k+1;
if (x5==x1 && y1==y2) k=k+1;
 
if (y1==y2 && x2==x3) k=k+1;
if (y2==y3 && x3==x4) k=k+1;
if (y3==y4 && x4==x5) k=k+1;
if (y4==y5 && x5==x1) k=k+1;
if (y5==y1 && x1==x2) k=k+1;
 
printf("Pryamih uglov %f", k);
 
}
0
18.04.2013, 21:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2013, 21:44
Привет! Вот еще темы с ответами:

Найти высоты треугольника, заданного координатами своих вершин - C++
Найти высоты треугольника, заданного координатами своих вершин. Указать наименьшую из них. Для определения стороны треугольника оформить...

Из N треугольников, заданных координатами своих вершин, имеет больший периметр? - C++
Из N треугольников, заданных координатами своих вершин, имеет больший периметр?

Функции: найти высоты треугольника, заданного координатами своих вершин - C++
Здравствуйте, помогите пожалуйста написать программу Найти высоты треугольника, заданного координатами своих вершин. Указать наименьшую...

Треугольник задан координатами своих вершин. Найти (выдает ошибку) - C++
// Треугольник задан координатами своих вершин. Найти: //а) периметр треугольника; // б) площадь треугольника; #include...


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

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

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