Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    20

    Calcolo della radice come limite di una successione:Errore!

    Questo programma l'avevo già postato una quindicina di giorni fa se non vado errato..
    il programma funzione perfettamente, eccetto per il calcolo della radice come limite di funzione...ho tentato in più modi di scrivere il programmino..per ora vi posto questa versione...
    Vi sarei molto grato se qualcuno potesse modificare il programma in modo che funzioni completamente..
    P.S=Non è considerato valido l'uso di puntatori
    Uso della sola procedura void

    Per il limite di una successione basarsi su questo codice:
    codice:
    ...
    Y=1;
    do
    {Y=(Y + X /Y)/2;
     cout<<Y<<"\n";
    }while(fabs((Y*Y-X)/X)>E);
    Programma da modificare:
    codice:
    /*
    
    Si scriva un programma che, assegnato in ingresso, ad un vettore V, un insieme
    di n valori interi, calcoli la somma som ed il prodotto prod degli elementi del
    vettore V e visualizzi quindi i valori di som e prod. Di ogni elemento del vettore,
    si calcoli inoltre la radice quadrata in due modi distinti: utilizzando la funzione
    di libreria sqrt e scrivendo esplicitamente le istruzioni per il calcolo della
    radice quadrata come limite di una successione, con precisione assegnata in ingresso.
    Si produca quindi, sul supporto di uscita, una tabella che per ogni valore V[i]
    riporti i valori di sqrt(V[i]) e della radice di V[i] calcolata nel secondo modo.
    Si strutturi il programma in sottoprogrammi (ad esempio: input, somma, prodotto,
    radice, output).
    
    ESEMPIO
    INPUT
    n = 4
    V=  2 4 6 8
    errore tollerato per il calcolo della radice quadrata = 0.1
    
    OUTPUT
    la somma degli elementi del vettore e' = 20
    il prodotto degli elementi del vettore e' = 384
    
    V[i]          RQ1[i]            RQ2[i]
    2               1.41421         1.41667
    4               2               2.00061
    6               2.44949         2.44949
    8               2.82843         2.82847
    */
    
    #include<iostream>
    using namespace std;
    #include<stdlib.h>
    #include<math.h>
    
    //Prototipi delle funzioni
    void input(int &n, int v1[], double&E);
    void somma(int n,int v1[],int &som);
    void prodotto(int n, int v1[], int &prod);
    void radice_sqrt(int n, int v1[], double rq1[]);
    void radice_newton(int &n,int v1[],double E,double rq2[]);
    void output(int som, int prod,int n, int v1[], double rq1[],double rq2[]);
    
    
    int main()
    {
        //Dichiarazioni
        int v1[100];
        int n;
        int som;
        int prod;
        double rq1[100];
        double E;
        double rq2[100];
        
        //Chiamate delle funzioni
        input(n,v1,E);
        somma(n,v1,som);
        prodotto(n,v1,prod);
        radice_sqrt(n,v1,rq1);
        radice_newton(n,v1,E,rq2);
        output(som,prod,n,v1,rq1,rq2);
        
        
        cout<<"\n\n";
        system("PAUSE");
        return 0;
    }
    
    void input(int &n, int v1[], double&E)
    {
        int i;
        cout<<"N = ";
        cin>>n;
        
        cout<<"V= ";
        for(i=0;i<n;i++)
        {
            cin>>v1[i];
        }
        cout<<"\nerrore tollerato per il calcolo della radice quadrata = ";
        cin>>E;
    }
    
    void somma(int n,int v1[],int &som)
    {
        int i;
        som = 0;
        for(i=0;i<n;i++)
        {
            som = som + v1[i];
        }
    }
    
    void prodotto(int n, int v1[], int &prod)
    {
        int i;
        prod=1;
        for(i=0;i<n;i++)
        {
            prod = prod * v1[i];
        }
    }
    
    void radice_sqrt(int n, int v1[], double rq1[])
    {
         int i;
         for(i=0;i<n;i++)
         {
             rq1[i] = sqrt(double(v1[i]));
         }
    }
    
    void radice_newton(int &n,int v1[],double E,double rq2[])
    {     
        int i;
        double Y;
        int k;
        Y=1; 
        if(i<n && fabs((Y*Y-v1[i])/v1[i])>E)
         {   Y=(Y+v1[i]/Y)/2;
             i++;
         }
         else
         {
             rq2[n]=Y;
             n++;
         }
    }       
    
    void output(int som, int prod,int n, int v1[], double rq1[],double rq2[]) 
    {
        int i;//indice di scorrimento del vettore
        
        cout<<"la somma degli elementi del vettore e' = " << som<<"\n";
        cout<<"il prodotto degli elementi del vettore e' = "<<prod<<"\n";
        
        cout<<"V[i]\t\t RQ1[i]\t\t RQ2[i]\n";
        for(i=0;i<n;i++)
        {
            cout<<v1[i]<<"\t\t"<<rq1[i]<<"\t\t"<<rq2[i]<<"\n";
        }
    }
    Grazie a tutti come al solito...

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    20

    [C++]..L'avevo dimenticato :dottò:

    Ho dimenticato di indicare il codice...
    Prego gli admin di modificarlo

    Ovviamente il codice è c++....

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    20
    Nessuna idea...?!?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Manca l'inizializzazione della variabile i

    codice:
    void radice_newton(int &n,int v1[],double E,double rq2[])
    {     
        int i = 0;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    20
    Si oregon me ne ero già accorto.. non potendo modificare il messaggio ho dovuto lasciarlo così..
    Ma il programma non funziona, anche modificato con i =0;... non è che potresti modificarlo.. in modo che funzioni?anche cambiando totalmente approccio..ricordando sempre quel P.S. le ho provate tutte... non saprei davvero come fare..

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Inserendo quella modifica il programma da' il risultato corretto ... tu cosa inserisci? Quali risultati hai?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    20
    codice:
    /*
    
    Si scriva un programma che, assegnato in ingresso, ad un vettore V, un insieme
    di n valori interi, calcoli la somma som ed il prodotto prod degli elementi del
    vettore V e visualizzi quindi i valori di som e prod. Di ogni elemento del vettore,
    si calcoli inoltre la radice quadrata in due modi distinti: utilizzando la funzione
    di libreria sqrt e scrivendo esplicitamente le istruzioni per il calcolo della
    radice quadrata come limite di una successione, con precisione assegnata in ingresso.
    Si produca quindi, sul supporto di uscita, una tabella che per ogni valore V[i]
    riporti i valori di sqrt(V[i]) e della radice di V[i] calcolata nel secondo modo.
    Si strutturi il programma in sottoprogrammi (ad esempio: input, somma, prodotto,
    radice, output).
    
    ESEMPIO
    INPUT
    n = 4
    V=  2 4 6 8
    errore tollerato per il calcolo della radice quadrata = 0.1
    
    OUTPUT
    la somma degli elementi del vettore e' = 20
    il prodotto degli elementi del vettore e' = 384
    
    V[i]          RQ1[i]            RQ2[i]
    2               1.41421         1.41667
    4               2               2.00061
    6               2.44949         2.44949
    8               2.82843         2.82847
    */
    
    #include<iostream>
    using namespace std;
    #include<stdlib.h>
    #include<math.h>
    
    //Prototipi delle funzioni
    void input(int &n, int v1[], double&E);
    void somma(int n,int v1[],int &som);
    void prodotto(int n, int v1[], int &prod);
    void radice_sqrt(int n, int v1[], double rq1[]);
    void radice_newton(int &n,int v1[],double E,double rq2[]);
    void output(int som, int prod,int n, int v1[], double rq1[],double rq2[]);
    
    
    int main()
    {
        //Dichiarazioni
        int v1[100];
        int n;
        int som;
        int prod;
        double rq1[100];
        double E;
        double rq2[100];
        
        //Chiamate delle funzioni
        input(n,v1,E);
        somma(n,v1,som);
        prodotto(n,v1,prod);
        radice_sqrt(n,v1,rq1);
        radice_newton(n,v1,E,rq2);
        output(som,prod,n,v1,rq1,rq2);
        
        
        cout<<"\n\n";
        system("PAUSE");
        return 0;
    }
    
    void input(int &n, int v1[], double&E)
    {
        int i;
        cout<<"N = ";
        cin>>n;
        
        cout<<"V= ";
        for(i=0;i<n;i++)
        {
            cin>>v1[i];
        }
        cout<<"\nerrore tollerato per il calcolo della radice quadrata = ";
        cin>>E;
    }
    
    void somma(int n,int v1[],int &som)
    {
        int i;
        som = 0;
        for(i=0;i<n;i++)
        {
            som = som + v1[i];
        }
    }
    
    void prodotto(int n, int v1[], int &prod)
    {
        int i;
        prod=1;
        for(i=0;i<n;i++)
        {
            prod = prod * v1[i];
        }
    }
    
    void radice_sqrt(int n, int v1[], double rq1[])
    {
         int i;
         for(i=0;i<n;i++)
         {
             rq1[i] = sqrt(double(v1[i]));
         }
    }
    
    void radice_newton(int &n,int v1[],double E,double rq2[])
    {     
        int i;
        double Y;
        int k;
        Y=1; 
        i=0;
        if(i<n && fabs((Y*Y-v1[i])/v1[i])>E)
         {   Y=(Y+v1[i]/Y)/2;
             i++;
         }
         else
         {
             rq2[n]=Y;
             n++;
         }
    }       
    
    void output(int som, int prod,int n, int v1[], double rq1[],double rq2[]) 
    {
        int i;//indice di scorrimento del vettore
        
        cout<<"la somma degli elementi del vettore e' = " << som<<"\n";
        cout<<"il prodotto degli elementi del vettore e' = "<<prod<<"\n";
        
        cout<<"V[i]\t\t RQ1[i]\t\t RQ2[i]\n";
        for(i=0;i<n;i++)
        {
            cout<<v1[i]<<"\t\t"<<rq1[i]<<"\t\t"<<rq2[i]<<"\n";
        }
    }
    Risultato:
    N = 4
    V= 2 4 6 8

    errore tollerato per il calcolo della radice quadrata = 0.1
    la somma degli elementi del vettore e' = 20
    il prodotto degli elementi del vettore e' = 384

    V[i] RQ1[i] RQ2[i]
    2 1.41421 -5.65934e-021
    4 2 -1.45943e+173
    6 2.44949 1.2958e-309
    8 2.82843 1.17417e+292


    Premere un tasto per continuare . . .
    Come vedi.. i valori di RQ2 sono totalmente sbagliati...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Sì ... guardavo solamente la prima colonna ...

    Secondo me, il codice dovrebbe essere

    codice:
    void radice_newton(int &n,int v1[],double E,double rq2[])
    {     
        int i;
    
        for(i=0;i<n;i++)
        {
            rq2[i]=1;
            do
            {
                rq2[i]=(rq2[i] + v1[i] / rq2[i])/2;
            } while(fabs((rq2[i] * rq2[i] - v1[i]) / v1[i]) >E);
        }
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Molto probabilmente frequentiamo lo stesso corso di laurea poikè qst programma l'ho fatto anke io identico. (ingegneria elettronica fed 2 prof Cordella?).................
    cmq io l'ho fatto così e gira..vedi un pò..
    codice:
    #include<iostream>
    using namespace std;
    #include<stdlib.h>
    #include<math.h>
    
    void input_vettore(float vett[], int& riemp,float& E);
    void somma(float vett[], int riemp, float& somma);
    void output_somma(float somma);
    void prodotto(float vett[], int riemp, float& prodotto);
    void output_prodotto(float prodotto);
    void radquad1(float vett[], int riemp, float RQ1[]);
    void output_radquad(int riemp, float RQ1[]);
    void radquad2(float vett[],int riemp, float RQ2[], float E);
    void output_radquad2(int riemp, float RQ2[]);
    
    
    int main()
    {
        float V[100],E;
        int n;
        float som,prod,RQ1[100],RQ2[100],y;
        
        input_vettore(V,n,E);//Chiamata funzione input
        somma(V,n,som);//Chiamata funzione somma
        output_somma(som);//Chiamata funzione output somma
        prodotto(V,n,prod);//Chiamata funzione prodotto
        output_prodotto(prod);//Chiamata funzione output prodotto
        radquad1(V,n,RQ1);//Chiamata funzione radquad1
        output_radquad(n,RQ1);//Chiamata funzione output radquad1
        radquad2(V,n,RQ2,E);//Chiamata funzione radquad2
        output_radquad2(n,RQ2);//Chaimata funzione output radquad2
        
        system("PAUSE");
        return 0;
    }
    
    
    //Funzione input vettore
    void input_vettore(float vett[], int& riemp,float& E)
    {
         int i;
         cout<<"Assegna valore intero al numero n di elementi del vettore:\t";
         cin>>riemp;
         cout<<"\n\nAssegna "<<riemp<<" valori reali agli elementi del vettore:\n\n";
         for(i=0;i<riemp;i++)
         {
                             cin>>vett[i];
         }
         cout<<"Assegna valore alla precisione richiesta:\t";
         cin>>E;
    }
    //Funzione somma elementi del vettore 
    void somma(float vett[], int riemp, float& somma)
    {
         int i;
         somma=0;
         for(i=0;i<riemp;i++)
         {
                             somma=somma+vett[i];
         }
    }
    
    //Funzione output somma vettore
    void output_somma(float somma)
    {
         cout<<"\nSomma = "<<somma;
         cout<<"\n\n";
    }
    
    //Funzione prodotto elementi del vettore
    void prodotto(float vett[], int riemp, float& prodotto)
    {
         int i;
         prodotto=1;
         for(i=0;i<riemp;i++)
         {
                             prodotto=prodotto*vett[i];
         }
    }
    
    //Funzione output prodotto
    void output_prodotto(float prodotto)
    {
         cout<<"Prodotto = "<<prodotto;
         cout<<"\n\n";
    }
    
    //Funzione Radice quadrata tramite "sqrt"
    void radquad1(float vett[], int riemp, float RQ1[])
    {
         int i;
         for(i=0;i<riemp;i++)
         {
                             RQ1[i]=sqrt(vett[i]);
                             
         }
    } 
    
    //Funzione output radquad
    void output_radquad(int riemp, float RQ1[])
    {
         int i;
         cout<<"RQ1:\t";
         for(i=0;i<riemp;i++)
         {
                             cout<<RQ1[i]<<"\t\t";
         }
         cout<<"\n\n";
    }
    
    //Funzione Radice quadrata tramite formula di Newton
    void radquad2(float vett[],int riemp, float RQ2[], float E)
    {
         int i;
         float y;
         for(i=0;i<riemp;i++)
         {
                             y=1;
                             do
                             {
                                 y=(y+vett[i]/y)/2;
                             }while(fabs((y*y-vett[i])/vett[i])>E);
                             RQ2[i]=y;
                             
         }
    }
    
    //Funzione output radquad2
    void output_radquad2(int riemp, float RQ2[])
    {
         int i;
         cout<<"RQ2:\t";
         for(i=0;i<riemp;i++)
         {
                             cout<<RQ2[i]<<"\t\t";
         }
         cout<<"\n\n";
    }
    Molte cose sono superflue..(tipo tutti quegli output)..cmq gira..ciao e fammi sapere ki sei così casomai ci vediamo in facoltà..

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    20
    Originariamente inviato da oregon
    codice:
    void radice_newton(int &n,int v1[],double E,double rq2[])
    {     
        int i;
    
        for(i=0;i<n;i++)
        {
            rq2[i]=1;
            do
            {
                rq2[i]=(rq2[i] + v1[i] / rq2[i])/2;
            } while(fabs((rq2[i] * rq2[i] - v1[i]) / v1[i]) >E);
        }
    }
    Si avevo provato anch'io questo codice.. sbagliavo nell'inserire rq2[0]=1; invece che rq2[i]=1;
    effettivamente funziona.. anche se noto dei valori diversi nelle cifre decimali...
    Sto ripetendo un po' i programmi vecchi.. e questo era uno dei pochi che non mi riusciva...
    Grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.