Hellko

сгиу

May 27th, 2013
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class cube {
  5.     friend class arr_cube;
  6. private:
  7.     double x,y,z,r;
  8. public:
  9.     cube(double X=1, double Y=1, double Z=1, double R=1) {x=X; y=Y; z=Z; r=R;} //конструктор по умолчанию и с параметрами сразу
  10.     cube(const cube& A) {x=A.x; y=A.y; z=A.z; r=A.r;}
  11.     void operator=(const cube& A) {x=A.x; y=A.y; z=A.z; r=A.r;}
  12.     friend cube operator+(cube,cube);
  13.     friend cube operator*(cube,double);
  14.     friend cube tocube(double,double,double,double);
  15. };
  16.  
  17. class arr_cube {
  18. private:
  19.     cube *x; //объявляем указатель на вектор (х - будет массивом векторов)
  20.     int n;//количество элементов массива
  21. public:
  22.     arr_cube(int);//конструктор принимает количество элементов массива
  23.     arr_cube(const arr_cube&); //копиконструктор
  24.     ~arr_cube();//деструктор
  25.     void set(int,cube); //устанавливает новый cube на позицию int
  26.     void operator=(const arr_cube&); //оператор присваивания
  27.     cube operator[](int) const;//оператор возвращает вектор с позиции int
  28.     friend arr_cube operator+(const arr_cube&,const arr_cube&);
  29.     friend arr_cube operator*(const arr_cube&,double); //ВЕКТОР УМНОЖИТЬ НА ЧИСЛО
  30.     friend arr_cube operator*(double,const arr_cube&);  //ЧИСЛО УМНОЖИТЬ НА ВЕКТОР
  31.     void show();
  32.  
  33.     void del(int);
  34. };
  35. void arr_cube::del(int N) {
  36.     cube *tmp;
  37.     tmp=new cube [n-1];
  38.     for(int i=0; i<N; i++) {
  39.         tmp[i]=x[i];
  40.     }
  41.     for(int i=N+1; i<n; i++) {
  42.         tmp[i-1]=x[i];
  43.     }
  44.     delete[]x;
  45.     x=tmp;
  46.     n--;
  47. }
  48.  
  49. cube operator+(cube a, cube b); //оператор складывания массивов векторов (прототип, чтоб компилятор знал что он есть)
  50. cube operator*(cube a, double b);//оператор умножения вектора на число (аналогично)
  51.  
  52. arr_cube::arr_cube(const arr_cube& A) { //копиконструктор
  53.         n=A.n;      //количество элементов теперь как в массиве А
  54.         x=new cube [n]; //создадим массив векторов из n штук в переменной х
  55.         for(int i=0; i<n; i++)
  56.             x[i]=A.x[i];    //скопируем все значения из А в наш массив
  57. }
  58.  
  59. void arr_cube::operator=(const arr_cube& A) {
  60.         n=A.n;
  61.          x=new cube[n]; //оператор присваивания аналогичен копиконструктору
  62.         for(int i=0; i<n; i++)
  63.                         x[i]=A.x[i];
  64. }
  65.  
  66. cube tocube(double x,double y, double z,double r) {
  67.     cube tmp;
  68.     tmp.x=x;                       //функция создания куба из 4-х чисел
  69.     tmp.y=y;
  70.     tmp.z=z;
  71.     tmp.r=r;
  72.     return tmp;
  73. }
  74.  
  75. arr_cube::arr_cube(int N) { //описание конструктора
  76.     n=N;        //количество элементов массива теперь n=N
  77.     x=new cube [n]; //создадим массив из n элементов
  78.     for(int i=0;i<n;i++) {x[i].x=i; x[i].y=i+1; x[i].z=i+2;} //по умолчанию запполнение всего массива дефолтными значениями
  79. }
  80.  
  81. arr_cube::~arr_cube() { //описание деструктора
  82.     delete[]x;
  83. }
  84.  
  85. void arr_cube::set(int N, cube tmp) { //функция вместо N-ого ветора вставляет этот вектор
  86.     if(n<N) return; //если в массиве 10 элементов а мы хотим записать в 120ый элемент то ничего не делать.
  87.     x[N]=tmp;   //иначе вектор tmp присвоить на место N-ого
  88. }
  89.  
  90. cube arr_cube::operator [](int N) const { //возвращает вектор с номером N
  91.     return x[N];
  92. }
  93.  
  94. arr_cube operator+(const arr_cube& a,const arr_cube& b) { //оператор складывания массивов векторов
  95.     arr_cube c(a.n); //создадим новый массив С с количеством элементов как в а.
  96.     for(int i=0; i<c.n; i++)
  97.         c.set(i,a[i]+b[i]); //присвоим всем элементам значения суммы векторов по элементно
  98.     return c; //вернем этот массив
  99. }
  100.  
  101. cube operator+(cube a, cube b) { //оператор складывания кубов
  102.     return tocube(a.x+b.x,a.y+b.y,a.z+b.z,a.r+b.r);
  103. }
  104.  
  105. cube operator*(cube a, double b) {//оператор умножения векторов
  106.     return tocube(a.x*b,a.y*b,a.z*b,a.r*b);
  107. }
  108.  
  109. arr_cube operator*(const arr_cube& a,double k) {//оператор умножения массива векторов на число
  110.     arr_cube c(a.n);
  111.     for(int i=0; i<c.n; i++) {
  112.         c.set(i,a[i]*k); //аналогично оператор +
  113.     }
  114.     return c;
  115. }
  116.  
  117. arr_cube operator*(double k, const arr_cube& a) {//умножения числа на вектор
  118.     return a*k; //используем уже существующую функцию для выполнения того же самого что и выше. только поменяв местами.
  119. }
  120.  
  121. void arr_cube::show() {
  122.     cout<<endl<< "X: "; for(int i=0;i<n;i++) cout<<x[i].x<<"  ";
  123.     cout<<endl<< "Y: "; for(int i=0;i<n;i++) cout<<x[i].y<<"  ";
  124.     cout<<endl<< "Z: "; for(int i=0;i<n;i++) cout<<x[i].z<<"  ";
  125.     cout<<endl<< "R: "; for(int i=0;i<n;i++) cout<<x[i].r<<"  ";
  126.     cout<<endl;
  127. }
  128.  
  129. int main() {
  130.     arr_cube a(5),b(5); //создадим 2 массива из 5 элементов
  131.     cube a1,a2,a3,a4; //создадим 4 пустых вектора
  132.     a1=tocube(1,1,1,1); //вектор а1 будет (1,1,1) итд
  133.     a2=tocube(2,1,0,2);
  134.     a3=tocube(4,3,5,4);
  135.     a4=tocube(1,-1,9,5);
  136.     a.set(0,a1); //на 0 место в массиве "а" запишем вектор а1. итд.
  137.     a.set(1,a2);
  138.     b.set(0,a3);
  139.     b.set(1,a4);
  140.     a.show(); //вывести на экран а, и б, их сумму, и опять а, и а*5, и 5*а.
  141.     b.show();
  142.     (a+b).show();
  143.     a.show();
  144.     (a*5).show();
  145.     (5*a).show();
  146.     a.del(2);
  147.     a.show();
  148. }
Advertisement
Add Comment
Please, Sign In to add comment