Problema Polinomi

di il
6 risposte

Problema Polinomi

Salve a tutti,
ho un problema con un metodo che calcola il prodotto tra 2 polinomi di grado N.
Il mio polinomio è formato da un intero che rappresenta il grado del polinomio e da una map<int,Monomio> in cui memorizzo i singoli monomi.
Il risultato della moltiplicazione è corretto,ma nel caso in cui manchi uno dei monomi,mi stampa un'indirizzo di memoria.
Ad esempio: (4x + 2) * (3x^2 + 5x) = (1.05608e-307) + (10x) + (26x^2) + (12x^3).

Il codice è il seguente:

Polinomio operator*(const Polinomio& p1,const Polinomio& p2){
Polinomio ris;
ris.setGrado(p1.gradoPol+p2.gradoPol);

map<int,Monomio>map1=p1.mon;
map<int,Monomio>map2=p2.mon;
map<int,Monomio>::iterator it1;
map<int,Monomio>::iterator it2;
for(int i=0;i<=p1.gradoPol;i++){
Polinomio temp;
it1=map1.find(i);
Monomio m1=(*it1).second;
for(int j=0;j<=p2.gradoPol;j++){
it2=map2.find(j);
Monomio m2=(*it2).second;
Monomio m3=m1*m2;

temp.setMonomio(m3);
}
ris=ris+temp;
}

return ris;
}


Se qualcuno mi sa dare un suggerimento gliene sarei molto grato

6 Risposte

  • Re: Problema Polinomi

    Mi rispondo da solo
    problema risolto
  • Re: Problema Polinomi

    robbie ha scritto:


    Salve a tutti,
    ho un problema con un metodo che calcola il prodotto tra 2 polinomi di grado N.
    Il mio polinomio è formato da un intero che rappresenta il grado del polinomio e da una map<int,Monomio> in cui memorizzo i singoli monomi.
    Il risultato della moltiplicazione è corretto,ma nel caso in cui manchi uno dei monomi,mi stampa un'indirizzo di memoria.
    Ad esempio: (4x + 2) * (3x^2 + 5x) = (1.05608e-307) + (10x) + (26x^2) + (12x^3).













    Il codice è il seguente:

    Polinomio operator*(const Polinomio& p1,const Polinomio& p2){
    Polinomio ris;
    ris.setGrado(p1.gradoPol+p2.gradoPol);

    map<int,Monomio>map1=p1.mon;
    map<int,Monomio>map2=p2.mon;
    map<int,Monomio>::iterator it1;
    map<int,Monomio>::iterator it2;
    for(int i=0;i<=p1.gradoPol;i++){
    Polinomio temp;
    it1=map1.find(i);
    Monomio m1=(*it1).second;
    for(int j=0;j<=p2.gradoPol;j++){
    it2=map2.find(j);
    Monomio m2=(*it2).second;
    Monomio m3=m1*m2;

    temp.setMonomio(m3);
    }
    ris=ris+temp;
    }

    return ris;
    }


    Se qualcuno mi sa dare un suggerimento gliene sarei molto grato

    ecco l'errore.. allora elimina il temp e nella riga questa... [ temp.setMonomio(m3);] metti m2 e vedi che il problema è risolto, e se nn funziona ricordo male..
    spero sia cosi'.. ciao
  • Re: Problema Polinomi

    Innanzitutto grazie per l'interessamento.

    Il problema l'ho risolto a modo mio,anche se quello che tu suggerisci è molto più semplice.Se ho capito bene mi dici di sommare direttamente ogni singolo monomio. Il codice diverrebbe:

    //ridefinizione dell'operatore prodotto tra due polinomi
    Polinomio operator*(const Polinomio& p1,const Polinomio& p2){
    Polinomio ris;
    ris.setGrado(p1.gradoPol+p2.gradoPol);
    cout<<endl;
    cout<<ris;
    cout<<endl;
    map<int,Monomio>map1=p1.mon;
    map<int,Monomio>map2=p2.mon;
    map<int,Monomio>::iterator it1;
    map<int,Monomio>::iterator it2;
    for(int i=0;i<=p1.gradoPol;i++){

    it1=map1.find(i);
    Monomio m1=(*it1).second;
    if(m1.getCoeff()!=0.0){
    for(int j=0;j<=p2.gradoPol;j++){
    Monomio m3;
    it2=map2.find(j);
    Monomio m2=(*it2).second;

    m3=m1*m2;
    ris=ris+m3;


    }



    }
    }
    return ris;
    }

    Sto facendo dei test,pare che funzioni.
    Grazie ancora
  • Re: Problema Polinomi

    Si ho semplificato xkè cosi' eviti anche bug e incopatibilità...
  • Re: Problema Polinomi

    Si Si funziona bene, hai perfettamente ragione. E' sicuramente meglio così.
    Ti devo un favore...
  • Re: Problema Polinomi

    Cmq dammi il tuo contatto msn cosi' ci aiutiamo a vicenda sull'uso di vb e CC+
Devi accedere o registrarti per scrivere nel forum
6 risposte