Hellko

lalka

May 26th, 2013
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct vec {double x,y,z;};
  5. class arr_vec {
  6. private:
  7.     double *x;
  8.     double *y; //указатели на координаты
  9.     double *z;
  10.     int n;//количество элементов массива
  11. public:
  12.     arr_vec(int);//конструктор принимает количество элементов массива
  13.     ~arr_vec();//деструктор
  14.     void set(int,vec); //устанавливает новый вектор vec на позицию int
  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. vec operator+(vec a, vec b); //оператор складывания массивов векторов
  22. vec operator*(vec a, double b);//оператор умножения вектора на число
  23.  
  24. vec toVec(double x,double y, double z) {
  25.     vec tmp;
  26.     tmp.x=x;                       //функция создания вектора из 3-х чисел
  27.     tmp.y=y;
  28.     tmp.z=z;
  29.     return tmp;
  30. }
  31.  
  32. arr_vec::arr_vec(int N) { //описание конструктора
  33.     n=N;
  34.     x=new double[n]; //созаём массив из n элементов иксовых координат
  35.     y=new double[n];
  36.     z=new double[n];
  37.     for(int i=0;i<n;i++) {x[i]=i; y[i]=i+1; z[i]=i+2;} //по умолчанию запполнение всего массива дефолтными значениями
  38. }
  39.  
  40. arr_vec::~arr_vec() { //описание деструктора
  41.     delete[]x;
  42.     delete[]y;
  43.     delete[]z;
  44. }
  45.  
  46. void arr_vec::set(int N, vec tmp) { //функция вместо N-ого ветора вставляет этот вектор
  47.     if(n<N) return;
  48.     x[N]=tmp.x;
  49.     y[N]=tmp.y;
  50.     z[N]=tmp.z;
  51. }
  52.  
  53. vec arr_vec::operator [](int N) const { //возвращает вектор с номера N
  54.     return toVec(x[N],y[N],z[N]);
  55. }
  56.  
  57. arr_vec operator+(const arr_vec& a,const arr_vec& b) { //оператор складывания массивов векторов
  58.     arr_vec c(a.n);
  59.     for(int i=0; i<c.n; i++)
  60.         c.set(i,a[i]+b[i]);
  61.     return c;
  62. }
  63.  
  64. vec operator+(vec a, vec b) { //оператор складывания векторов
  65.     return toVec(a.x+b.x,a.y+b.y,a.z+b.z);
  66. }
  67.  
  68. vec operator*(vec a, double b) {//оператор умножения векторов
  69.     return toVec(a.x*b,a.y*b,a.z*b);
  70. }
  71.  
  72. arr_vec operator*(const arr_vec& a,double k) {//оператор умножения матрицы векторов на число
  73.     arr_vec c(a.n);
  74.     for(int i=0; i<c.n; i++) {
  75.         c.set(i,a[i]*k);
  76.     }
  77.     return c;
  78. }
  79.  
  80. arr_vec operator*(double k, const arr_vec& a) {//умножения числа на вектор; //константные ссылки
  81.     return a*k;
  82. }
  83.  
  84. void arr_vec::show() {
  85.     cout<<endl<< "X: "; for(int i=0;i<n;i++) cout<<x[i]<<"  ";
  86.     cout<<endl<< "Y: "; for(int i=0;i<n;i++) cout<<y[i]<<"  ";
  87.     cout<<endl<< "Z: "; for(int i=0;i<n;i++) cout<<z[i]<<"  ";
  88.     cout<<endl;
  89. }
  90.  
  91. int main() {
  92.     arr_vec a(5),b(5);
  93.     vec a1,a2,a3,a4;
  94.     a1=toVec(1,1,1);
  95.     a2=toVec(2,1,0);
  96.     a3=toVec(4,3,5);
  97.     a4=toVec(1,-1,9);
  98.     a.set(0,a1);
  99.     a.set(1,a2);
  100.     b.set(0,a3);
  101.     b.set(1,a4);
  102.     a.show();
  103.     b.show();
  104.     (a+b).show();
  105.     a.show();
  106.     (a*5).show();
  107.     (5*a).show();
  108. }
Advertisement
Add Comment
Please, Sign In to add comment