Oppure

Loading
29/12/09 10:36
Puffetta
Ciao a tutti!! ho un problema con questo codice

/*Scrivere un programma C++ che legge un intero positivo n, un numero reale a e i coefficienti di un polinomio p(x) di grado 2n; successivamente calcola il valore p(a) - sfruttando l'esistenza di sole potenze pari - e lo stampa sul video.*/

#include<stdio.h>
#include<stdlib.h>

const int size=100;
typedef double vettore[size];

int leggigradopolinomio();
void leggicoefficienti(vettore, int);
double leggia();
double pna(vettore, double, int);
void stampa(double, double);

main()
{
      int n; vettore c; double a, s;
      
      n=leggigradopolinomio();
      
      leggicoefficienti(c, n);
      
      a=leggia();
      
      s=pna(c, a, n);
      
      stampa(a, s);     
            
      system("PAUSE");
      return 0; 
}


int leggigradopolinomio()
{
    int a;
    
    do
        {
             printf("\n\n Qual'e' il grado pari massimo del polinomio?   2n=");
             scanf("%d", &a);
        }
      while((a>size)||!(a%2==0));
      
      return a;
}


void leggicoefficienti(vettore x, int a)
{
     for(int i=0; i<a; i++)
                   {
                         printf("\n Il coefficiente a[%d] del polinomio vale: ", i);
                         scanf("%lf", &x[i]);                         
                   }
     return;
}


double leggia()
{
       double x;
       
       printf("\n\n In quale punto dobbiamo calcolare il valore del polinomio? x=");
       scanf("%lf", &x);
       
       return x;
}


double pna(vettore x, double a, int n)
{
       double s, pot;
       
       pot=a*a;
      
       s=x[0]+(x[1]*pot);
      
       for(int k=2; k<n; k++)
                    {     
                          pot=pot*(a*a);
                          
                          s=s+(x[k]*pot);
                    }
                    
       return s;       
}


void stampa(double d, double b)
{         
      printf("\n\n Il valore del polinomio p(x)nel punto x=%lf e' uguale a %lf\n\n", d, b);     
      
      return;
}


Il mio problema è che non riesco quando leggo i coefficienti del polinimio a farmi dare solo ed escusivamente quelli di grado pari. ad esempio x^0; x^2;x^4;...; x^2n eliminando quelli di grado dispari intermedi... c'è un modo per farlo?

grazie in anticipo per l'aiuto!!!!!!!!!
aaa
29/12/09 11:31
HeDo
si che c'è un modo, considera questo pezzo di codice come "core" della tua implementazione




for (int n = 0; n < N; n += 2) {
cout << A[n] << endl;
}



dove N è il grado del polinomio, e il vettore A contiene i suoi coefficienti.
Nel ciclo for i campi inizializzazione, controllo e iterazione possono contenere qualsiasi cosa :)
Ultima modifica effettuata da HeDo 29/12/09 12:11
aaa
29/12/09 12:11
Puffetta
ah, giusto. non ci avevo proprio pensato. scusa ma sono alle prime armi. a questo punto però devo modificare anche il ciclo che regola l'algoritmo di horner così giusto?
double pna(vettore x, double a, int n)
{
       double s, pot;
       
       pot=a*a;
      
       s=x[0]+(x[2]*pot);
      
       for(int k=4; k<n; k+=2)
                    {     
                          pot=pot*(a*a);
                      
                          s=s+(x[k]*pot);
                    }
       return s;       
}


grazie!!!
aaa
29/12/09 12:12
HeDo

perchè fai partire k da 4?
aaa
29/12/09 12:18
Puffetta
perchè x[k=0] e x[k=2] hanno già i loro valori definiti prima del ciclo. L'algoritmo di Horner in gerere ha un for che parte dal terzo termine, cioè per i=0,1,2, 3..n il ciclo deve partire da 2. in questo caso considerando che i=0,2, 4,6,.., 2n il terzo termine è 4. mi sono spiegata?
aaa
29/12/09 12:48
HeDo

ok capito, cmq non devi modificare l'agoritmo di horner, quello è così :)

semplicemente in fase di presentazione dei dati, mostri solo quelli con indice pari.

era questa la consegna, giusto?
aaa
29/12/09 12:57
Puffetta
si... ma l'algoritmo devo modificarlo per forza perchè mentre in generale si raccoglie solo la x, visto che è pari posso raccogliere ogni volta x^2...
aaa
29/12/09 13:30
HeDo
Postato originariamente da Puffetta:

si... ma l'algoritmo devo modificarlo per forza perchè mentre in generale si raccoglie solo la x, visto che è pari posso raccogliere ogni volta x^2...


implementalo e poi ragioniamo sul codice :)
aaa