Divisione di polinomi di grado n

di il
7 risposte

Divisione di polinomi di grado n

Sono molto scarso in c++ e sto cercando di creare un programma che mi divida due polinomi di grado n ma ottengo sempre un errore di segmentazione. nel programma che mando i polinomi sono rappresentati con i vettori che contengono solo il coefficiente, ho un programma a parte, e funzionante, per creare e stampare i polinomi di grado n a scelta ma non riesco a far funzionare la divisione(so che non è completo il processo ma voglio solo cercare di far funzionare questa parte che ho scritto per poi completarlo). per favore aiutatemi che ho una scommessa in gioco con un amico e di questo passo perdo sicuro

#include <iostream>
#include <vector>
/*i vettori utilizzati sono da considerare come i coefficienti di un polinomio, il vettore [2,2] sarà quindi uguale a 2x+2; il vettore [4,3,2,1] sarà 4x^3+3x^2+2x+1*/
std::vector <double> division (std::vector <double> v1, std::vector <double>v2, int c){
    std::vector<double> partial_subtructor (v2.size());
    std::vector<double> divisor(v1.size());
    std::vector<double> result;
    std::vector<double> k;
        for(int i=0; i<v1.size();i++){
            divisor[i]= v1[i];//copia il vettore v1 su divisor che diventa [2,2]
        };    
        while(divisor.size()>=v2.size()){
            double multiplier = divisor[0]/v2[0]; //calcola il primo coefficiente del risultato 
            for (int i=0; i<divisor.size(); i++){
                partial_subtructor[i]= (v2[i]*multiplier);//calcola partial_subrtuctor[2,2], moltiplicando il moltiplicatore al vettore 2
            }
            for (int i=0; i<partial_subtructor.size(); i++){
                divisor[i]= (divisor[i] - partial_subtructor[i]);//sottrae e sostituisce al divisor il partial_subtractor [0,0]
            }        
            while (divisor[0]==0){
                divisor.erase(divisor.begin());//cancella dal divisor i coefficienti uguali a 0 prima del primo valore diverso da 0
            }
            result.push_back(multiplier);//salva il coeffiente del risultato su result
        };
        switch (c)//permette di scegliere se restituire il resto o il risultato
        {
            case 1:
                for(int i=0; i<result.size();i++){
                    k[i]= result[i];//restituisce il risultato
                }
                break;
            case 2:
                for(int i=0; i<divisor.size();i++){
                    k[i]= divisor[i];//restituisce il resto
                break;
            }
        }
    return k;
};
int main () {
    std::vector<double> u1{2,2};//v1
    std::vector<double> u2{1,1};//v2
    std::vector<double> result;
    int a=1;//indicatore per la scelta del risultato o del resto
    result = division(u1,u2,a);
    std::cout<< result[0]<<'\n';
}

7 Risposte

  • Re: Divisione di polinomi di grado n

    Usa i tag code per il codice nel forum o non si capisce nulla
  • Re: Divisione di polinomi di grado n

    Ha ragione, spero ora vada bene
  • Re: Divisione di polinomi di grado n

    Non sono entrato nel contesto del tuo programma analizzando il modo con cui operi, ma mi sono limitato a vedere dove hai gli errori e, a parte qualche ; aggiunto dove non serve (ma che non crea problemi), direi che dovresti correggere queste linee scrivendole così
    
            while (divisor.size()>1 && divisor[0] == 0) {
                divisor.erase(divisor.begin());//cancella dal divisor i coefficienti uguali a 0 prima del primo valore diverso da 0
            }
    
    dato che non devi rimuovere l'elemento a 0 se è l'ultimo



    e anche
    
        case 1:
            k = result;
            break;
    

    per assegnare correttamente result a k.
  • Re: Divisione di polinomi di grado n

    Grazie ora non mi da più il problema di prima ma non capisco come mai debba porre k = result e non come avevo scritto io con il ciclo for
  • Re: Divisione di polinomi di grado n

    Ragiona, cosa volevi fare con il ciclo?
  • Re: Divisione di polinomi di grado n

    Ricopiare ogni elemento di result sul corrispondente elemento di k, ho capito che così è più efficiente ma non dovrebbe funzionare comunque?
  • Re: Divisione di polinomi di grado n

    Sì ma k non ha alcun elemento allocato, quindi non puoi usare k[ i ] ...

    Per non avere un errore avresti dovuto scrivere prima della for
    
    k.resize(result.size());
    
Devi accedere o registrarti per scrivere nel forum
7 risposte