Hellko

Untitled

May 14th, 2013
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. class triangle {
  5. protected:
  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.  
  28.  
  29. bool operator >(triangle,triangle); //глобальные операторы
  30. bool operator <=(triangle,triangle);
  31.  
  32. ///////////////////////////////////////////////////////////////////////////////////////
  33.  
  34. void triangle::operator =(const triangle& A) { //работает как копиконструктор
  35.     x[0]=A.x[0];  y[0]=A.y[0];  z[0]=A.z[0];
  36.     x[1]=A.x[1];  y[1]=A.y[1];  z[1]=A.z[1];
  37.     x[2]=A.x[2];  y[2]=A.y[2];  z[2]=A.z[2];
  38. }
  39.  
  40. triangle triangle::operator *(double A) { //умножаем все координаты на число
  41.     triangle B;
  42.     double xx[3],yy[3],zz[3];
  43.     xx[0]=x[0]*A;  yy[0]=y[0]*A;  zz[0]=z[0]*A;
  44.     xx[1]=x[1]*A;  yy[1]=y[1]*A;  zz[1]=z[1]*A;
  45.     xx[2]=x[2]*A;  yy[2]=y[2]*A;  zz[2]=z[2]*A;
  46.     B.set(xx,yy,zz);
  47.     return B;
  48. }
  49.  
  50. const triangle operator++(triangle& A,int) {//координаты тетраедра А увеличиваем на 1. Возвращаем еще не увеличеный
  51.     triangle old(A);
  52.     A.x[0]+=1;  A.y[0]+=1;  A.z[0]+=1;
  53.     A.x[1]+=1;  A.y[1]+=1;  A.z[1]+=1;
  54.     A.x[2]+=1;  A.y[2]+=1;  A.z[2]+=1;
  55.     return old;
  56. }
  57.  
  58. triangle operator+(triangle A,triangle B) {//складываем координаты
  59.     triangle C;
  60.     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];
  61.     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];
  62.     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];
  63.     return C;
  64. }
  65.  
  66. bool operator >(triangle A, triangle B) {
  67.     if(A.S()>B.S()) return 1; else return 0;
  68. }
  69.  
  70. bool operator <=(triangle A, triangle B) {
  71.     return B>A;
  72. }
  73.  
  74.  
  75.  
  76.  
  77.  
  78. void triangle::print(void) {
  79.     printf("\nTreygolnik:\n{");
  80.     for(int i=0;i<3;i++) printf("%5.2lf,",x[i]); //напечатать точку Х
  81.     printf("}\n{");
  82.     for(int i=0;i<3;i++) printf("%5.2lf,",y[i]); //напечатать точку Y
  83.     printf("}\n{");
  84.     for(int i=0;i<3;i++) printf("%5.2lf,",z[i]); //напечатать точку Z
  85.     printf("}\n");
  86. }
  87.  
  88. void triangle::set(double a[], double b[], double c[]) {
  89.     set(a,0);   //Весь массив А в точку 0
  90.     set(b,1);   //Весь массив B в точку 1
  91.     set(c,2);   //Весь массив C в точку 2
  92. }
  93.  
  94. void triangle::set(double a[], int b) {
  95.     switch(b) {                     //Если b = 0, 1 или 2 то
  96.     default: printf("\nError"); break;
  97.     case 0: x[0]=a[0]; x[1]=a[1]; x[2]=a[2]; break;  //Если 0 то записать весь массив в точку Х
  98.     case 1: y[0]=a[0]; y[1]=a[1]; y[2]=a[2]; break;  //Если 1 то записать весь массив в точку Y
  99.     case 2: z[0]=a[0]; z[1]=a[1]; z[2]=a[2]; break;  //Если 2 то записать весь массив в точку Z
  100.     }
  101. }
  102.  
  103. void triangle::set(int a) {
  104.     double q,w,e;
  105.     if(a>=0 && a<3) {
  106.         printf("\nVvod vershini %d:\nx: ", a);
  107.         scanf("%lf",&q); printf("y: ");             //считываем 3 координаты точки
  108.         scanf("%lf",&w); printf("z: ");
  109.         scanf("%lf",&e);
  110.     }
  111.     switch(a) {                                     //и записываем в зависимости от А в точку Х, Y, или Z
  112.     default: printf("\nError"); break;
  113.     case 0: x[0]=q; x[1]=w; x[2]=e; break;
  114.     case 1: y[0]=q; y[1]=w; y[2]=e; break;
  115.     case 2: z[0]=q; z[1]=w; z[2]=e; break;
  116.     }
  117. }
  118. void triangle::set(void) {
  119.     printf("\nVvod Treygolnika");
  120.     set(0); //Ввести точку 0
  121.     set(1); //Ввести точку 1
  122.     set(2); //Ввести точку 2
  123. }
  124.  
  125. triangle::triangle(void) {      //Стандартный треугольник
  126.     x[0]=0;  y[0]=6;  z[0]=3;
  127.     x[1]=0;  y[1]=8;  z[1]=4;
  128.     x[2]=0;  y[2]=0;  z[2]=5;
  129. }
  130. triangle::triangle(double a[],double b[],double c[]) {          //Треугольник по трем точкам из трех массивов
  131.     x[0]=a[0];  y[0]=b[0];  z[0]=c[0];
  132.     x[1]=a[1];  y[1]=b[1];  z[1]=c[1];
  133.     x[2]=a[2];  y[2]=b[2];  z[2]=c[2];
  134. }
  135. triangle::triangle(const triangle& A) {             //Копи конструктор
  136.     x[0]=A.x[0];  y[0]=A.y[0];  z[0]=A.z[0];
  137.     x[1]=A.x[1];  y[1]=A.y[1];  z[1]=A.z[1];
  138.     x[2]=A.x[2];  y[2]=A.y[2];  z[2]=A.z[2];
  139. }
  140. double triangle::S(void) {
  141.     double a,b,c,p;
  142.     a=length(0); //длина нулевой стороны
  143.     b=length(1); //длина 1 стороны
  144.     c=length(2); //длина 2 стороны
  145.     p=(a+b+c)/2;
  146.     return sqrt(p*(p-a)*(p-b)*(p-c));
  147. }
  148.  
  149. double triangle::length(int a) {
  150.     switch(a) {
  151.     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]));
  152.     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]));
  153.     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]));
  154.     }
  155.     return 0;
  156. }
  157.  
  158. //////////////////////////////////////////////////////////////////////////////////////////////////
  159. class tetraedr : public triangle {
  160. private:
  161.     double w[3];
  162. public:
  163.     tetraedr():triangle() {w[0]=1; w[1]=2; w[3]=3;}
  164.     tetraedr(double a[], double b[], double c[], double d[]): triangle(a,b,c) {w[0]=d[0]; w[1]=d[1]; w[2]=d[2];}
  165.     void print();
  166.     double S();
  167. };
  168.  
  169. double tetraedr::S() {
  170.             double a=rast(x,y);
  171.             double b=rast(x,z);
  172.             double c=rast(y,z);
  173.             double sum=0;
  174.             double p=(a+b+c)/2;
  175.             sum=sqrt(p*(p-a)*(p-b)*(p-c));
  176.             a=rast(x,z);
  177.             b=rast(x,w);
  178.             c=rast(w,z);
  179.             p=(a+b+c)/2;
  180.             sum+=sqrt(p*(p-a)*(p-b)*(p-c));
  181.             a=rast(x,w);
  182.             b=rast(x,y);
  183.             c=rast(w,y);
  184.             p=(a+b+c)/2;
  185.             sum+=sqrt(p*(p-a)*(p-b)*(p-c));
  186.             a=rast(y,z);
  187.             b=rast(y,w);
  188.             c=rast(w,z);
  189.             p=(a+b+c)/2;
  190.             sum+=sqrt(p*(p-a)*(p-b)*(p-c));
  191.             return sum;
  192. }
  193.  
  194. void tetraedr::print(void) {
  195.     printf("\nTetraedr:\n{");
  196.     for(int i=0;i<3;i++) printf("%5.2lf,",x[i]); //напечатать точку Х
  197.     printf("}\n{");
  198.     for(int i=0;i<3;i++) printf("%5.2lf,",y[i]); //напечатать точку Y
  199.     printf("}\n{");
  200.     for(int i=0;i<3;i++) printf("%5.2lf,",z[i]); //напечатать точку Z
  201.     printf("}\n");
  202.     for(int i=0;i<3;i++) printf("%5.2lf,",w[i]); //напечатать точку W
  203.     printf("}\n");
  204. }
  205. double rast(double a[], double b[]) {
  206.     return sqrt((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])+(a[2]-b[2])*(a[2]-b[2]));
  207. }
  208. /////////////////////////////////////////////////////////////////////////////////////////////////
  209. class circle : public triangle {
  210.     //КЛАСС ДЛЯ ОКРУЖНОСТИ ЧЕРЕЗ 3 ТОЧКИ
  211. };
  212.  
  213. int main() {
  214.     triangle A;
  215.     printf("%lf",A.S());
  216.     double x[3]={0,1,2};
  217.     double y[3]={2,4,6};
  218.     double z[3]={1,2,3};
  219.     double w[3]={7,5,-2};
  220.     triangle B(x,y,z);
  221.     printf("\n%lf",B.S());
  222.     triangle C(B);
  223.     printf("\n%lf",C.S());
  224.     A.print();
  225.     A.set(y,w,x);
  226.     A.print();
  227.     printf("\nDlina storoni: %lf", A.length(0));
  228.  
  229.     printf("\n\n\n\n\n\n");
  230.  
  231.  
  232.  
  233.  
  234.  
  235.     printf("\ntreygolnik A: S=%lf",A.S());
  236.     A.print();
  237.     printf("\ntreygolnik B: S=%lf",B.S());
  238.     B.print();
  239.     printf("\ntreygolnik A+B: S=%lf",(A+B).S());
  240.     (A+B).print();
  241.     printf("\ntreygolnik A*5: S=%lf", (A*5).S());
  242.     (A*5).print();
  243.     A++;
  244.     printf("\ntreygolnik A++");
  245.     A.print();
  246.     C=A+B+A*5;
  247.     printf("\ntreygolnik C=A+B+A*5: S=%lf", C.S());
  248.     C.print();
  249.     if(C>A) printf("C>A");
  250.     if(C<=A) printf("C<=A");
  251.  
  252.  
  253. }
Advertisement
Add Comment
Please, Sign In to add comment