Лабораторная работа №3
Востропятов Н. А.
Вар №9
I. Класс "Вектор из элементов типа double" (DVector) состоит из следующих данных:
указатель на тип double; размерность вектора.
Определить операции и функции, необходимые для следующих вычислений. Прописные буквы в формулах означают векторы, строчные простые переменные, а строчные с нижним индексом - элементы вектора.
Y = x*V - U/2
Z = v2*U - 2*V.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
class DVector
{
friend void print(DVector &a);
public:
DVector(void) { pData = 0; m_size = 0; }
DVector(int size) { pData = new double[size]; for(int i=0;i<size;i++)pData[i]=0.0; m_size = size; }
DVector(double *a, int size) { pData = a; m_size = size; }
DVector(DVector &src) { *this = src; };
~DVector(void) { printf("del %d\n", m_size); if (pData || m_size > 0) delete [] pData; }
inline DVector &operator=(DVector &src)
{
for (int i=0; i<m_size; i++)
pData[i] = src[i];
return *this;
}
inline DVector &operator=(double a)
{
for (int i=0; i<m_size; i++)
pData[i]=a;
}
inline DVector operator*(DVector &a)
{
if (!pData || !a.pData)
return 0;
int n = m_size<a.m_size?m_size:a.m_size;
// DVector d(n);
double *d = new double[n];
for (int i=0; i < n; i++)
d[i] = pData[i]*a[i];
return DVector(d, n);
}
inline DVector operator*(double a)
{
double *d = new double[m_size];
for (int i=0; i < m_size; i++)
d[i] = pData[i]*a;
return DVector(d, m_size);
}
inline DVector operator-(DVector &a)
{
if (!pData || !a.pData)
return 0;
int n = m_size<a.m_size?m_size:a.m_size;
double *d = new double[n];
for (int i=0; i < n; i++)
d[i] = pData[i]-a[i];
return DVector(d, n);
}
double &operator[](int i) { return pData[i]; }
private:
double *pData;
int m_size;
};
void print(DVector &a)
{
for (int i=0; i<a.m_size; i++)
printf("%d - %f\n", i, a[i]);
printf("\n");
}
void main()
{
DVector U(4);
DVector V(4);
double x = 0;
printf("Enter X: ");
scanf("%f", &x);
for (int i=0; i < 4; i++)
{
U[i] = rand();
V[i] = rand();
}
print(U);
print(V);
DVector Y(4);
DVector Z(4);
Y = V*x - U*0.5;
Z = U*V[2] - V*2;
print(Y);
print(Z);
getch();
}
