Advertisement
wincomm

Untitled

Dec 22nd, 2014
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.37 KB | None | 0 0
  1. #include <iostream>
  2. #include "math.h"
  3.  
  4. using namespace std;
  5.  
  6. class paral
  7. {
  8. public:
  9.     paral(float sAB, float sBC, float aA, float aB); //прототип конструктора с параметрами
  10.     paral();  //прототип конструктора без параметров
  11.     ~paral();  //прототип деструктора
  12.     float getSquare();  //прототип поиска площади
  13.     float getPerimeter();  //прототип поиска периметра
  14.     friend ostream& operator << (ostream& stream, const paral& p); //прототип функции перегрузки потока вывода
  15.     friend istream& operator >> (istream& stream, paral& p); //прототип функции перегрузки потока ввода
  16.     static int i;  //прототип статичной переменной (счетчика объектов(праллелограммов))
  17.     static int getI();  //прототип функции, возвращающей счетчик
  18. private:
  19.     float sideABandCD, sideBCandAD, angleA, angleB;  //закрытые переменные (стороны, углы)
  20. };
  21.  
  22. class tochka
  23. {
  24.     public:
  25.         float x,y,angle;  //координата Х, координата Y и угол.
  26.         float distance();  //прототип функции нахождения расстояния от точки до начала координат
  27.         float distance(tochka a);  //прототип функции нахождения расстояния от точки до точки
  28.         tochka() {}  //конструктор без параметров с описанием ({} - это описание)
  29.         tochka(float x1, float y1);  //прототип конструктора с параметрами (без описания)
  30.     };
  31.  
  32. class paralTochka
  33. {
  34. public:
  35.     paralTochka(tochka a, tochka b, tochka c, tochka d) : A(a), B(b), C(c), D(d) {}
  36.     ~paralTochka() {}
  37.     float getSquare();
  38.     float getPerimeter();
  39.     friend ostream& operator << (ostream& stream, paralTochka& p); //прототип функции перегрузки потока вывода
  40.     friend istream& operator >> (istream& stream, paralTochka& p); //прототип функции перегрузки потока ввода
  41. private:
  42.     tochka A, B, C, D; //переменные типа point (вершины пар-ма)
  43. };
  44.  
  45. paral::paral(float sAB, float sBC, float aA, float aB) //конструктор класса с передаваемыми параметрами
  46. {
  47.     sideABandCD = sAB;
  48.     sideBCandAD = sBC;
  49.     angleA = aA;
  50.     angleB = aB;
  51.     i++;  //наращиваем счетчик
  52. }
  53.  
  54. paral::paral() //конструктор без параметров
  55. {
  56.     i++;
  57. }
  58.  
  59. paral::~paral() //деструктор
  60. {
  61.         i--;
  62. }
  63.  
  64. int paral::i = 0;  //инициализация статической переменной
  65.  
  66. int paral::getI() //инициализация статической функции, возвращающей счетчик количества объектов
  67. {
  68.     return i;
  69. }
  70.  
  71. float paral::getSquare() //функция нахождения площади
  72. {
  73.     return abs(sideABandCD *sideBCandAD*sin((angleA*3.14)/180));
  74. }
  75.  
  76. float paral::getPerimeter() //функция нахождения периметра
  77. {
  78.     return 2 * sideABandCD + 2 * sideBCandAD;
  79. }
  80.  
  81. istream& operator>>(istream& stream, paral& p) //перегрузка оператора ввода
  82. {
  83.     stream>>p.sideABandCD>>p.sideBCandAD>>p.angleA>>p.angleB;
  84.     return stream;
  85. }
  86.  
  87. ostream& operator<<(ostream& stream, const paral& p) //перегрузка оператора вывода
  88. {
  89.     stream<<"Стороны АB и СD= "<<p.sideABandCD<<endl<<"Стороны ВC и AD= "<<p.sideBCandAD<<endl<<"Углы A и С= "<<p.angleA<<endl<<"Углы B и D= "<<p.angleB<<endl;
  90.     return stream;
  91. }
  92.  
  93.  
  94.  
  95.  
  96. tochka::tochka(float x1, float y1)
  97. {
  98.     x=x1; y=y1;
  99. }
  100.  
  101. float tochka::distance() //функция нахождения расстояния от точки до начала координат
  102. {
  103.     return pow(pow(x,2)+pow(y,2),0.5);
  104. }
  105.  
  106. float tochka::distance(tochka a) //функция нахождения расстояния от точки до точки
  107. {
  108.     return pow(pow(x-a.x,2)+pow(y-a.y,2),0.5);
  109. }
  110.  
  111. float paralTochka::getPerimeter() //функция нахождения периметра
  112. {
  113.     return (A.distance(B)+A.distance(D))*2;
  114. }
  115.  
  116. float paralTochka::getSquare() //функция нахождения площади
  117. {
  118.     A.angle = acos((A.x*B.x + A.y*B.y) / ((sqrt(pow(A.x, 2) + pow(A.y, 2)))*(sqrt(pow(B.x, 2) + pow(B.y, 2)))));
  119.     return abs(A.distance(B)*A.distance(D)*sin((A.angle * 180/3.14)));
  120. }
  121.  
  122. istream& operator >> (istream& stream, paralTochka& p) //перегрузка оператора ввода
  123. {
  124.     stream>>p.A.x>>p.A.y>>p.B.x>>p.B.y >>p.C.x>>p.C.y>>p.D.x>>p.D.y;
  125.     return stream;
  126. }
  127.  
  128. ostream& operator << (ostream& stream, paralTochka& p) //перегрузка оператора вывода
  129. {
  130.     stream<<"Стороны АB и CD: "<<p.A.distance(p.B)<<endl<<"Стороны AD и BC: "<<p.A.distance(p.D)<<endl;
  131.     return stream;
  132. }
  133.  
  134. int main()
  135. {
  136.     setlocale(LC_ALL, "Russian");
  137.     tochka a(0, 0), b(0, 0), c(0,0), d(0, 0);
  138.     paralTochka par(a,b,c,d);
  139.     cout<<"Введите координаты:"<<endl;
  140.     cin>>par;
  141.     cout<<par;
  142.     cout<<"P= "<<par.getPerimeter()<<" S= "<<par.getSquare()<<endl;
  143.     par.~paralTochka();
  144.     system("pause");
  145.     return 0;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement