Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.19 KB | None | 0 0
  1. 9.header:
  2. #ifndef VEKTOR_H
  3. #define VEKTOR_H
  4.  
  5. #include <cmath>
  6.  
  7. #include <iostream>
  8.  
  9. using namespace std;
  10.  
  11. class Vektor
  12. {
  13. unsigned int darab;
  14. double *elemek;
  15. public:
  16. Vektor(unsigned int db);
  17. Vektor(const Vektor &masik);
  18. ~Vektor();
  19.  
  20. unsigned int getDarab() const;
  21. double getElem(unsigned int index) const;
  22. void setElem(unsigned int index, double elem);
  23.  
  24. Vektor operator +(const Vektor &masik) const;
  25. Vektor& operator +=(const Vektor &masik);
  26. friend Vektor operator +(double ertek, const Vektor &v);
  27. Vektor& operator =(const Vektor &masik);
  28. Vektor& operator--(); // prefix
  29. Vektor operator--(int); // postfix
  30. friend ostream& operator <<(ostream &os, const Vektor &v);
  31. // ---------------------------------------
  32. Vektor operator -(const Vektor &masik) const;
  33. Vektor& operator -=(const Vektor &masik);
  34. friend Vektor operator -(double ertek, const Vektor &v);
  35. Vektor operator *(const Vektor &masik) const;
  36. Vektor& operator *=(const Vektor &masik);
  37. friend Vektor operator *(double ertek, const Vektor &v);
  38. Vektor operator /(const Vektor &masik) const;
  39. Vektor& operator /=(const Vektor &masik);
  40. friend Vektor operator /(double ertek, const Vektor &v);
  41. Vektor operator +(double ertek) const;
  42. Vektor operator -(double ertek) const;
  43. Vektor operator *(double ertek) const;
  44. Vektor operator /(double ertek) const;
  45. Vektor& operator++(); // prefix
  46. Vektor operator++(int); // postfix
  47. double& operator [](unsigned int index);
  48. const double& operator [](unsigned int index) const;
  49. double operator ^(const Vektor &masik) const;
  50. double operator *() const;
  51. Vektor operator ~() const;
  52. bool operator ==(const Vektor &masik) const;
  53. bool operator !=(const Vektor &masik) const;
  54. bool operator <(const Vektor &masik) const;
  55. };
  56.  
  57. //Vektor operator +(double ertek, const Vektor &v);
  58.  
  59. #endif // VEKTOR_H
  60. ----------------------------------------------------------------------------------------------------------------
  61.  
  62. 9.cpp:
  63. #include "vektor.h"
  64.  
  65. Vektor::Vektor(unsigned int db):
  66. darab(db)
  67. {
  68. elemek=new double[darab];
  69. }
  70.  
  71. Vektor::Vektor(const Vektor &masik):
  72. darab(masik.darab)
  73. {
  74. elemek=new double[darab];
  75. for (unsigned int i=0; i<darab; i++)
  76. elemek[i]=masik.elemek[i];
  77. }
  78.  
  79. Vektor::~Vektor()
  80. {
  81. delete [] elemek;
  82. }
  83.  
  84. unsigned int Vektor::getDarab() const
  85. {
  86. return darab;
  87. }
  88.  
  89. double Vektor::getElem(unsigned int index) const
  90. {
  91. return elemek[index];
  92. }
  93.  
  94. void Vektor::setElem(unsigned int index, double elem)
  95. {
  96. elemek[index]=elem;
  97. }
  98.  
  99. Vektor Vektor::operator +(const Vektor &masik) const
  100. {
  101. if (darab==masik.darab)
  102. {
  103. Vektor eredmeny(darab);
  104. for (unsigned int i=0; i<darab; i++)
  105. eredmeny.elemek[i]=elemek[i]+masik.elemek[i];
  106. return eredmeny;
  107. }
  108. else
  109. {
  110. return *this;
  111. }
  112. }
  113.  
  114. Vektor &Vektor::operator +=(const Vektor &masik)
  115. {
  116. if (darab==masik.darab)
  117. {
  118. for (unsigned int i=0; i<darab; i++)
  119. elemek[i]+=masik.elemek[i];
  120. return *this;
  121. }
  122. else
  123. {
  124. return *this;
  125. }
  126. }
  127.  
  128. Vektor operator +(double ertek, const Vektor &v)
  129. {
  130. Vektor eredmeny(v.darab);
  131. for (unsigned int i=0; i<v.darab; i++)
  132. eredmeny.elemek[i]=ertek+v.elemek[i];
  133. return eredmeny;
  134. }
  135.  
  136. //Vektor operator +(double ertek, const Vektor &v)
  137. //{
  138. // Vektor eredmeny(v.getDarab());
  139. // for (unsigned int i=0; i<v.getDarab(); i++)
  140. // eredmeny.setElem(i,v.getElem(i)+ertek);
  141. // return eredmeny;
  142. //}
  143.  
  144. Vektor &Vektor::operator =(const Vektor &masik)
  145. {
  146. if (this!=&masik)
  147. {
  148. delete [] elemek;
  149. darab=masik.darab;
  150. elemek=new double[darab];
  151. for (unsigned int i=0; i<darab; i++)
  152. elemek[i]=masik.elemek[i];
  153. }
  154. return *this;
  155. }
  156.  
  157. Vektor &Vektor::operator--()
  158. {
  159. for (unsigned int i=0; i<darab; i++)
  160. elemek[i]=elemek[i]-1;
  161. return *this;
  162. }
  163.  
  164. Vektor Vektor::operator--(int)
  165. {
  166. Vektor eredeti(*this);
  167. for (unsigned int i=0; i<darab; i++)
  168. elemek[i]=elemek[i]-1;
  169. return eredeti;
  170. }
  171.  
  172. ostream &operator <<(ostream &os, const Vektor &v)
  173. {
  174. os << "(";
  175. for (unsigned int i=0; i<v.darab; i++)
  176. {
  177. if (i>0) os << " , ";
  178. os << v.elemek[i];
  179. }
  180. os << ")";
  181. return os;
  182. }
  183.  
  184. Vektor Vektor::operator -(const Vektor &masik) const
  185. {
  186. if (darab==masik.darab)
  187. {
  188. Vektor eredmeny(darab);
  189. for (unsigned int i=0; i<darab; i++)
  190. eredmeny.elemek[i]=elemek[i]-masik.elemek[i];
  191. return eredmeny;
  192. }
  193. else
  194. {
  195. return *this;
  196. }
  197. }
  198.  
  199. Vektor &Vektor::operator -=(const Vektor &masik)
  200. {
  201. if (darab==masik.darab)
  202. {
  203. for (unsigned int i=0; i<darab; i++)
  204. elemek[i]-=masik.elemek[i];
  205. return *this;
  206. }
  207. else
  208. {
  209. return *this;
  210. }
  211. }
  212.  
  213. Vektor operator -(double ertek, const Vektor &v)
  214. {
  215. Vektor eredmeny(v.darab);
  216. for (unsigned int i=0; i<v.darab; i++)
  217. eredmeny.elemek[i]=ertek-v.elemek[i];
  218. return eredmeny;
  219. }
  220.  
  221. Vektor Vektor::operator *(const Vektor &masik) const
  222. {
  223. if (darab==masik.darab)
  224. {
  225. Vektor eredmeny(darab);
  226. for (unsigned int i=0; i<darab; i++)
  227. eredmeny.elemek[i]=elemek[i]*masik.elemek[i];
  228. return eredmeny;
  229. }
  230. else
  231. {
  232. return *this;
  233. }
  234. }
  235.  
  236. Vektor &Vektor::operator *=(const Vektor &masik)
  237. {
  238. if (darab==masik.darab)
  239. {
  240. for (unsigned int i=0; i<darab; i++)
  241. elemek[i]*=masik.elemek[i];
  242. return *this;
  243. }
  244. else
  245. {
  246. return *this;
  247. }
  248. }
  249.  
  250. Vektor operator *(double ertek, const Vektor &v)
  251. {
  252. Vektor eredmeny(v.darab);
  253. for (unsigned int i=0; i<v.darab; i++)
  254. eredmeny.elemek[i]=ertek*v.elemek[i];
  255. return eredmeny;
  256. }
  257.  
  258. Vektor Vektor::operator /(const Vektor &masik) const
  259. {
  260. if (darab==masik.darab)
  261. {
  262. Vektor eredmeny(darab);
  263. for (unsigned int i=0; i<darab; i++)
  264. eredmeny.elemek[i]=elemek[i]/masik.elemek[i];
  265. return eredmeny;
  266. }
  267. else
  268. {
  269. return *this;
  270. }
  271. }
  272.  
  273. Vektor &Vektor::operator /=(const Vektor &masik)
  274. {
  275. if (darab==masik.darab)
  276. {
  277. for (unsigned int i=0; i<darab; i++)
  278. elemek[i]/=masik.elemek[i];
  279. return *this;
  280. }
  281. else
  282. {
  283. return *this;
  284. }
  285. }
  286.  
  287. Vektor operator /(double ertek, const Vektor &v)
  288. {
  289. Vektor eredmeny(v.darab);
  290. for (unsigned int i=0; i<v.darab; i++)
  291. eredmeny.elemek[i]=ertek/v.elemek[i];
  292. return eredmeny;
  293. }
  294.  
  295. Vektor Vektor::operator +(double ertek) const
  296. {
  297. Vektor eredmeny(darab);
  298. for (unsigned int i=0; i<darab; i++)
  299. eredmeny.elemek[i]=elemek[i]+ertek;
  300. return eredmeny;
  301. }
  302.  
  303. Vektor Vektor::operator -(double ertek) const
  304. {
  305. Vektor eredmeny(darab);
  306. for (unsigned int i=0; i<darab; i++)
  307. eredmeny.elemek[i]=elemek[i]-ertek;
  308. return eredmeny;
  309. }
  310.  
  311. Vektor Vektor::operator *(double ertek) const
  312. {
  313. Vektor eredmeny(darab);
  314. for (unsigned int i=0; i<darab; i++)
  315. eredmeny.elemek[i]=elemek[i]*ertek;
  316. return eredmeny;
  317. }
  318.  
  319. Vektor Vektor::operator /(double ertek) const
  320. {
  321. Vektor eredmeny(darab);
  322. for (unsigned int i=0; i<darab; i++)
  323. eredmeny.elemek[i]=elemek[i]/ertek;
  324. return eredmeny;
  325. }
  326.  
  327. Vektor &Vektor::operator++()
  328. {
  329. for (unsigned int i=0; i<darab; i++)
  330. elemek[i]=elemek[i]+1;
  331. return *this;
  332. }
  333.  
  334. Vektor Vektor::operator++(int)
  335. {
  336. Vektor eredeti(*this);
  337. for (unsigned int i=0; i<darab; i++)
  338. elemek[i]=elemek[i]+1;
  339. return eredeti;
  340. }
  341.  
  342. double &Vektor::operator [](unsigned int index)
  343. {
  344. return elemek[index];
  345. }
  346.  
  347. const double &Vektor::operator [](unsigned int index) const
  348. {
  349. return elemek[index];
  350. }
  351.  
  352. double Vektor::operator ^(const Vektor &masik) const
  353. {
  354. if (darab==masik.darab)
  355. {
  356. double ertek=0;
  357. for (unsigned int i=0; i<darab; i++)
  358. ertek+=elemek[i]*masik.elemek[i];
  359. return ertek;
  360. }
  361. else
  362. {
  363. return 0;
  364. }
  365. }
  366.  
  367. double Vektor::operator *() const
  368. {
  369. double osszeg=0;
  370. for (unsigned int i=0; i<darab; i++)
  371. osszeg+=elemek[i]*elemek[i];
  372. return sqrt(osszeg);
  373. }
  374.  
  375. Vektor Vektor::operator ~() const
  376. {
  377. Vektor eredmeny(darab);
  378. double hossz=**this;
  379. // Igen, furán néz ki, de gondljuk át: A this egy mutató az adott objektumra. A *this egy referencia az adott objektumra.
  380. // A **this így a * operátor meghívva egy referenciára, ami nem mutató, aminek alapból nincs értelme.
  381. // Viszont az előző feladatban el kellett készíteni a * operátort a Vektorra, ami a hosszát adja vissza, tehát jelen esetben van értelme.
  382. for (unsigned int i=0; i<darab; i++)
  383. eredmeny.elemek[i]=elemek[i]/hossz;
  384. return eredmeny;
  385. }
  386.  
  387. bool Vektor::operator ==(const Vektor &masik) const
  388. {
  389. if (darab!=masik.darab) return false;
  390. else
  391. {
  392. bool ok=true;
  393. for (unsigned int i=0; i<darab; i++)
  394. {
  395. if (elemek[i]!=masik.elemek[i]) ok=false; // Ha bárhol nem egyezik, akkor hamis.
  396. }
  397. return ok;
  398. }
  399. // Lehetne így is:
  400. // if (darab!=masik.darab) return false;
  401. // for (unsigned int i=0; i<darab; i++)
  402. // {
  403. // if (elemek[i]!=masik.elemek[i]) return false;
  404. // }
  405. // return true;
  406. }
  407.  
  408. bool Vektor::operator !=(const Vektor &masik) const
  409. {
  410. if (darab!=masik.darab) return true;
  411. else
  412. {
  413. bool ok=false;
  414. for (unsigned int i=0; i<darab; i++)
  415. {
  416. if (elemek[i]!=masik.elemek[i]) ok=true; // Ha bárhol nem egyezik, akkor igaz.
  417. }
  418. return ok;
  419. }
  420. // Vagy egyszerűbben, az előzőt felhasználva:
  421. // return !(*this==masik);
  422. }
  423.  
  424. bool Vektor::operator <(const Vektor &masik) const
  425. {
  426. if (darab!=masik.darab) return false;
  427. else
  428. {
  429. bool ok=true;
  430. for (unsigned int i=0; i<darab; i++)
  431. {
  432. if (!(elemek[i]<masik.elemek[i])) ok=false; // Ha bárhol nem kisebb, akkor hamis.
  433. }
  434. return ok;
  435. }
  436. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement