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

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

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

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

08.01.2012, 17:48. Просмотров 1814. Ответов 15
Метки нет (Все метки)

Составить программу, которая по трем координатам, которые вводит пользователь, считает площадь фигуры, ограниченной этими координатами. Помогите плиз)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2012, 17:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Площадь треугольника (C++):

Два треугольника заданы координатами своих вершин A,B,C. Вычислить площадь треугольника и определить какой треугольник имеет большую площадь - C++
Два треугольника заданы координатами своих вершин A,B,C. Вычислить площадь треугольника и определить какой треугольник имеет большую...

Зная площадь прямоугольного треугольника и угол при основании, найти все стороны треугольника - C++
Требования к программе: - Входные данные ввести с помощью стандартных процедур ввода; - На печать вывести значение входной переменной и...

Заданы длины двух сторон треугольника и угол между ними. найти площадь треугольника? - C++
Заданы длины двух сторон треугольника и угол между ними. найти площадь треугольника?

Даны три положительных числа а, b, с. Проверить, будут ли они сторонами треугольника. Если да, то вычислить площадь этого треугольника. - C++
Помогите, пожалуйста, исправить здесь ошибку времени... #include<iostream> #include<cmath> using namespace std; void main() { ...

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

По длинам двух сторон некоторого треугольника и углу между ними найти длину третьей стороны и площадь этого треугольника - C++
Привет всем. Помогите исправить программу. Вот задача: По длинам двух сторон некоторого треугольника и углу между ними найти длину...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
4286 / 1408 / 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
4286 / 1408 / 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
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
08.01.2012, 18:55 #12
Решение:
1) Высчитываете длины 3 сторон. Сторона - расстояние между 2 точками. Формула: sqrt((x2-x1)+(y2-y1))
2) Рассчитываете площадь по формуле Герона

Добавлено через 1 минуту
опоздал...
go
Эксперт C++
3586 / 1366 / 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++
3586 / 1366 / 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++
Нужно вычислить площадь n-треугольников по координатам вершин и найти максимальную из них.Вычислить вроде получается,а вот с выделение...

Площадь треугольника - C++
Помогите пожалуйста! Ошибку выдаёт в 13-14 строчках. Как правильно записать Р как функцию? Даны стороны треугольника a, b, c. Найти его...

Площадь треугольника - C++
Нужно найти площадь треугольника по введеным сторонам a и b и углу C Программу написал, но она находит какие то непонятные значения....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.01.2012, 19:24
Ответ Создать тему
Опции темы

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