Hellko

Untitled

Apr 17th, 2013
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. class triangle {
  5. private:
  6.     double x[3],y[3],z[3];
  7. public:
  8.     triangle(void);
  9.     triangle(double[],double[],double[]);
  10.     triangle(const triangle&);
  11.     double S(void);             //Площадь
  12.     double length(int);         //Длина стороны нулевой, первой или второй.
  13.     void set(double[],double[],double[]); //Установить координаты трех вершин из трех массивов
  14.     void set(double[],int);     //Установить координаты вершины номер 0, 1 или 2 из массива
  15.     void set(int);              //Ввести вручную координаты вершины номер 0, 1 или 2
  16.     void set(void);             //Ввести все координаты вручную.
  17.     void print(void);           //Напечатать
  18.  
  19.     void operator=(const triangle&);    //операторы члены класса
  20.     triangle operator*(double);
  21.  
  22.     friend const triangle operator ++(triangle&, int);//оператор А++ (не ++А)  //дружественные операторы
  23.     friend triangle operator+(triangle,triangle);
  24.  
  25. };
  26.  
  27. bool operator >(triangle,triangle); //глобальные операторы
  28. bool operator <=(triangle,triangle);
  29.  
  30. ///////////////////////////////////////////////////////////////////////////////////////
  31.  
  32. void triangle::operator =(const triangle& A) { //работает как копиконструктор
  33.     x[0]=A.x[0];  y[0]=A.y[0];  z[0]=A.z[0];
  34.     x[1]=A.x[1];  y[1]=A.y[1];  z[1]=A.z[1];
  35.     x[2]=A.x[2];  y[2]=A.y[2];  z[2]=A.z[2];
  36. }
  37.  
  38. triangle triangle::operator *(double A) { //умножаем все координаты на число
  39.     triangle B;
  40.     double xx[3],yy[3],zz[3];
  41.     xx[0]=x[0]*A;  yy[0]=y[0]*A;  zz[0]=z[0]*A;
  42.     xx[1]=x[1]*A;  yy[1]=y[1]*A;  zz[1]=z[1]*A;
  43.     xx[2]=x[2]*A;  yy[2]=y[2]*A;  zz[2]=z[2]*A;
  44.     B.set(xx,yy,zz);
  45.     return B;
  46. }
  47.  
  48. const triangle operator++(triangle& A,int) {//координаты тетраедра А увеличиваем на 1. Возвращаем еще не увеличеный
  49.     triangle old(A);
  50.     A.x[0]+=1;  A.y[0]+=1;  A.z[0]+=1;
  51.     A.x[1]+=1;  A.y[1]+=1;  A.z[1]+=1;
  52.     A.x[2]+=1;  A.y[2]+=1;  A.z[2]+=1;
  53.     return old;
  54. }
  55.  
  56. triangle operator+(triangle A,triangle B) {//складываем координаты
  57.     triangle C;
  58.     C.x[0]=A.x[0]+B.x[0];  C.y[0]=A.y[0]+B.y[0];  C.z[0]=A.z[0]+B.z[0];
  59.     C.x[1]=A.x[1]+B.x[1];  C.y[1]=A.y[1]+B.y[1];  C.z[1]=A.z[1]+B.z[1];
  60.     C.x[2]=A.x[2]+B.x[2];  C.y[2]=A.y[2]+B.y[2];  C.z[2]=A.z[2]+B.z[2];
  61.     return C;
  62. }
  63.  
  64. bool operator >(triangle A, triangle B) {
  65.     if(A.S()>B.S()) return 1; else return 0;
  66. }
  67.  
  68. bool operator <=(triangle A, triangle B) {
  69.     return B>A;
  70. }
  71.  
  72.  
  73.  
  74.  
  75.  
  76. void triangle::print(void) {
  77.     printf("\nTreygolnik:\n{");
  78.     for(int i=0;i<3;i++) printf("%5.2lf,",x[i]); //напечатать точку Х
  79.     printf("}\n{");
  80.     for(int i=0;i<3;i++) printf("%5.2lf,",y[i]); //напечатать точку Y
  81.     printf("}\n{");
  82.     for(int i=0;i<3;i++) printf("%5.2lf,",z[i]); //напечатать точку Z
  83.     printf("}\n");
  84. }
  85.  
  86. void triangle::set(double a[], double b[], double c[]) {
  87.     set(a,0);   //Весь массив А в точку 0
  88.     set(b,1);   //Весь массив B в точку 1
  89.     set(c,2);   //Весь массив C в точку 2
  90. }
  91.  
  92. void triangle::set(double a[], int b) {
  93.     switch(b) {                     //Если b = 0, 1 или 2 то
  94.     default: printf("\nError"); break;
  95.     case 0: x[0]=a[0]; x[1]=a[1]; x[2]=a[2]; break;  //Если 0 то записать весь массив в точку Х
  96.     case 1: y[0]=a[0]; y[1]=a[1]; y[2]=a[2]; break;  //Если 1 то записать весь массив в точку Y
  97.     case 2: z[0]=a[0]; z[1]=a[1]; z[2]=a[2]; break;  //Если 2 то записать весь массив в точку Z
  98.     }
  99. }
  100.  
  101. void triangle::set(int a) {
  102.     double q,w,e;
  103.     if(a>=0 && a<3) {
  104.         printf("\nVvod vershini %d:\nx: ", a);
  105.         scanf("%lf",&q); printf("y: ");             //считываем 3 координаты точки
  106.         scanf("%lf",&w); printf("z: ");
  107.         scanf("%lf",&e);
  108.     }
  109.     switch(a) {                                     //и записываем в зависимости от А в точку Х, Y, или Z
  110.     default: printf("\nError"); break;
  111.     case 0: x[0]=q; x[1]=w; x[2]=e; break;
  112.     case 1: y[0]=q; y[1]=w; y[2]=e; break;
  113.     case 2: z[0]=q; z[1]=w; z[2]=e; break;
  114.     }
  115. }
  116. void triangle::set(void) {
  117.     printf("\nVvod Treygolnika");
  118.     set(0); //Ввести точку 0
  119.     set(1); //Ввести точку 1
  120.     set(2); //Ввести точку 2
  121. }
  122.  
  123. triangle::triangle(void) {      //Стандартный треугольник
  124.     x[0]=0;  y[0]=6;  z[0]=3;
  125.     x[1]=0;  y[1]=8;  z[1]=4;
  126.     x[2]=0;  y[2]=0;  z[2]=5;
  127. }
  128. triangle::triangle(double a[],double b[],double c[]) {          //Треугольник по трем точкам из трех массивов
  129.     x[0]=a[0];  y[0]=b[0];  z[0]=c[0];
  130.     x[1]=a[1];  y[1]=b[1];  z[1]=c[1];
  131.     x[2]=a[2];  y[2]=b[2];  z[2]=c[2];
  132. }
  133. triangle::triangle(const triangle& A) {             //Копи конструктор
  134.     x[0]=A.x[0];  y[0]=A.y[0];  z[0]=A.z[0];
  135.     x[1]=A.x[1];  y[1]=A.y[1];  z[1]=A.z[1];
  136.     x[2]=A.x[2];  y[2]=A.y[2];  z[2]=A.z[2];
  137. }
  138. double triangle::S(void) {
  139.     double a,b,c,p;
  140.     a=length(0); //длина нулевой стороны
  141.     b=length(1); //длина 1 стороны
  142.     c=length(2); //длина 2 стороны
  143.     p=(a+b+c)/2;
  144.     return sqrt(p*(p-a)*(p-b)*(p-c));
  145. }
  146.  
  147. double triangle::length(int a) {
  148.     switch(a) {
  149.     case 0: return sqrt((y[0]-x[0])*(y[0]-x[0])+(y[1]-x[1])*(y[1]-x[1])+(y[2]-x[2])*(y[2]-x[2]));
  150.     case 1: return sqrt((z[0]-y[0])*(z[0]-y[0])+(z[1]-y[1])*(z[1]-y[1])+(z[2]-y[2])*(z[2]-y[2]));
  151.     case 2: return sqrt((z[0]-x[0])*(z[0]-x[0])+(z[1]-x[1])*(z[1]-x[1])+(z[2]-x[2])*(z[2]-x[2]));
  152.     }
  153.     return 0;
  154. }
  155.  
  156. int main() {
  157.     triangle A;
  158.     printf("%lf",A.S());
  159.     double x[3]={0,1,2};
  160.     double y[3]={2,4,6};
  161.     double z[3]={1,2,3};
  162.     double w[3]={7,5,-2};
  163.     triangle B(x,y,z);
  164.     printf("\n%lf",B.S());
  165.     triangle C(B);
  166.     printf("\n%lf",C.S());
  167.     A.print();
  168.     A.set(y,w,x);
  169.     A.print();
  170.     printf("\nDlina storoni: %lf", A.length(0));
  171.  
  172.     printf("\n\n\n\n\n\n");
  173.  
  174.  
  175.  
  176.  
  177.  
  178.     printf("\ntreygolnik A: S=%lf",A.S());
  179.     A.print();
  180.     printf("\ntreygolnik B: S=%lf",B.S());
  181.     B.print();
  182.     printf("\ntreygolnik A+B: S=%lf",(A+B).S());
  183.     (A+B).print();
  184.     printf("\ntreygolnik A*5: S=%lf", (A*5).S());
  185.     (A*5).print();
  186.     A++;
  187.     printf("\ntreygolnik A++");
  188.     A.print();
  189.     C=A+B+A*5;
  190.     printf("\ntreygolnik C=A+B+A*5: S=%lf", C.S());
  191.     C.print();
  192.     if(C>A) printf("C>A");
  193.     if(C<=A) printf("C<=A");
  194.  
  195.  
  196. }
Advertisement
Add Comment
Please, Sign In to add comment