Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <cstring>
- #include <fstream>
- using namespace std;
- ofstream g("calcul-polinom.txt");
- /*polinom : [coeficient|exponent|urmator] ---> [coeficient|exponent|urmator] */
- // clasa Nod va crea obiecte ce vor fi teremenii unui polinom
- class Nod{
- double coeficient;
- int exponent;
- Nod *urmator;
- public:
- Nod(double, int, Nod*);
- double get_Coeficient();
- int get_exponent();
- Nod* get_urmator();
- void set_coeficient(double x);
- void set_exponent(int y);
- friend class Polinom_dinamic;
- };
- //constructorul de initializare
- Nod::Nod(double coeficient = 0, int exponent = 0, Nod* urmator = NULL){
- this->coeficient = coeficient;
- this->exponent = exponent;
- this->urmator = urmator;
- };
- Nod* Nod::get_urmator(){
- return urmator;
- }
- //constructirul de copiere
- /*Nod::Nod(Nod &cpy){
- this->coeficient=cpy.coeficient;
- this->exponent = cpy.exponent;
- this->urmator=cpy.urmator;
- }*/
- // getteri pt coeficienti si exponenti
- double Nod::get_Coeficient(){
- return this->coeficient;
- }
- int Nod::get_exponent(){
- return this->exponent;
- }
- //setteri pt coeficienti si exponenti
- void Nod::set_coeficient(double x){
- this->coeficient = x;
- }
- void Nod::set_exponent(int y){
- this->exponent = y;
- }
- // =============================================================
- class Polinom_dinamic{
- Nod *primul; //adresa primului element din polinom
- int n; //numarul de elemente
- public:
- int get_marime();
- Polinom_dinamic();
- ~Polinom_dinamic();
- Polinom_dinamic(Polinom_dinamic&);
- void add(double,int);
- void afisare();
- void afisare(ostream &out);
- void citire(istream &in, double &a, int &b, int&i);
- void adunare();
- void scadere();
- double calcul_valoare(double x);
- friend istream& operator>>(istream &in, Polinom_dinamic& p); ///supraincarcare pe >>
- friend ostream& operator<<(ostream &out, Polinom_dinamic& p); ///supraincarcare pe <<
- friend Polinom_dinamic& operator+(Polinom_dinamic& p1, Polinom_dinamic& p2);
- };
- //constructor fara parametru
- Polinom_dinamic::Polinom_dinamic(){
- primul = 0;
- }
- //destructor
- Polinom_dinamic::~Polinom_dinamic(){
- Nod *p = primul;
- Nod *q;
- while (p!=0)
- {
- q=p;
- p=p->urmator;
- delete q;
- }
- primul = 0;
- }
- Polinom_dinamic::Polinom_dinamic(Polinom_dinamic &initial){
- if (initial.primul == 0)
- this->primul = 0;
- else{
- primul = new Nod(*initial.primul);
- Nod *p = initial.primul->urmator;
- Nod *q = primul;
- while (p) {
- q->urmator = new Nod(*p);
- p = p->urmator;
- q=q->urmator;
- }
- }
- }
- void Polinom_dinamic::add(double coef, int expo){
- Nod *nodNou = new Nod(coef,expo,NULL);
- if (primul==0){///daca lista e goala, primul si ultimul nod sunt cel nou
- primul=nodNou;
- }
- else{
- ///altfel parcurg si leg la final
- Nod *last=primul;
- while (last->urmator != NULL){
- last=last->urmator;
- }
- last->urmator=nodNou;
- }
- }
- /*void Polinom_dinamic::afisare(){
- Nod *p=primul;
- while (p != NULL){
- if(p->coeficient>0)
- cout<<"+"<<p->coeficient<<"X^"<<p->exponent;
- else
- cout<<p->coeficient<<"X^"<<p->exponent;
- p=p->urmator;
- }
- }*/
- void Polinom_dinamic::citire(istream &in, double &coef, int &expo, int &i){
- cout<<"Cititi coeficientul a"<<i<<": ";
- in>>coef;
- cout<<"Cititi exponentul b"<<i<<": ";
- in>>expo;
- //pol.add(coef,expo);
- }
- istream& operator>>(istream& in,Polinom_dinamic& pol){
- double a;
- int b;
- cout<<"introduceti marimea polinomului (n): ";
- in>>pol.n;
- for(int i=1;i<=pol.n;i++)
- {pol.citire(in, a, b, i);
- pol.add(a,b);}
- return in;
- }
- void Polinom_dinamic::afisare(ostream &out){
- Nod *p=primul;
- int ok = 0;
- out<<"\npolinomul introdus este: ";
- while (p != NULL){
- if (p->coeficient!=0) ok=1;
- if(p->coeficient < 0)
- out<<p->coeficient<<"*X^"<<p->exponent;
- else if(p->coeficient == 1)
- out<<"+"<<"*X^"<<p->exponent;
- else if (p->coeficient == 0);
- else if (p!=primul)
- out<<"+"<<p->coeficient<<"*X^"<<p->exponent;
- else out<<p->coeficient<<"*X^"<<p->exponent;
- p=p->urmator;
- }
- if (ok==0) out<<0;
- }
- ostream& operator<<(ostream& out, Polinom_dinamic& pol){
- pol.afisare(out);
- return out;
- }
- double Polinom_dinamic::calcul_valoare(double x){
- Nod *p=primul;
- double rezultat=0;
- while (p != NULL){
- rezultat += p->coeficient*(pow(x,p->exponent)) ;
- p=p->urmator;
- }
- return rezultat;
- }
- inline Polinom_dinamic& operator+(Polinom_dinamic& p1, Polinom_dinamic& p2){
- Polinom_dinamic p3;
- Nod *point1 = p1.primul ;
- Nod *point2 = p2.primul;
- while(point1!=NULL && point2!=NULL)
- {
- if(point1->get_exponent() < point2->get_exponent())
- {
- p3.add(point1->get_Coeficient(),point2->get_exponent());
- point1=point1->get_urmator();
- }
- }
- cout<<point1->get_Coeficient();
- //return nullptr;
- }
- void menu_output(){
- cout<<"\n Martinas Paul - 141 - Proiect - Tema 11. Polinom_dianmic: \n";
- cout<<"\n\t MENIU:";
- cout<<"\n===========================================\n";
- cout<<"\n";
- cout<<"1. Calcul valoare polinom intr-un punct"; cout<<"\n";
- cout<<"2. Suma a doua polinoame"; cout<<"\n";
- cout<<"3. Diferenta a doua polinoame"; cout<<"\n";
- cout<<"4. Produsul a doua polinoame"; cout<<"\n";
- cout<<"5. Actiune 5 din meniu"; cout<<"\n";
- cout<<"0. Iesire."; cout<<"\n";
- }
- void menu()
- {
- int option;///optiunea aleasa din meniu
- option=0;
- do
- {
- menu_output();
- cout<<"\nIntroduceti numarul actiunii: ";
- cin>>option;
- if (option==1)
- {
- cout<<"Trebuie sa introduceti un polinom de forma a1*X^b1 + a2*X^b2+....+ an*X^bn\n";
- Polinom_dinamic p;
- double x,rezultat;
- int raspuns;
- cin>>p;
- cout<<p;
- cout<<"\nIntroduceti valoarea lui X: ";
- cin>>x;
- rezultat = p.calcul_valoare(x);
- cout<<rezultat;
- cout<<"\nSalvati in fisier?(1.da/2.nu)\n";
- //system("pause");
- cin>>raspuns;
- if(raspuns==1)
- {g<<p;
- g<<"\nRezultatul in punctul "<<x<<" este "<<rezultat;}
- }
- if (option==2)
- {
- cout<<"Introduceti primul polinom de forma a1*X^b1 + a2*X^b2+....+ an*X^bn\n";
- Polinom_dinamic p1, p2;
- cin>>p1;
- cout<<"\nIntroduceti al doilea polinom de forma a1*X^b1 + a2*X^b2+....+ an*X^bn\n";
- cin>>p2;
- cout<<p1; cout<<"\n";
- cout<<p2;
- cout<<(p1+p2);
- }
- if (option==3)
- {
- ///----||---- 3
- }
- if (option==4)
- {
- ///----||---- 4
- }
- if (option==5)
- {
- ///----||---- 5
- }
- if (option==0)
- {
- cout<<"\nEXIT!\n";
- }
- if (option<0||option>5)
- {
- cout<<"\nSelectie invalida\n";
- }
- cout<<"\n";
- system("pause"); ///Pauza - Press any key to continue...
- system("cls"); ///Sterge continutul curent al consolei
- }
- while(option!=0);
- }
- int main()
- {
- /*Nod element;
- cout <<"coeficientul elementului initial e "<< element.get_Coeficient()<<endl;
- cout<< "expoentul elemntului initial e "<< element.get_exponent()<<endl;
- element.set_coeficient(3);
- element.set_exponent(5);
- cout << element.get_Coeficient()<<" ";
- cout<<element.get_exponent();*/
- // Polinom_dinamic p, z;
- // cin>>p;
- // p.afisare();
- //p.add(2,5);
- //p.add(-3,7);
- //cin>>p;
- //p.afisare();
- // Polinom_dinamic p2(p);
- // cout<<"\n";
- // p2.afisare();
- // cout << element.coeficient << endl; nu merge
- menu();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement