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

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

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

Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов - C++

26.05.2013, 18:04. Просмотров 889. Ответов 4
Метки нет (Все метки)

Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов. Собственно вот такая проблема. Не могу никак связать эти две задачи. Ну не получается. Вроде 25 и 26 сделал, но соединить их никак не получается. Условие и код самих задач прилагается.
Задание 25:
Создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны. Требуется реализовать операции: получения и изменения полей данных, вычисления площади, вычисления периметра, вычисления высот, а также определения вида треугольника (равносторонний, равнобедренный или прямоугольный).
Задание 26:
Создать класс Angle для работы с углами на плоскости, задаваемыми величинами в градусах и минутах. Обязательно должны быть реализованы: перевод в радианы, приведение к диапазону 0-360, увеличение и уменьшение угла на заданную величину, получение синуса, сравнение углов.
Код 25 и 26 задачи: (разделю на 3 части, т.к. не знаю как тут все в один сделать)
Заголовочный (h)
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
#ifndef TRIANGLE_CLASS
#define TRIANGLE_CLASS
 
#include <string>
 
using namespace std;
 
class triangle{
      public:
            
            triangle(double _a = 0,double _b = 0,double _c = 0,int _corner1 = 0,int _corner2 = 0,int _corner3 = 0) : a(_a),b(_b),c(_c),corner1(_corner1),corner2(_corner2),corner3(_corner3){};
            ~triangle() {}; 
             void Read();
             void Display();
             string Type();
             double Square();
             double Perimeter();
             double Hight();
             string toString();
             int Control();
 
 
      private:
              double a;
              double b;
              double c;
              double corner1;
              double corner2;
              double corner3;
              double ha,hc,hb;
              int control;
 
};
 
 
triangle make_triangle(double _a,double _b,double _c,int _corner1,int _corner2,int _corner3);
#endif
Файл cpp:
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
#include <iostream>
#include "triangle.h"
#include <string>
#include <cmath>
#include <sstream>
 
//____________________________________________________________________________________toString
string triangle::toString(){
string Res;
 
string sha,shb,shc;
 
//Sides
    ostringstream sta;
    sta << a;
    ostringstream stb;
    stb << b;
    ostringstream stc;
    stc << c;
//corners
    ostringstream sc1;
    sc1 << corner1;
    ostringstream sc2;
    sc2 << corner2;
    ostringstream sc3;
    sc3 << corner3;
//parameters
 
    ostringstream ssqu;
    ssqu << Square();
    ostringstream sper;
    sper << Perimeter();
    
//Hights
    Hight();
    ostringstream ssha;
    ssha << ha;
//    sha=ssha.str();
 
    ostringstream sshb;
    sshb << hb;
//    shb=sshb.str();
 
        ostringstream sshc;
    sshc << hc;
//    shc=sshc.str();
 
 
    
//String
    Res="Triangle("+sta.str()+","+stb.str()+","+stc.str()+") with ("+sc1.str()+","+sc2.str()+","+sc3.str()+") corners is "+Type()+".  It is "+sper.str()+" long and "+ssqu.str()+" area. Heights are: "+ssha.str()+" to A, "+sshb.str()+" to B, "+sshc.str()+" to C." ;
    return Res;
       }
 
void triangle::Read(){
 
     if (control==1){
                     std::cout << "Side A: ";
                     std::cin >> a;
                     std::cout << "Side B: ";
                     std::cin >> b;
                     std::cout << "Side C: ";
                     std::cin >> c;
 
                     corner1=acos((c*c+b*b-a*a)/(2*c*b))*180/M_PI;
                     corner2=acos((c*c+a*a-b*b)/(2*c*a))*180/M_PI;
                     corner3=180-(corner1+corner2);
                     };
 
     if (control==2){
                     std::cout << "Corner 1: ";
                     std::cin >> corner1;
                     std::cout << "Corner 2: ";
                     std::cin >> corner2;
                     std::cout << "Side A: ";
                     std::cin >> a;
 
                     corner3=180-(corner1+corner2);
                     b=(a*((sin(corner1*M_PI/180))/(sin(corner3*M_PI/180))));
                     c=(a*((sin(corner2*M_PI/180))/(sin(corner3*M_PI/180))));
 
                    std::cout << "Sin ^1: "<<sin(corner1*M_PI/180)<<" Sin ^2: "<<sin(corner2*M_PI/180)<<" Sin ^3: "<<sin(corner3*M_PI/180)<< std::endl ;
                     };
 
if (control==3){
                     std::cout << "Corner 1: ";
                     std::cin >> corner1;
                     std::cout << "Side B: ";
                     std::cin >> b;
                     std::cout << "Side C: ";
                     std::cin >> c;
 
                     a=(sqrt(pow(b,2)+ pow(c,2)- (2*c*b*cos(corner1*M_PI/180))));
                     corner2=acos((pow(c,2)+pow(a,2)-pow(b,2))/(2*c*a))*180/M_PI;
                     corner3=180-(corner1+corner2);
                     };
     std::cout << std::endl<< std::endl;
     }
 
int triangle::Control(){
     std::cout << "IF U know 3 sides - press 1"<<std::endl<<"IF U know 2 corners and 1 side - press 2 "<<std::endl<<"IF U know 2 sides and 1 corner - press 3 "<<std::endl;
     std::cin >> control;
     return control;
     }
 
 
 
void triangle::Display(){
     std::cout<<"Side A="<<a<<endl<<"Side B="<<b<<endl<<"Side C="<<c<<endl<<"First corner="<<corner1<<endl<<"Second corner="<<corner2<<endl<<"Third corner="<<corner3<<endl<<endl<<endl;
     }
 
 
double triangle::Square(){
    return sqrt(Perimeter()/2*(Perimeter()/2-a)*(Perimeter()/2-b)*(Perimeter()/2-c));;
    }
 
double triangle::Perimeter(){
return a+b+c;
};
 
 
 
double triangle::Hight(){
//double ha,hb,hc;
 
 
ha=2*Square()/a;
hb=2*Square()/b;
hc=2*Square()/c;
 
 
return ha,hb,hc;
};
 
string triangle::Type(){
       string q,result;
       q="";
       if ((corner1!=corner2)&&(corner2!=corner3)&&(corner1!=corner3)) result="Normal";
       else
       if ((corner1==corner2)&&(corner2==corner3)&&(corner3==corner1)) result="Equilateral(3 sides)";
       else
       if ((corner1==corner2) || (corner2==corner3) ||(corner3==corner1)) result="Equilateral(2 sides)";
       if ((corner1==90) || (corner2==90) || (corner3==90)) q=" Pr.corner ";
       return q+result;
       }
 
 
triangle make_triangle(double _a,double _b,double _c,int _corner1,int _corner2,int _corner3) {
return triangle(_a, _b, _c, _corner1, _corner2, _corner3);
}
Файл 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
#include <cstdlib>
#include <iostream>
#include "triangle.h"
using namespace std;
 
int main()
{
    triangle t1;
    t1=make_triangle(0,0,0,0,0,0);
 
    cout << "CREATED Triangle "<<endl;
    t1.Display();
 
    cout << "Write NEW triangle:"<<endl;
    t1.Control();
    t1.Read();
 
 
 
 
 
 
    cout << "Triangle now "<<endl;
    t1.Display();
 
 
    cout << "Type = "<<t1.Type()<<endl;
 
    cout << "Perimeter = "<<t1.Perimeter()<<endl;
 
    cout << "Square = "<<t1.Square()<<endl;
 
 
    cout<<endl<<endl;
 
    cout<<t1.toString()<<endl<<endl<<endl;
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
И соответственно 26 задача.
Заголовочный файл (h):
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
#ifndef ANGLE_CLASS
#define ANGLE_CLASS
 
using namespace std;
 
class angle{
      public:
             angle(double _degree=0, double _minute=0) : degree(_degree),minute(_minute){};
            ~angle() {};
             void Read();
             void Control();
             void Display();
             void toRadians();
             void to360();
             void angleSinus();
             void Add( angle&);
             bool Compare(const angle&);
             string toString();
 
 
      protected:
             int degree;
             int minute;
             int input_result;
             double radians;
             double grad360;
             double sinus;
 
};
 
#endif
Файл cpp:
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
#include <iostream>
#include "angle.h"
#include <string>
#include "math.h"
#include <sstream>
//-------------------------------------------------------------------------------------------
void angle::Read(){
        std::cout<<"Write Degrees ";
        std::cin>>degree;
 
        std::cout<<"Write Minutes ";
        std::cin>>minute;
        Control();
        }
//-------------------------------------------------------------------------------------------
void angle::Display(){
    std::cout<<"Following pimordial values"<<std::endl;
    std::cout<<"Degree = "<<degree<<std::endl;
    std::cout<<"Minute = "<<minute<<std::endl;
 
    std::cout<<"Radian = "<<radians<<std::endl;
    std::cout<<"Gradus 0-360 = "<<grad360<<std::endl;
    std::cout<<"Sinus = "<<sinus<<std::endl;
    std::cout<<std::endl<<std::endl<<std::endl;
 
}
void angle::toRadians(){
radians=(degree+minute/60)*(M_PI/180);
}
void angle::to360(){
grad360=(int)round(radians*180/M_PI)%360;
}
void angle::angleSinus(){
sinus=sin(radians);
}
void angle::Add( angle& other){
    int a;
    a=degree;
    degree=degree+other.degree;
    other.degree=a;
    int b;
    b=minute;
    minute=minute+other.minute;
    other.minute=b;
    toRadians();
    to360();
    angleSinus();
}
bool angle::Compare(const angle& other){
    cout<<radians<<" vs "<<other.radians<<endl;
    return radians<other.radians;
 
}
void angle::Control(){
    if (minute>59) {
        degree=degree+int(minute/60);
        minute=minute%60;
                    }
}
//====tostring
string angle::toString() {
string Res;
//parameter
    ostringstream stdeg;
    stdeg << degree;
    ostringstream stmin;
    stmin << minute;
//values
    ostringstream strad;
    strad << radians;
    ostringstream stsin;
    stsin << sinus;
//srtring
    Res="So, for "+stdeg.str()+" deg, "+stmin.str()+" min angle sinus = "+stsin.str()+" , and radians = "+strad.str();
    return Res;
}
//===========================================================================================
 
angle make_angle(double _degree, double _minute) {
return angle(_degree,_minute);
}
Файл 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
#include <iostream>
#include "angle.h"
#include <string>
using namespace std;
 
int main()
{
 
angle Ang1,Ang2;
 
    Ang1=make_angle(0,0);
    Ang2=make_angle(0,0);
 
    Ang1.Read();
 
    Ang1.toRadians();
    Ang1.to360();
    Ang1.angleSinus();
 
    Ang1.Display();
 
 
cout<<endl<<endl<<"Now we start to change the values"<<endl<<endl;
 
    Ang2.Read();
 
    Ang1.Add(Ang2);
    Ang2.toRadians();
    Ang2.to360();
    Ang2.angleSinus();
 
cout<<endl<<endl<<endl;
 
    Ang2.Display();
    Ang1.Display();
 
cout<<endl<<endl<<"Now we start to compare the values"<<endl<<endl;
 
if((Ang1.Compare(Ang2)==true)) cout << "2nd angle << 1st angle" << endl;
else cout << "2nd angle >> 1st angle" << endl;
 
cout<<endl<<"Now TO STRING!!!"<<endl;
    cout<<Ang2.toString()<<endl;
    cout<<Ang1.toString()<<endl<<endl<<endl;
 
    system("PAUSE");
    return EXIT_SUCCESS;
 
 
}
Может быть кто-нибудь из присутствующих знает, как реализовать это все
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 18:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов (C++):

Реализовать класс Goods используя для представления цены класс Money - C++
Реализовать класс Goods (пункт 1 ), используя для представления цены класс Money с пункта 2 Реализовать метод уценки товара, уменьшая цену...

Реализовать класс ModelWindow, добавив поле для курсора, используя для представления поля класс Cursor - C++
Реализовать класс ModelWindow, добавив поле для курсора. Используйте для представления поля класс Cursor. (это под типом класс в классе).

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

Реализовать класс ассоциативная таблица для представления списков вида имя=значение - C++
I. Реализовать класс 1. Ассоциативная таблица для представления списков вида имя=значение и словарей fish рыба class ATable { ...

Создать класс Angle для работы с углами - C++
Здравствуйте, Создать класс Angle для работы с углами на плоскости, задаваемыми величинами в градусах и минутах. Обязательно должны быть...

ООП. Класс Angle для работы с углами на плоскости. - C++
Создать класс Angle для работы с углами на плоскости, задаваемыми величинами в градусах и минутах. Обязательно должны быть реализованы:...

4
zss
Модератор
Эксперт С++
6587 / 6149 / 2025
Регистрация: 18.12.2011
Сообщений: 16,034
Завершенные тесты: 1
26.05.2013, 18:07 #2
В класс Triangle вместо полей
double corner1;
double corner2;
double corner3;
вставляете
Angle corner1;
Angle corner2;
Angle corner3;
0
skande
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 7
26.05.2013, 18:19  [ТС] #3
т.е. переделываем программу под 2 заголовочных файла и под 2 cpp и в main записываем из двух программ в одну и в одном из заголовочных меняем на Angle?
0
zss
Модератор
Эксперт С++
6587 / 6149 / 2025
Регистрация: 18.12.2011
Сообщений: 16,034
Завершенные тесты: 1
26.05.2013, 18:40 #4
В объявлении класса Triangle меняем на Angle.
И, соответственно, правим код везде, где встречаются переменные
corner1,corner2,corner3 в соответствии с правилами использования класса Angle.
0
skande
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 7
26.05.2013, 19:41  [ТС] #5
Спасибо. Будем пытаться сделать)

Добавлено через 49 минут
Хотя если честно, то все равно не понял. Может кто подробнее объяснит?
0
26.05.2013, 19:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 19:41
Привет! Вот еще темы с ответами:

Класс Quadrangle (четырехугольник). Класс хранит Декартовы координаты четырех углов четырехугольника - C++
Класс Quadrangle (четырехугольник). Класс хранит Декартовы координаты четырех углов четырехугольника. Конструктор принимает четыре группы...

Класс Matrix: реализовать шаблонный класс для двумерных массивов - C++
Доброго времени суток. У меня вопрос: я создал класс Array со внутренним динамическим массивом и объекты этого типа смог создать и я ими...

Реализовать контейнерный класс в соответствии с вариантом задания - C++
Доброго времени суток всем.у меня огромные проблемы нужно написать программу в С++ а я не умею... прошу вас помогите люди добрые. ...

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


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

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

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