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

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

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

Найти ошибки в реализации класса треуголник на плоскости - C++

13.08.2015, 13:35. Просмотров 232. Ответов 7
Метки нет (Все метки)

Реализовать класс "Треугольник на плоскости". Поля - координаты вершин. Методы - подсчет площади по формуле Герона, проверка треугольника на существование. А у меня похоже что не по координатам вершин а по трем сторонам..но тогда как же считать по формуле Герона если там нужны стороны? Я запутался окончательно. Уже несколько часов сижу и ничего не соображаю!
Помогите решить! Я ничего не понимаю!
C++ (Qt)
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
class Triangle
{
private:  int s1,s2,s3; //ввод трех сторон треугольника
 
public: Triangle (int a,int b,int c)
        {
          s1=a;
          s2=b;
          s3=c;
        }
        float ploshad()
         {
 
        float s,p;
        s=0;
        p=0;
             if(YesTriangle())
                     {
                        p=(s1+s2+s3)/2;
    s=sqrt(p * (p - s1) * (p - s2) * (p - s3)); //Формула Герна
                     }
           else
           {
            printf("Triangle dont exist");
            s=-1;
           }
        return s;
         }
 
private: bool YesTriangle()
    {
        if(s1+s2>s3 && s1+s3>s2 && s2+s3>s1)
                 return true;
        else
                 return false;
    }
 
};
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <QCoreApplication>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <tr.cpp>
 
int main()
{
  int aa,bb,cc;
  float w;
  printf("Vvedite storoni : ");
  scanf("%d %d %d",&aa,&bb,&cc);
  Triangle Tr (aa,bb,cc);
  w=Tr.ploshad();
  printf("Ploshad ravna %f",w);
  getch();
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2015, 13:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти ошибки в реализации класса треуголник на плоскости (C++):

Ошибки в реализации класса Vector3D - C++
Здравствуйте. Помогите дурачку. Создать класс Vector3D. Реализовать: сложение векторов, скалярное умножение векторов, умножение вектора...

Найти и исправить ошибки в реализации алгоритма Дейкстры - C++
Алгоритм Дейкстры (построение путей с минимальными цепями) #include&lt;iostream.h&gt; #include&lt;string.h&gt; #include&lt;stdio.h&gt; ...

Отделение интерфейса от реализации класса: компиляция кода реализации - C++
Доброго времени суток, У меня возникла проблема с отделением интерфейса от реализации класса. Допустим, у меня есть три файла: 1....

Ошибки "Expression syntax" и "Unreachable code" при реализации класса матриц - C++
Подскажите по коду. #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;windows.h&gt; ...

Проектирование класса Matrix и его использование - найти ошибки в коде - C++
Задание было следующим. Проектирование класса Matrix (матрица). Как минимум, объекты этого класса должны создаваться; &quot;пустые&quot;...

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

7
John Prick
831 / 764 / 154
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.08.2015, 13:41 #2
Цитата Сообщение от EgorVans Посмотреть сообщение
Поля - координаты вершин.
Значит полей должно быть 6, а не 3.
C++
1
2
3
4
5
class Triangle
{
    double Ax, Ay, Bx, By, Cx, Cy;
// ...
};
Это во-первых.

Во-вторых, длины сторон по координатам определить элементарно:
C++
1
2
double a = sqrt((Ax - Bx) * (Ax - Bx) + (Ay - By) * (Ay - By));
// и так далее
Ну и по длинам сторон уже вычислить площадь.
0
EgorVans
0 / 0 / 0
Регистрация: 13.07.2015
Сообщений: 34
13.08.2015, 15:21  [ТС] #3
Цитата Сообщение от John Prick Посмотреть сообщение
) * (Ay - By));
А не могли бы вы мне изменить код...Я просто ничего не понимаю. Я понял только что сначала вводятся координаты по ним строится треугольник, потом по координатам считается длина стороны, и из длины стороны, по формуле Герона считается площадь. А уже в конце должна быть проверка на существование..Я даже не представляю как это писать
0
John Prick
831 / 764 / 154
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.08.2015, 15:36 #4
Цитата Сообщение от EgorVans Посмотреть сообщение
А уже в конце должна быть проверка на существование.
Если вводить координаты вершин, то проверка не нужна: треугольник будет существовать всегда.

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
class Triangle
{
private:
    double Ax, Ay, Bx, By, Cx, Cy;
 
public:
    Triangle (double ax, double ay, double bx, double by, double cx, double cy) :
    Ax(ax), Ay(ay), Bx(bx), By(by), Cx(cx), Cy(cy)
    {}
    double ploshad()
    {
        double s1 = sqrt((Ax - Bx) * (Ax - Bx) + (Ay - By) * (Ay - By));
        double s2 = sqrt((Bx - Cx) * (Bx - Cx) + (By - Cy) * (By - Cy));
        double s3 = sqrt((Cx - Ax) * (Cx - Ax) + (Cy - Ay) * (Cy - Ay));
        double p = (s1 + s2 + s3) / 2;
        double s = sqrt(p * (p - s1) * (p - s2) * (p - s3)); //Формула Герона
        return s;
    }
};
 
// ----------------
 
#include <QCoreApplication>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
int main()
{
  double ax, ay, bx, by, cx, cy;
  float w;
 
  cout << "Ax = ";
  cin >> ax;
  cout << "Ay = ";
  cin >> ay;
  cout << "Bx = ";
  cin >> bx;
  cout << "By = ";
  cin >> by;
  cout << "Cx = ";
  cin >> cx;
  cout << "Cy = ";
  cin >> cy;
 
  Triangle Tr (ax, ay, bx, by, cx, cy);
  w=Tr.ploshad();
  printf("Ploshad ravna %f",w);
  getch();
}
1
EgorVans
0 / 0 / 0
Регистрация: 13.07.2015
Сообщений: 34
13.08.2015, 23:15  [ТС] #5
John Prick, скопировал ваш код и ошибка в строке 12..
ошибка: 'sqrt' was not declared in this scope
double s1 = sqrt((Ax - Bx) * (Ax - Bx) + (Ay - By) * (Ay - By));
^
0
lss
926 / 855 / 282
Регистрация: 10.10.2012
Сообщений: 2,705
13.08.2015, 23:19 #6
Цитата Сообщение от John Prick Посмотреть сообщение
#include <math.h>
До вызова sqrt() должен быть.
1
rusack007
22 / 22 / 9
Регистрация: 30.07.2015
Сообщений: 161
13.08.2015, 23:40 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
// Autorun.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
 
class Triangle
{
private:
    double Ax, Ay, Bx, By, Cx, Cy;
 
public:
    Triangle (double ax, double ay, double bx, double by, double cx, double cy) :
    Ax(ax), Ay(ay), Bx(bx), By(by), Cx(cx), Cy(cy)
    {}
    double ploshad()
    {
        double s1 = sqrt((Ax - Bx) * (Ax - Bx) + (Ay - By) * (Ay - By));
        double s2 = sqrt((Bx - Cx) * (Bx - Cx) + (By - Cy) * (By - Cy));
        double s3 = sqrt((Cx - Ax) * (Cx - Ax) + (Cy - Ay) * (Cy - Ay));
        double p = (s1 + s2 + s3) / 2;
        double s = sqrt(p * (p - s1) * (p - s2) * (p - s3)); //Формула Герона
        return s;
    }
};
 
// ----------------
 
int main()
{
  double ax, ay, bx, by, cx, cy;
  float w;
 
  cout << "Ax = ";
  cin >> ax;
  cout << "Ay = ";
  cin >> ay;
  cout << "Bx = ";
  cin >> bx;
  cout << "By = ";
  cin >> by;
  cout << "Cx = ";
  cin >> cx;
  cout << "Cy = ";
  cin >> cy;
 
  Triangle Tr (ax, ay, bx, by, cx, cy);
  w=Tr.ploshad();
  printf("Ploshad ravna %f",w);
  _getch();
}
Если не в VS, то чуть подредактируйте. Думаю, справитесь
0
John Prick
831 / 764 / 154
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
14.08.2015, 01:08 #8
Цитата Сообщение от EgorVans Посмотреть сообщение
скопировал ваш код и ошибка в строке 12..
Да я там всё в кучу скинул. Конечно, инклуды надо поместить вначале всего кода.
0
14.08.2015, 01:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2015, 01:08
Привет! Вот еще темы с ответами:

Ошибки при реализации - C++
4) Объявить массив из 3 указателей на вещественные переменные, переменные разместить в: a) статической памяти, b) динамической памяти....

Создать два класса: PointXY с данными x, y (точка на плоскости в декартовых координатах) и PointPolar с данными r, phi (точка на плоскости в полярных - C++
Создать два класса: PointXY с данными x, y (точка на плоскости в декартовых координатах) и PointPolar с данными r, phi (точка на плоскости...

Инициализация поля класса (строки в стиле Си): найти причину возникновения ошибки и исправить эту ошибку - C++
Начинаю учить C++ и хочу сделать что-то типо &quot;игры&quot; в текстовом варианте. Вот столкнулся с проблемой - хранение бонусов при ответе,...

Трудности в реализации класса - C++
Не могу понять, почему не работают конструкторы класса... Прошу понятного объяснения=) вот код 1 файл #ifndef ___MAS #define ___MAS...


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

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

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