#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <malloc.h>
#include <memory.h>
#include <string>
using namespace std;
class vector
{
public:
//Указатель на double
double *a;
//Колличество элементов
int size; //Передаваемый размер
int size_vec; //Записываемый размер, важно для print_vector ибо не выходит за рамки массива
//Переменная состояния
int condition;
public:
vector()
{
size_vec = 1;
a = new double(0);
if(a[0] != NULL)
{
condition = 0; //Переполнения памяти нет
}
}
vector(int size)
{
size_vec = size;
a = new double[size_vec];
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < size_vec; i++)
{
a[i] = size_vec;
}
}
vector(int size, double p_double)
{
size_vec = size;
a = new double[size_vec];
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i <= size_vec; i++)
{
a[i] = p_double;
}
}
vector(vector &V1, char sign, vector &V2) //Вектор являющийся результатом арифметических действий
{
if (sign == '+' or sign == '-' or sign == '*')
{
if (V1.size_vec > V2.size_vec)
{
switch(sign)
{
case '*':
size = 1;
size_vec = size;
a = new double(0);
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < V1.size_vec; i++)
{
if(i < V2.size_vec)
{
a[0] = a[0] + V1.a[i] * V2.a[i];
}
}
break;
case '+':
size = V1.size_vec;
size_vec = size;
a = new double[size_vec];
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < size_vec; i++)
{
if(i < V2.size_vec)
{
a[i] = V1.a[i] + V2.a[i];
} else
{
a[i] = V1.a[i];
}
}
break;
case '-':
size = V1.size_vec;
size_vec = size;
a = new double[size_vec];
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < size_vec; i++)
{
if(i < V2.size_vec)
{
a[i] = V1.a[i] - V2.a[i];
} else
{
a[i] = V1.a[i];
}
}
break;
}
} else
{
if (V1.size_vec < V2.size_vec)
{
switch(sign)
{
case '*':
size = 1;
size_vec = size;
a = new double(0);
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < V2.size_vec; i++)
{
if(i < V1.size_vec)
{
a[0] = a[0] + V1.a[i] * V2.a[i];
}
}
break;
case '+':
size = V2.size_vec;
size_vec = size;
a = new double[size_vec];
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < size_vec; i++)
{
if(i < V1.size_vec)
{
a[i] = V1.a[i] + V2.a[i];
} else
{
a[i] = V2.a[i];
}
}
break;
case '-':
size = V2.size_vec;
size_vec = size;
a = new double[size_vec];
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < size_vec; i++)
{
if(i < V1.size_vec)
{
a[i] = V1.a[i] - V2.a[i];
} else
{
a[i] = V2.a[i];
}
}
break;
}
} else //V1.size_vec == V2.size_vec
{
switch(sign)
{
case '*':
size = 1;
size_vec = size;
a = new double(0);
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < V1.size_vec; i++)
{
a[0] = a[0] + V1.a[i] * V2.a[i];
}
break;
case '+':
size = V1.size_vec;
size_vec = size;
a = new double[size_vec];
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < size_vec; i++)
{
a[i] = V1.a[i] + V2.a[i];
}
break;
case '-':
size = V1.size_vec;
size_vec = size;
a = new double[size_vec];
if(a[size_vec] != NULL)
{
condition = 0; //Переполнения памяти нет
} else
{
condition = 1;
cout << "Perepoln pamyati" << endl;
}
for(int i = 0; i < size_vec; i++)
{
a[i] = V1.a[i] - V2.a[i];
}
break;
}
}
}
} else
{
if (sign == '?') //Случайная операция
{
}
}
}
~vector()
{
delete []a;
size_vec = 0;
}
};//class vector
void rewrite_vector(vector &V, int numb = 0, int def = 0)
{
if (numb < V.size_vec and numb >= 0)
{
V.a[numb] = def;
} else
{
cout << "Ukazanniy index vectora ne sushestvuet. Chislo ne bulo izmeneno." << endl;
}
}
void print_vector(vector &V, string text = "", string string_FirstVector = "", string string_SecondVector = "")
{
cout << "\n--- " << string_FirstVector << " " << text << " " << string_SecondVector << endl;
for (int i = 0; i < V.size_vec; i++)
cout << V.a[i] << " ";
}
double get_num_vector(vector &V, int num)
{
if (num < V.size_vec and num >= 0)
{
return V.a[num];
} else
{
cout << "Ukazanniy index vectora ne sushestvuet. Chislo ne bulo polucheno." << endl;
}
}
string eqv_vector(vector &V1, vector &V2, string string_FirstVector = "", string string_SecondVector = "")
{
if(V1.size_vec == V2.size_vec)
{
int i;
for(i = 0; i < V1.size_vec; i++)
{
if(V1.a[i] != V2.a[i])
break;
}
if(i != V1.size_vec)
{
cout << "\n---" << endl;
cout << "Vectory " << string_FirstVector << " i " << string_SecondVector << " ne ravni" << endl;
} else
{
cout << "\n---" << endl;
cout << "Vectory " << string_FirstVector << " i " << string_SecondVector << " ravni" << endl;
}
} else
{
int tq = 0, tw = 0;
for(int i = 0; i < V1.size_vec; i++)
{
tq = tq + V1.a[i]*V1.a[i];
}
for(int i = 0; i < V2.size_vec; i++)
{
tw = tw + V2.a[i]*V2.a[i];
}
tq = sqrt(tq);
tw = sqrt(tw);
if(tq > tw)
{
cout << "\n---" << endl;
cout << "Vector " << string_FirstVector << " bolshe po dline chem vector " << string_SecondVector << endl;
} else
{
if(tq < tw)
{
cout << "\n---" << endl;
cout << "Vector " << string_FirstVector << " menshe po dline chem vector " << string_SecondVector << endl;
} else
{
cout << "\n---" << endl;
cout << "Vector " << string_FirstVector << " raven vectory " << string_SecondVector << endl;
}
}
}
}
#endif