Advertisement
Alhiris

Untitled

Mar 14th, 2021
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.12 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <fstream>
  5. using namespace std;
  6. ofstream g("calcul-polinom.txt");
  7. /*polinom : [coeficient|exponent|urmator] ---> [coeficient|exponent|urmator] */
  8.  
  9. // clasa Nod va crea obiecte ce vor fi teremenii unui polinom
  10.  
  11. class Nod{
  12. double coeficient;
  13. int exponent;
  14. Nod *urmator;
  15. public:
  16. Nod(double, int, Nod*);
  17. double get_Coeficient();
  18. int get_exponent();
  19. Nod* get_urmator();
  20. void set_coeficient(double x);
  21. void set_exponent(int y);
  22. friend class Polinom_dinamic;
  23. };
  24. //constructorul de initializare
  25. Nod::Nod(double coeficient = 0, int exponent = 0, Nod* urmator = NULL){
  26. this->coeficient = coeficient;
  27. this->exponent = exponent;
  28. this->urmator = urmator;
  29. };
  30. Nod* Nod::get_urmator(){
  31. return urmator;
  32. }
  33. //constructirul de copiere
  34. /*Nod::Nod(Nod &cpy){
  35. this->coeficient=cpy.coeficient;
  36. this->exponent = cpy.exponent;
  37. this->urmator=cpy.urmator;
  38. }*/
  39.  
  40. // getteri pt coeficienti si exponenti
  41. double Nod::get_Coeficient(){
  42. return this->coeficient;
  43. }
  44. int Nod::get_exponent(){
  45. return this->exponent;
  46. }
  47. //setteri pt coeficienti si exponenti
  48. void Nod::set_coeficient(double x){
  49. this->coeficient = x;
  50. }
  51. void Nod::set_exponent(int y){
  52. this->exponent = y;
  53. }
  54. // =============================================================
  55.  
  56. class Polinom_dinamic{
  57. Nod *primul; //adresa primului element din polinom
  58. int n; //numarul de elemente
  59. public:
  60. int get_marime();
  61. Polinom_dinamic();
  62. ~Polinom_dinamic();
  63. Polinom_dinamic(Polinom_dinamic&);
  64. void add(double,int);
  65. void afisare();
  66. void afisare(ostream &out);
  67. void citire(istream &in, double &a, int &b, int&i);
  68. void adunare();
  69. void scadere();
  70. double calcul_valoare(double x);
  71. friend istream& operator>>(istream &in, Polinom_dinamic& p); ///supraincarcare pe >>
  72. friend ostream& operator<<(ostream &out, Polinom_dinamic& p); ///supraincarcare pe <<
  73. friend Polinom_dinamic& operator+(Polinom_dinamic& p1, Polinom_dinamic& p2);
  74. };
  75. //constructor fara parametru
  76. Polinom_dinamic::Polinom_dinamic(){
  77. primul = 0;
  78. }
  79. //destructor
  80. Polinom_dinamic::~Polinom_dinamic(){
  81. Nod *p = primul;
  82. Nod *q;
  83. while (p!=0)
  84. {
  85. q=p;
  86. p=p->urmator;
  87. delete q;
  88. }
  89. primul = 0;
  90. }
  91. Polinom_dinamic::Polinom_dinamic(Polinom_dinamic &initial){
  92. if (initial.primul == 0)
  93. this->primul = 0;
  94. else{
  95. primul = new Nod(*initial.primul);
  96. Nod *p = initial.primul->urmator;
  97. Nod *q = primul;
  98. while (p) {
  99. q->urmator = new Nod(*p);
  100. p = p->urmator;
  101. q=q->urmator;
  102. }
  103. }
  104. }
  105.  
  106. void Polinom_dinamic::add(double coef, int expo){
  107. Nod *nodNou = new Nod(coef,expo,NULL);
  108. if (primul==0){///daca lista e goala, primul si ultimul nod sunt cel nou
  109. primul=nodNou;
  110. }
  111. else{
  112. ///altfel parcurg si leg la final
  113. Nod *last=primul;
  114. while (last->urmator != NULL){
  115. last=last->urmator;
  116. }
  117. last->urmator=nodNou;
  118. }
  119. }
  120. /*void Polinom_dinamic::afisare(){
  121. Nod *p=primul;
  122. while (p != NULL){
  123. if(p->coeficient>0)
  124. cout<<"+"<<p->coeficient<<"X^"<<p->exponent;
  125. else
  126. cout<<p->coeficient<<"X^"<<p->exponent;
  127. p=p->urmator;
  128. }
  129. }*/
  130. void Polinom_dinamic::citire(istream &in, double &coef, int &expo, int &i){
  131.  
  132. cout<<"Cititi coeficientul a"<<i<<": ";
  133. in>>coef;
  134. cout<<"Cititi exponentul b"<<i<<": ";
  135. in>>expo;
  136. //pol.add(coef,expo);
  137. }
  138.  
  139. istream& operator>>(istream& in,Polinom_dinamic& pol){
  140. double a;
  141. int b;
  142. cout<<"introduceti marimea polinomului (n): ";
  143. in>>pol.n;
  144. for(int i=1;i<=pol.n;i++)
  145. {pol.citire(in, a, b, i);
  146. pol.add(a,b);}
  147. return in;
  148. }
  149. void Polinom_dinamic::afisare(ostream &out){
  150. Nod *p=primul;
  151. int ok = 0;
  152. out<<"\npolinomul introdus este: ";
  153. while (p != NULL){
  154. if (p->coeficient!=0) ok=1;
  155. if(p->coeficient < 0)
  156. out<<p->coeficient<<"*X^"<<p->exponent;
  157. else if(p->coeficient == 1)
  158. out<<"+"<<"*X^"<<p->exponent;
  159. else if (p->coeficient == 0);
  160. else if (p!=primul)
  161. out<<"+"<<p->coeficient<<"*X^"<<p->exponent;
  162. else out<<p->coeficient<<"*X^"<<p->exponent;
  163. p=p->urmator;
  164. }
  165. if (ok==0) out<<0;
  166. }
  167. ostream& operator<<(ostream& out, Polinom_dinamic& pol){
  168. pol.afisare(out);
  169. return out;
  170. }
  171. double Polinom_dinamic::calcul_valoare(double x){
  172. Nod *p=primul;
  173. double rezultat=0;
  174. while (p != NULL){
  175. rezultat += p->coeficient*(pow(x,p->exponent)) ;
  176. p=p->urmator;
  177. }
  178. return rezultat;
  179. }
  180.  
  181. inline Polinom_dinamic& operator+(Polinom_dinamic& p1, Polinom_dinamic& p2){
  182. Polinom_dinamic p3;
  183. Nod *point1 = p1.primul ;
  184. Nod *point2 = p2.primul;
  185. while(point1!=NULL && point2!=NULL)
  186. {
  187. if(point1->get_exponent() < point2->get_exponent())
  188. {
  189. p3.add(point1->get_Coeficient(),point2->get_exponent());
  190. point1=point1->get_urmator();
  191. }
  192.  
  193. }
  194. cout<<point1->get_Coeficient();
  195.  
  196.  
  197.  
  198.  
  199. //return nullptr;
  200. }
  201.  
  202. void menu_output(){
  203. cout<<"\n Martinas Paul - 141 - Proiect - Tema 11. Polinom_dianmic: \n";
  204. cout<<"\n\t MENIU:";
  205. cout<<"\n===========================================\n";
  206. cout<<"\n";
  207. cout<<"1. Calcul valoare polinom intr-un punct"; cout<<"\n";
  208. cout<<"2. Suma a doua polinoame"; cout<<"\n";
  209. cout<<"3. Diferenta a doua polinoame"; cout<<"\n";
  210. cout<<"4. Produsul a doua polinoame"; cout<<"\n";
  211. cout<<"5. Actiune 5 din meniu"; cout<<"\n";
  212. cout<<"0. Iesire."; cout<<"\n";
  213. }
  214. void menu()
  215. {
  216. int option;///optiunea aleasa din meniu
  217. option=0;
  218.  
  219. do
  220. {
  221. menu_output();
  222.  
  223. cout<<"\nIntroduceti numarul actiunii: ";
  224. cin>>option;
  225.  
  226. if (option==1)
  227. {
  228. cout<<"Trebuie sa introduceti un polinom de forma a1*X^b1 + a2*X^b2+....+ an*X^bn\n";
  229. Polinom_dinamic p;
  230. double x,rezultat;
  231. int raspuns;
  232. cin>>p;
  233. cout<<p;
  234. cout<<"\nIntroduceti valoarea lui X: ";
  235. cin>>x;
  236. rezultat = p.calcul_valoare(x);
  237. cout<<rezultat;
  238. cout<<"\nSalvati in fisier?(1.da/2.nu)\n";
  239. //system("pause");
  240. cin>>raspuns;
  241. if(raspuns==1)
  242. {g<<p;
  243. g<<"\nRezultatul in punctul "<<x<<" este "<<rezultat;}
  244.  
  245.  
  246. }
  247. if (option==2)
  248. {
  249. cout<<"Introduceti primul polinom de forma a1*X^b1 + a2*X^b2+....+ an*X^bn\n";
  250. Polinom_dinamic p1, p2;
  251. cin>>p1;
  252. cout<<"\nIntroduceti al doilea polinom de forma a1*X^b1 + a2*X^b2+....+ an*X^bn\n";
  253. cin>>p2;
  254. cout<<p1; cout<<"\n";
  255. cout<<p2;
  256. cout<<(p1+p2);
  257.  
  258. }
  259. if (option==3)
  260. {
  261. ///----||---- 3
  262. }
  263. if (option==4)
  264. {
  265. ///----||---- 4
  266. }
  267. if (option==5)
  268. {
  269. ///----||---- 5
  270. }
  271. if (option==0)
  272. {
  273. cout<<"\nEXIT!\n";
  274. }
  275. if (option<0||option>5)
  276. {
  277. cout<<"\nSelectie invalida\n";
  278. }
  279. cout<<"\n";
  280. system("pause"); ///Pauza - Press any key to continue...
  281. system("cls"); ///Sterge continutul curent al consolei
  282. }
  283. while(option!=0);
  284. }
  285. int main()
  286. {
  287. /*Nod element;
  288. cout <<"coeficientul elementului initial e "<< element.get_Coeficient()<<endl;
  289. cout<< "expoentul elemntului initial e "<< element.get_exponent()<<endl;
  290. element.set_coeficient(3);
  291. element.set_exponent(5);
  292. cout << element.get_Coeficient()<<" ";
  293. cout<<element.get_exponent();*/
  294. // Polinom_dinamic p, z;
  295. // cin>>p;
  296. // p.afisare();
  297. //p.add(2,5);
  298. //p.add(-3,7);
  299. //cin>>p;
  300. //p.afisare();
  301. // Polinom_dinamic p2(p);
  302. // cout<<"\n";
  303. // p2.afisare();
  304. // cout << element.coeficient << endl; nu merge
  305. menu();
  306. return 0;
  307. }
  308.  
  309.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement