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

Площадь треугольника - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
KD8
1 / 1 / 0
Регистрация: 02.01.2012
Сообщений: 27
08.01.2012, 17:48     Площадь треугольника #1
Составить программу, которая по трем координатам, которые вводит пользователь, считает площадь фигуры, ограниченной этими координатами. Помогите плиз)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegLvovskyj
9 / 9 / 2
Регистрация: 02.12.2010
Сообщений: 66
08.01.2012, 18:09     Площадь треугольника #2
Колись робив похоже завдаяння.вона рахує ше периметр.

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
//main.cpp
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include "Triangle.h"
int main()
{
    int 
        Ax, Ay, Bx, By, Cx, Cy;
    printf ("Введіть Ax.. ");   scanf ("%i", &Ax); // 
    printf ("Введіть Ay.. ");   scanf ("%i", &Ay); // ввід
    printf ("Введіть Bx.. ");   scanf ("%i", &Bx); // вхідних
    printf ("Введіть By.. ");   scanf ("%i", &By); // даних
    printf ("Введіть Cx.. ");   scanf ("%i", &Cx); // 
    printf ("Введіть Cy.. ");   scanf ("%i", &Cy); //
    
    Triangle tri1;
    tri1.PutAx(Ax); tri1.PutAy(Ay); // 
    tri1.PutBx(Bx); tri1.PutBy(By); // Вхідні дані в tri1
    tri1.PutCx(Cx); tri1.PutCy(Cy); //
    printf ("\n\nПериметр = %Lf", tri1.Perimeter());    //Вивід периметра
    printf ("\nПлоща = %Lf", tri1.Area());  //Вивід площі
    if (tri1.Perevirka() == 1)  //Вивід перевірки на прямокутність
        printf ("\nТрикутник прямокутний");
    else
        printf ("\nТрикутник не прямокутний ");
    getch();
    return 0;
}
 
 
 
 
//Triangle.h
class Triangle
{
private:
    int Ax; int Ay;
    int Bx; int By;
    int Cx; int Cy;
public:
    Triangle(int Ax = 1, int Ay = 1, int Bx = 1, int By = 1, int Cx = 1, int Cy = 1); // Конструктор по замовчуванню
    Triangle(const Triangle & tri); // конструктор копіювання
    virtual ~Triangle();// деструктор
 
    int GetAx();    int GetAy();
    int GetBx();    int GetBy();
    int GetCx();    int GetCy();
    void  PutAx(int);   void  PutAy(int);
    void  PutBx(int);   void  PutBy(int);
    void  PutCx(int);   void  PutCy(int);
 
    double Perimeter();
    double Area();
    int Perevirka();    
};
 
 
 
// Triangle.cpp
#include "Triangle.h"
#include <math.h>
Triangle::Triangle(int Ax, int Ay, int Bx, int By, int Cx, int Cy)
{
    Ax = Ax;    Ay = Ay;
    Bx = Bx;    By = By;
    Cx = Cx;    Cy = Cy;
}
Triangle::Triangle(const Triangle & tri)
{
    *this = tri;
}
Triangle::~Triangle()
{
}
int Triangle::GetAx()
{
    return Ax;
}
int Triangle::GetAy()
{
    return Ay;
}
int Triangle::GetBx()
{
    return Bx;
}
int Triangle::GetBy()
{
    return By;
}
int Triangle::GetCx()
{
    return Cx;
}
int Triangle::GetCy(){
    return Cy;
}
void  Triangle::PutAx(int a)
{
    Ax = a;
}
void  Triangle::PutAy(int a)
{
    Ay = a;
}
void  Triangle::PutBx(int a)
{
    Bx = a;
}
void  Triangle::PutBy(int a)
{
    By = a;
}
void  Triangle::PutCx(int a)
{
    Cx = a;
}
void  Triangle::PutCy(int a)
{
    Cy = a;
}
double Triangle::Perimeter()
{
    return sqrt((double)((Bx-Ax)*(Bx-Ax)+(By-Ay)*(By-Ay)))+sqrt((double)((Cx-Ax)*(Cx-Ax)+(Cy-Ay)*(Cy-Ay)))+sqrt((double)((Bx-Cx)*(Bx-Cx)+(By-Cy)*(By-Cy))); //Обчислення периметру
}
double Triangle::Area()
{
    double
        a,b,c;
    a = sqrt((double)((Bx-Ax)*(Bx-Ax)+(By-Ay)*(By-Ay)));
    b = sqrt((double)((Cx-Ax)*(Cx-Ax)+(Cy-Ay)*(Cy-Ay)));
    c = sqrt((double)((Bx-Cx)*(Bx-Cx)+(By-Cy)*(By-Cy)));
    return sqrt((double)((a+b+c)/2*((a+b+c)/2-a)*((a+b+c)/2-b)*((a+b+c)/2-c)));     //Обчислення площі
}
int Triangle::Perevirka()   //Перевірка на прямокутність
{
    double gip;
    gip = sqrt((double)((Bx-Ax)*(Bx-Ax)+(By-Ay)*(By-Ay)));
    if (sqrt((double)((Cx-Ax)*(Cx-Ax)+(Cy-Ay)*(Cy-Ay))) > gip)
        gip = sqrt((double)((Cx-Ax)*(Cx-Ax)+(Cy-Ay)*(Cy-Ay)));
    if (sqrt((double)((Bx-Cx)*(Bx-Cx)+(By-Cy)*(By-Cy))) > gip)
        gip = sqrt((double)((Bx-Cx)*(Bx-Cx)+(By-Cy)*(By-Cy)));
 
    if (sqrt((double)((Bx-Ax)*(Bx-Ax)+(By-Ay)*(By-Ay))) == gip)
        if (gip*gip == (Cx-Ax)*(Cx-Ax)+(Cy-Ay)*(Cy-Ay) + (Bx-Cx)*(Bx-Cx)+(By-Cy)*(By-Cy))
            return 1;
        else
            return 0;
    if (sqrt((double)((Cx-Ax)*(Cx-Ax)+(Cy-Ay)*(Cy-Ay))) == gip)
        if (gip*gip == (Bx-Ax)*(Bx-Ax)+(By-Ay)*(By-Ay) + (Bx-Cx)*(Bx-Cx)+(By-Cy)*(By-Cy))
            return 1;
        else
            return 0;
    if (sqrt((double)((Bx-Cx)*(Bx-Cx)+(By-Cy)*(By-Cy))) == gip)
        if (gip*gip == (Bx-Ax)*(Bx-Ax)+(By-Ay)*(By-Ay) + (Cx-Ax)*(Cx-Ax)+(Cy-Ay)*(Cy-Ay))
            return 1;
        else
            return 0;
}
KD8
1 / 1 / 0
Регистрация: 02.01.2012
Сообщений: 27
08.01.2012, 18:16  [ТС]     Площадь треугольника #3
А как просто без периметра?
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
08.01.2012, 18:20     Площадь треугольника #4
Цитата Сообщение от KD8 Посмотреть сообщение
А как просто без периметра?
Без периметра можно просто полупериметром:
C
1
p=(a+b+c)/2;
Добавлено через 44 секунды
Я так понял, важно, чтобы вводить 3 стороны и в итоге получить площадь, так?
KD8
1 / 1 / 0
Регистрация: 02.01.2012
Сообщений: 27
08.01.2012, 18:23  [ТС]     Площадь треугольника #5
Да, надо ввести 3 стороны)
OlegLvovskyj
9 / 9 / 2
Регистрация: 02.12.2010
Сообщений: 66
08.01.2012, 18:25     Площадь треугольника #6
Цитата Сообщение от KD8 Посмотреть сообщение
А как просто без периметра?
убери функцию периметра.

Добавлено через 1 минуту
Lisp
1
которая по трем координатам, которые вводит пользователь,
так и сделано.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
08.01.2012, 18:27     Площадь треугольника #7
Можно попроще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
 int a,b,c;
 float p,S;
 printf("Input a,b,c: ");
 scanf("%d%d%d",&a,&b,&c);
 p=(a+b+c)/2;
 S=sqrt(p*(p-a)*(p-b)*(p-c));
 printf("S=%f",S);
 getch();
 return 0;
}
KD8
1 / 1 / 0
Регистрация: 02.01.2012
Сообщений: 27
08.01.2012, 18:33  [ТС]     Площадь треугольника #8
чуть не так... надо ввести x1,x2,y1,y2,z1,z2, а потом считать площадь.
Stochfard
4 / 4 / 1
Регистрация: 23.12.2011
Сообщений: 79
08.01.2012, 18:46     Площадь треугольника #9
как я понял нужно ввести координаты вершин треугольника, и найти его площадь.
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
#include <iostream>
#include <math.h>
using namespace std;
int main(void){
    double      x1, y1, z1, x2, y2, z2, x3, y3, z3, s;
    //просим ввести координаты
    cout<<"enter x1";
    cin>>x1;
    cout<<"enter y1";
    cin>>y1;
    cout<<"enter z1";
    cin>>z1;
    cout<<"enter x2";
    cin>>x2;
    cout<<"enter y2";
    cin>>y2;
    cout<<"enter z2";
    cin>>z2;
    cout<<"enter x3";
    cin>>x3;
    cout<<"enter y3";
    cin>>y3;
    cout<<"enter z3";
    cin>>z3;
    //считаем площадь по формуле ниже s=1/2*|ABxAC| площадь как половина модуля произведения катетов
    double i=((y1-y2)*(z1-z3))-((z1-z2)*(y1-y3));
    double j=((x1-x2)*(z1-z3))-((z1-z2)*(x1-x3));
    double k=((x1-x2)*(y1-y3))-((x1-x3)*(y1-y2));
    s=sqrt(i*i+j*j+k*k)/2;
    cout<<s;
    system ("pause");
    return 0;
}
OlegLvovskyj
9 / 9 / 2
Регистрация: 02.12.2010
Сообщений: 66
08.01.2012, 18:49     Площадь треугольника #10
Цитата Сообщение от KD8 Посмотреть сообщение
чуть не так... надо ввести x1,x2,y1,y2,z1,z2, а потом считать площадь.

C++
1
2
3
4
5
6
7
  Ax, Ay, Bx, By, Cx, Cy;
        printf ("Введіть Ax.. ");       scanf ("%i", &Ax); // 
        printf ("Введіть Ay.. ");       scanf ("%i", &Ay); // ввід
        printf ("Введіть Bx.. ");       scanf ("%i", &Bx); // вхідних
        printf ("Введіть By.. ");       scanf ("%i", &By); // даних
        printf ("Введіть Cx.. ");       scanf ("%i", &Cx); // 
        printf ("Введіть Cy.. ");       scanf ("%i", &Cy); //

но так и сделано.или я не это самое или вы что-то не так поняли.
KD8
1 / 1 / 0
Регистрация: 02.01.2012
Сообщений: 27
08.01.2012, 18:52  [ТС]     Площадь треугольника #11
1>------ Построение начато: проект: Площадь 4, Конфигурация: Debug Win32 ------
1>Построение начато 08.01.2012 16:50:03.
1>PrepareForBuild:
1> Создание каталога "c:\documents and settings\svetlana\мои документы\visual studio 2010\Projects\Площадь 4\Debug\".
1>InitializeBuildStatus:
1> Создание "Debug\Площадь 4.unsuccessfulbuild", так как было задано "AlwaysCreate".
1>ClCompile:
1> Площадь.cpp
1>c:\documents and settings\svetlana\мои документы\visual studio 2010\projects\площадь 4\площадь 4\площадь.cpp(26): error C2059: синтаксическая ошибка: )
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:02.96
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


где ошибочка))

Добавлено через 1 минуту
Хотя нет, я нашел ошибку)))там лишняя скобка)))спасибо, парень))) удачи!!!))
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
08.01.2012, 18:55     Площадь треугольника #12
Решение:
1) Высчитываете длины 3 сторон. Сторона - расстояние между 2 точками. Формула: sqrt((x2-x1)+(y2-y1))
2) Рассчитываете площадь по формуле Герона

Добавлено через 1 минуту
опоздал...
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
08.01.2012, 18:57     Площадь треугольника #13
Вот, если не делать проверку, на возможность существования треугольнака
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
typedef struct point
{
    double x;
    double y;
} point_t;
 
 
int main(void)
{
    point_t *arr;
    int count = 3;
    int i;
    int j;
    double a[3], p;
    int x = 0;
 
    if ( ! ( arr = (point_t *) malloc (count * sizeof(point_t) ) ) )
    {
        fprintf (stderr, " Error memory\n ");
        system ("pause");
        exit (1);
    }
 
    for ( i = 0 ; i < count ; ++i)
    {
        printf (" Enter %c[x,y] = ", 'A'  + i);
        scanf ("%lf %lf", &arr[i].x, &arr[i].y);
    }
 
    for ( i = 0 ; i < count ; ++i)
    {
        for ( j = i + 1 ; j < count ; ++j)
            a[x++] = sqrt ( pow ( arr[j].x - arr[i].x, 2) + pow ( arr[j].y - arr[i].y, 2) ) ;
    }
 
    free ( arr );
 
    p = (a[0] + a[1] + a[2] ) / 2 ;
    printf ("Sq = %.2lf \n", sqrt (p * (p - a[0]) * (p - a[1]) * (p - a[2]) ) );
 
    system ("pause");
    return 0;
}
KD8
1 / 1 / 0
Регистрация: 02.01.2012
Сообщений: 27
08.01.2012, 19:15  [ТС]     Площадь треугольника #14
go, извини за наглость, но не мог бы ты прокомментировать, что где происходит?=)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
08.01.2012, 19:24     Площадь треугольника #15
KD8, вот
Прокомментировал
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
typedef struct point
{
        double x;
        double y;
} point_t;
 
 
int main(void)
{
        point_t *arr;
        int count = 3;
        int i;
        int j;
        double a[3], p;
        int x = 0; // Индекс
 
        if ( ! ( arr = (point_t *) malloc (count * sizeof(point_t) ) ) ) // Выделение памяти
        {
                fprintf (stderr, " Error memory\n ");
                system ("pause");
                exit (1);
        }
 
        for ( i = 0 ; i < count ; ++i) // Ввод точек
        {
                printf (" Enter %c[x,y] = ", 'A'  + i);
                scanf ("%lf %lf", &arr[i].x, &arr[i].y);
        }
 
        for ( i = 0 ; i < count ; ++i ) // Вычисление длин сторон
        {
                for ( j = i + 1 ; j < count ; ++j)
                        a[x++] = sqrt ( pow ( arr[j].x - arr[i].x, 2) + pow ( arr[j].y - arr[i].y, 2) ) ;
        } 
 
        free ( arr ); // Освобождение памяти
 
        p = (a[0] + a[1] + a[2] ) / 2 ; // Полупериметр
        printf ("Sq = %.2lf \n", sqrt (p * (p - a[0]) * (p - a[1]) * (p - a[2]) ) ); // Площадь
 
        system ("pause"); 
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2012, 19:24     Площадь треугольника
Еще ссылки по теме:

Дана сторона равностороннего треугольника. Найти площадь этого треугольника, его высоты, радиусы вписанной и описанной окружностей. C++
C++ Площадь треугольника
По длинам двух сторон некоторого треугольника и углу между ними найти длину третьей стороны и площадь этого треугольника C++

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

Или воспользуйтесь поиском по форуму:
Апострофф
Заблокирован
08.01.2012, 19:24     Площадь треугольника #16
Герон очень расстроился бы, узнав про применение его формулы в данном контексте!
Visual Basic
1
Get_3AngleSqr = ((a.X – c.X) * (b.Y – c.Y) – (b.X – c.X) * (a.Y – c.Y)) / 2
Не думаю, что в С++ данная конструкция намного сложнее, зато работает на порядок(если не больше) быстрее
Yandex
Объявления
08.01.2012, 19:24     Площадь треугольника
Ответ Создать тему
Опции темы

Текущее время: 20:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru