simov

NRS | Lab 3

Mar 27th, 2013
682
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.34 KB | None | 0 0
  1. ------- НРС - Лаб. вежби 3 -------
  2. ----------------------------------
  3. 1-ва задача
  4. __________________________________
  5. Да се напише класа за матрица. Во класата се чуваат елементите од матрицата од тип float (матрица со максимална димензија [10]x[10]) и големината на матрицата (број на редици и колони). За оваа класа да се преоптоварат следните оператори:
  6.  
  7. оператор + за собирање на број од матрица
  8. оператор - за одземање на матрици
  9. оператор * за множење на матрици
  10. операторот >> за внесување на елементите на матрицата
  11. операторот << за печатење на елементите на матрицата
  12. Во главната функција да се креираат објекти A, B и C со подразбирливиот конструктор на класата Matrica. Од стандарден влез да се прочитаат нивните вредности. Да се отпечати вредноста на изразот A-(BC)+2** на стандарден излез.
  13.  
  14. Да се претпостави дека секогаш матриците ќе бидат квадратни со ист број на редици и колони.
  15. __________________________________
  16. #include <iostream>
  17. using namespace std;
  18.  
  19. class Matrica
  20. {
  21. private:
  22. float matrica[10][10];
  23. int redici;
  24. int koloni;
  25. public:
  26. Matrica()
  27. {
  28. redici = 0;
  29. koloni = 0;
  30. for( int i = 0; i < 10; i++ )
  31. for( int j = 0; j < 10; j++ )
  32. matrica[i][j] = 0;
  33. }
  34. Matrica operator+( Matrica const& mat )
  35. {
  36. Matrica temp;
  37. temp.redici = mat.redici;
  38. temp.koloni = mat.koloni;
  39. for( int i = 0; i < mat.redici; i++ )
  40. for( int j = 0; j < mat.koloni; j++ )
  41. temp.matrica[i][j] = mat.matrica[i][j] + matrica[i][j];
  42. return temp;
  43. }
  44. Matrica operator-( Matrica const& mat )
  45. {
  46. Matrica temp;
  47. temp.redici = mat.redici;
  48. temp.koloni = mat.koloni;
  49. for( int i = 0; i < mat.redici; i++ )
  50. for( int j = 0; j < mat.koloni; j++ )
  51. temp.matrica[i][j] = matrica[i][j] - mat.matrica[i][j];
  52. return temp;
  53. }
  54. Matrica operator*( Matrica const& mat)
  55. {
  56. Matrica temp;
  57. temp.redici = mat.redici;
  58. temp.koloni = mat.koloni;
  59. for( int i = 0; i < mat.redici; i++ )
  60. for( int j = 0; j < mat.koloni; j++ )
  61. {
  62. float t = 0;
  63. for( int k = 0; k < mat.redici; k++ )
  64. t += matrica[i][k] * mat.matrica[k][j];
  65. temp.matrica[i][j] = t;
  66. }
  67. return temp;
  68. }
  69. Matrica operator+( int const& broj )
  70. {
  71. Matrica temp;
  72. temp.redici = redici;
  73. temp.koloni = koloni;
  74. for( int i = 0; i < redici; i++ )
  75. for( int j = 0; j < koloni; j++ )
  76. temp.matrica[i][j] = matrica[i][j] + broj;
  77. return temp;
  78. }
  79. friend istream& operator>>( istream& in, Matrica& mat );
  80. friend ostream& operator<<( ostream& out, Matrica& mat );
  81. };
  82.  
  83. istream& operator>>( istream& in, Matrica& mat )
  84. {
  85. in >> mat.redici;
  86. in >> mat.koloni;
  87. for( int i = 0; i < mat.redici; i++ )
  88. for( int j = 0; j < mat.koloni; j++ )
  89. in >> mat.matrica[i][j];
  90. return in;
  91. }
  92.  
  93. ostream& operator<<( ostream& out, Matrica& mat )
  94. {
  95. for( int i = 0; i < mat.redici; i++ )
  96. {
  97. for( int j = 0; j < mat.koloni; j++ )
  98. out << mat.matrica[i][j] << " ";
  99. out << endl;
  100. }
  101. return out;
  102. }
  103.  
  104. int main()
  105. {
  106. Matrica A,B,C;
  107. cin>>A>>B>>C;
  108. Matrica D=B*C;
  109. Matrica R=A-D+2;
  110. cout<<R;
  111. }
  112. __________________________________
  113. 2-ра задача
  114. __________________________________
  115. Креирајте класа Rabotnik која во себе содржи:
  116.  
  117. ime (динамички алоцирана низа од знаци)
  118. prezime (динамички алоцирана низа од знаци)
  119. plata (целобројна вредност)
  120. За оваа класа да се креираат default конструктор и конструктор со арггументи. Потоа да се имплементираат и copy конструктор, деструктор и да се преоптовари операторот за доделување =. Да се имплементираат и следните методи:
  121.  
  122. getPlata() која ја враќа платата на работникот
  123. pecati() која ги печати името, презимето и платата.
  124. Креирајте класа Fabrika во која има:
  125.  
  126. rabotnik [100] (низа од вработени)
  127. brojVraboteni (целобројна вредност)
  128. Во класта имплементирајте ги следните методи:
  129.  
  130. dodadiRabotnik(Rabotnik r) додава нов рабтник
  131. pecatiVraboteni() ги пречати сите вработени
  132. pecatiSoPlata(int plata) ги печати сите вработени со плата поголема или еднаква на дадената во аргументот (int plata).
  133. Во главната функција се внесуваат податоци за n вработени. Притоа прво се несува n, па податоците за сите n вработени. Вработените со функцијата dodadiRabotnik се додаваат на објект од класата Fabrika креиран во main функцијата. Во последниот ред се чита минималната плата.
  134.  
  135. На излез да се прикажат прво сите вработени, а потоа само оние со поголема плата од минималната. Треба да се корисатат методите pecatiVraboteni и pecatiSoPlata!
  136. __________________________________
  137. #include<iostream>
  138. #include<string.h>
  139. using namespace std;
  140.  
  141. class Person {
  142. private:
  143. char name[100],surname[100];
  144. int plata,brojka;
  145. public:
  146. Person(){}
  147. Person(char *n,char *s,int p,int b)
  148. {
  149. strcpy(name,n);
  150. strcpy(surname,s);
  151. plata= p;
  152. brojka=b;
  153. }
  154. ~Person(){}
  155.  
  156. void setName(char const *n)
  157. {
  158. strcpy(name,n);
  159. }
  160. void setSurname(char const *s)
  161. {
  162. strcpy(surname,s);
  163. }
  164. void setPlata(int p)
  165. {
  166. plata=p;
  167. }
  168. void setBrojka(int b)
  169. {
  170. brojka=b;
  171. }
  172.  
  173. char const *getName(void)
  174. {
  175. return name;
  176. }
  177. char const *getSurname(void)
  178. {
  179. return surname;
  180. }
  181. int const getPlata(void)
  182. {
  183. return plata;
  184. }
  185. int const getBrojka(void)
  186. {
  187. return brojka;
  188. }
  189. };
  190. int main()
  191. {
  192. Person vraboteni[100];
  193. float plata,brojka;
  194. int n,br;
  195. char name[100],surname[100];
  196. cin>>n;
  197. for(int i=0;i<n;i++)
  198. {
  199. cin>>name>>surname>>plata;
  200.  
  201. vraboteni[i].setName(name);
  202. vraboteni[i].setSurname(surname);
  203. vraboteni[i].setPlata(plata);
  204. vraboteni[i].setBrojka(brojka);
  205. }
  206. cout<<"Site vraboteni:"<<endl;
  207. for(int i=0;i<n;i++)
  208. {
  209. cout<<vraboteni[i].getName()<<" "<<vraboteni[i].getSurname()<<" "<<vraboteni[i].getPlata()<<endl;
  210. }
  211. cin>>br;
  212. cout<<"Vraboteni so plata povisoka od "<<br<<" :"<<endl;
  213. for(int i=0;i<n;i++)
  214. {
  215. if(vraboteni[i].getPlata()>br)
  216. cout<<vraboteni[i].getName()<<" "<<vraboteni[i].getSurname()<<" "<<vraboteni[i].getPlata()<<endl;
  217. }
  218. return 0;
  219. }
  220. __________________________________
  221. 3-та задача
  222. __________________________________
  223. Да се напише класа Automobile во која се чуваат информации за марката на автомобилот (динамички алоцирана низа од знаци), регистрација (динамички алоцирана низа од 5 цели броја) и максимална брзина (цел број). За оваа класа да се напишат соодветните конструктори: конструктор без аргументи, конструктор со аргументи и копирачки конструктор, како и деструктор. Во класата да се имплементира метода getMaxBrzina(). Во класата Automobile се преоптоварат следните оператори:
  224.  
  225. оператор = за додалување на вредноста на еден автомобил на друг
  226. оператор == за споредување на два автомобила според регистрацијата
  227. оператор << за печатење на податоци на автомобил во формат Marka:име Registracija:[x y z k l]
  228. Да се напише класа RentACar за агенција за измајмување возила во која се чуваат информација за името на агенцијата (низа од 100 знци), низа од автомобили (динамичко алоациана низа од објекти од класата Automobile) и број на автомобили со кој располага (цел број). Во класата RentACar да се напише конструктор со еден аргумент за иницијализација на името на агенцијата (но, треба и да се алоцира низата од 0 објекти) и деструктор. При секое додавање на нов автомобил, динамички алоцираната низа да го зголемува капацитетот за 1. Во оваа класа да се преоптоварат операторите: += за додавање на нов автомобил во агенцијата и -= за отстранување на даден автомобил од агенцијата (оној со иста регистрација).
  229.  
  230. Да се напише главна програма во која се инстанцира објект од RentACar. Во овој објект да се додадат сите автомобили чии информации се читаат од тастатура со операторот +=. Меѓутоа откриено е дека во внесувањето на податоците има грешка затоа што при обид да се додаде нов автомобил во агенцијата, увидено е дека таа регистрација веќе постои. Во последниот ред од влезот дадени се инфромации тој автомобил. Ваша задача ќе биде да го избришете оној кој претходно е погрешно внесен и да го додадете новиот.
  231.  
  232. На излез да се отпечатат името на агенцијата и листа на автомобили кои таа ги изнајмува, а кои чија максимална брзина е поголема од 150. Последново да се направи со функција _pecatiNadBrzina(int max)_ која ќе биде дефинриана во класата RentACar.
  233. __________________________________
  234. #include <iostream>
  235. #include <cstring>
  236. using namespace std;
  237.  
  238. class Automobile
  239. {
  240. private:
  241. char *marka;
  242. int *registracija;
  243. int brzina;
  244. void setRegistracija(int reg[5])
  245. {
  246. for(int i=0; i<5; i++)
  247. this->registracija[i] = reg[i];
  248. }
  249. public:
  250. Automobile() :brzina(0)
  251. {
  252. marka = new char[1];
  253. registracija = new int[5];
  254. }
  255. Automobile(const char* marka, int registracija[5], int brzina)
  256. {
  257. this->marka = new char[strlen(marka)+1];
  258. this->registracija = new int[5];
  259.  
  260. this->brzina = brzina;
  261. strcpy(this->marka, marka);
  262. setRegistracija(registracija);
  263. }
  264. Automobile(const Automobile& in)
  265. {
  266. this->marka = new char[strlen(in.marka)+1];
  267. this->registracija = new int[5];
  268.  
  269. this->brzina = in.brzina;
  270. strcpy(this->marka, in.marka);
  271. setRegistracija(in.registracija);
  272. }
  273. int getMaxBrzina() const
  274. {
  275. return brzina;
  276. }
  277. friend ostream& operator <<( ostream& out , Automobile& t) {
  278. out << "Marka\t" << t.marka << "\tRegistracija[ ";
  279. for(int i=0; i<5; i++)
  280. out << t.registracija[i] << " ";
  281. cout << "]";
  282. return out;
  283. }
  284. bool operator==(Automobile& t)
  285. {
  286. int flag = 1;
  287. for (int i=0; i<5; i++)
  288. {
  289. if(registracija[i] != t.registracija[i])
  290. {
  291. flag = 0;
  292. break;
  293. }
  294. }
  295. return (flag > 0) ? true : false;
  296. }
  297. Automobile &operator=(Automobile &in)
  298. {
  299. if(this!=&in)
  300. {
  301. delete [] marka;
  302. delete [] registracija;
  303.  
  304. marka = new char[strlen(in.marka)+1];
  305. registracija = new int[5];
  306.  
  307. brzina = in.brzina;
  308. strcpy(marka, in.marka);
  309. setRegistracija(in.registracija);
  310. }
  311. return *this;
  312. }
  313.  
  314. ~Automobile()
  315. {
  316. delete[] marka;
  317. delete[] registracija;
  318. }
  319. };
  320. class RentACar
  321. {
  322. private:
  323. char ime[100];
  324. Automobile *avtomobili;
  325. int brAvtomobili;
  326. public:
  327. RentACar(const char *name): brAvtomobili(0)
  328. {
  329. avtomobili = new Automobile[0];
  330. strcpy(ime, name);
  331. }
  332. RentACar &operator=(const RentACar &in)
  333. {
  334. if(this!=&in)
  335. {
  336. delete [] avtomobili;
  337. brAvtomobili = in.brAvtomobili;
  338. for(int i=0; i<brAvtomobili; i++)
  339. {
  340. avtomobili[i] = in.avtomobili[i];
  341. }
  342. avtomobili = new Automobile[brAvtomobili];
  343. strcpy(ime, in.ime);
  344. }
  345. return *this;
  346. }
  347. RentACar& operator+=(Automobile t ) {
  348. if(brAvtomobili == 0)
  349. avtomobili = new Automobile[1];
  350. Automobile * tmp = new Automobile [brAvtomobili + 1];
  351. for (int i = 0; i < brAvtomobili ; i ++)
  352. tmp[i] = avtomobili[i];
  353. tmp[brAvtomobili++] = t;
  354. delete[] avtomobili;
  355. avtomobili = tmp ;
  356. return *this;
  357. }
  358. RentACar& operator -=( Automobile t ) {
  359. int newCount = 0;
  360. Automobile * tmp = new Automobile[brAvtomobili];
  361. for (int i = 0; i < brAvtomobili; i++) {
  362. if (!( avtomobili[i] == t))
  363. tmp[newCount++] = avtomobili[i];
  364. }
  365. delete[] avtomobili;
  366. avtomobili = tmp;
  367. brAvtomobili = newCount;
  368. return *this;
  369. }
  370. void pecatiNadBrzina(int speed)
  371. {
  372. cout<<ime<<endl;
  373. if(brAvtomobili != 0)
  374. for(int i=0; i<brAvtomobili; i++)
  375. {
  376. if(avtomobili[i].getMaxBrzina() > speed)
  377. cout<< avtomobili[i]<<endl;
  378. }
  379. }
  380. ~RentACar()
  381. {
  382. delete[] avtomobili;
  383. }
  384.  
  385. };
  386. int main()
  387. {
  388. RentACar agencija("FINKI-Car");
  389. int n;
  390. cin>>n;
  391. for (int i=0;i<n;i++)
  392. {
  393. char marka[100];
  394. int regisracija[5];
  395. int maximumBrzina;
  396. cin>>marka;
  397.  
  398. for (int j=0;j<5;j++)
  399. cin>>regisracija[j];
  400.  
  401. cin>>maximumBrzina;
  402. Automobile nov(marka,regisracija,maximumBrzina);
  403. //dodavanje na avtomobil
  404. agencija+=nov;
  405. }
  406.  
  407. //se citha grehsniot avtmobil, za koj shto avtmobilot so ista registracija treba da se izbrishe
  408. char markax[100];
  409. int regisracijax[5];
  410. int maxBrzina;
  411. cin>>markax;
  412. for (int i=0;i<5;i++)
  413. cin>>regisracijax[i];
  414. cin>>maxBrzina;
  415. Automobile greshka(markax,regisracijax,maxBrzina);
  416. //brishenje na avtomobil
  417. agencija-=greshka;
  418. agencija.pecatiNadBrzina(150);
  419. return 0;
  420. }
Advertisement
Add Comment
Please, Sign In to add comment