Hellko

del

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