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

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

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

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

26.05.2013, 18:04. Просмотров 786. Ответов 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;
 
 
}
Может быть кто-нибудь из присутствующих знает, как реализовать это все
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 18:04     Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов
Посмотрите здесь:
Реализовать класс Goods используя для представления цены класс Money C++
C++ Реализовать класс ModelWindow, добавив поле для курсора, используя для представления поля класс Cursor
C++ Создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны.
Реализовать класс ассоциативная таблица для представления списков вида имя=значение C++
Создать класс Angle для работы с углами C++
C++ ООП. Класс Angle для работы с углами на плоскости.
C++ Класс Quadrangle (четырехугольник). Класс хранит Декартовы координаты четырех углов четырехугольника
Класс Matrix: реализовать шаблонный класс для двумерных массивов C++
Реализовать контейнерный класс в соответствии с вариантом задания C++
C++ Разработать класс для представления сведений о студенте
Создать класс для представления простой дроби C++
C++ Класс Triangle

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

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

Добавлено через 49 минут
Хотя если честно, то все равно не понял. Может кто подробнее объяснит?
Yandex
Объявления
26.05.2013, 19:41     Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов
Ответ Создать тему
Опции темы

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