Newsgroup: it.comp.lang.c++
Titolo: [con listato] Monomi e polinomi

Ciao a tutti!
Ho avuto modo di notare che tutti i quesiti posti in questo newsgroup
trovano una risposta; spero possa valere lo stesso anche per me!
Devo implentare la classe Monomial
    - implementando un costruttore che prenda in ingresso i due coefficienti
a0 e a1;
    - ridefinendo "+", "-", "<<" e "( )"
 e da essa devo estendere la classe Polinomial
    - implementando un costruttore che prenda in ingresso il grado del
polinomio ed allochi lo spazio necessario per i suoi coefficienti AGGIUNTIVI
    - ridefinire "+" (anche per polinomi di grado differente), se possibile
utilizzando il "+" di Monomial
Il tutto dovrebbe essere fatto usando dei std::vector<float>. Beh, io ci ho
provato. E Monomial mi sembra funzionare benissimo. Ma non riesco a far
funzionare monomial. Come cavolo la sfrutto questa eredità?
Vi metto qua sotto il listato che ho scritto (molte delle stampe sono delle
prove di verifica run-time).
Grazie in anticipo!!
____________________________
#include <iostream>
#include <vector>
using namespace std;
class Monomial {
public:
      std::vector<float> v;
public:
       Monomial(float a1=0, float a0=0);
       Monomial operator+(Monomial op2);
       Monomial operator-(Monomial op2);
       Monomial operator()(float a0, float a1);
       friend ostream &operator<<(ostream &stream, Monomial op1);
};
class Polinomial: public Monomial {
      Monomial m;
      int degree;
public:
      Polinomial(int n, Monomial m0);
      Polinomial operator+(Polinomial op2);
      friend ostream &operator<<(ostream &stream, Polinomial op1);
};
Monomial::Monomial(float a1, float a0)
{
 v.resize(2);
 v[0] = a0;
 v[1] = a1;
}
Monomial Monomial::operator+(Monomial op2)
{
 Monomial temp;
 temp.v[0] = v[0] + op2.v[0];
 temp.v[1] = v[1] + op2.v[1];
 return temp;
}
Monomial Monomial::operator-(Monomial op2)
{
 Monomial temp;
 temp.v[0] = v[0] - op2.v[0];
 temp.v[1] = v[1] - op2.v[1];
 return temp;
}
Monomial Monomial::operator()(float a0, float a1)
{
 v[0] = a0;
 v[1] = a1;
 return *this;
}
ostream &operator<<(ostream &stream, Monomial op1)
{
 stream << "(" << op1.v[1] << "," << op1.v[0] << ")";
 return stream;
}
Polinomial::Polinomial(int n, Monomial m0)
{
 float temp;
 degree = n;
 v[0] = m0.v[0];
 v[1] = m0.v[1];
 v.resize(degree+1);
 cout << "Il grado e': " << v.size()-1 << "\n";
 for(int i = 2; i < degree+1; i++) {
         cout << "a" << i << " = ";
         cin >> temp;
         v.push_back(temp);
 }
}
Polinomial Polinomial::operator+(Polinomial op2)
{
  //vorrei non modificare i vettori originari ma non so come fare
  if (this->degree <= op2.degree) {
    for(int i = 0; i < this->degree+1; i++)
         op2.v[i] = v[i] + op2.v[i];
    return op2;
 }
 else {
    for(int i = 0; i < op2.degree+1; i++)
         v[i] = v[i] + op2.v[i];
    return *this;
 }
}
ostream &operator<<(ostream &stream, Polinomial op1)
{
 stream << "( ";
 for(int i=op1.degree; i=0; i--)
        stream << op1.v[i] << " ";
 stream << ")\n";
 return stream;
}
int main()
{
 Monomial m1(2,3), m2(3,2);
 cout << "m1 = " << m1 << "\nm2= " << m2 << "\n";
 cout << "La somma di m1 e m2 e': " << m1 + m2 << "\n";
 cout << "La differenza tra m1 e m2 e': " << m1 - m2 << "\n";
 m1(1,1);
 m2(0,0);
 cout << "m1 = " << m1 << "\nm2= " << m2 << "\n";
 Polinomial p1(5,m1), p2(7,m2);
 cout << "p1 = " << p1 << "\np2= " << p2 << "\n";
 cout << "La somma di p1 e p2 e': " << p1 + p2 << "\n";
 cout << "p1 = " << p1 << "\np2= " << p2 << "\n";
 return 0;
}

 a0 e a1;
scusa, ma un monomio non e' un ente del tipo:
a*x^n
??
potresti specificare il senso di a0 e a1??
(io semmai userei float a e int n... ma probabilmente mi sfugge qualcosa 
del tuo modello...)
bye
dan

 del tuo modello...)
Sicuramente il professore voleva dire polinomi di grado uno e polinomi
generici. Cmq rimane il fatto che non sono riuscito a far funzionare la
cosa... :(
Ciao e grazie!