Programma in C++

di il
5 risposte

Programma in C++

Buongiorno a tutti! Vorrei che mi deste qualche dritta per questo progetto d'informatica, preciso che la prima parte del progetto (trovare gli intervalli in cui si trovano gli zeri e gli zeri della funzione) sono già stati completati. Il mio problema è lanciare con un solo cpp i 2 header file degli intervalli e degli zeri e poi sempre da questo cpp, lanciare il grafico della funzione con GNUplot. Oltre a questo vorrei anche sapere come posso fare il grafico della funzione partendo dalla sola funzione e non da un file contenente tutti i punti.
Questo è il testo del progetto:
Data la funzione f ( x) =( x^3-x^2-x-1)^3 con x ? [-1,+2] si progetti e implementi una
classe che
? esegua il grafico della funzione con gnuplot
? individui gli intervalli in cui esiste almeno uno zero della funzione
? trovi gli zeri con l'algoritmo di bisezione, richiedendo una precisione sulla terza cifra
decimale
? verifichi che la soluzione trovata soddisfa la condizione f (x) =0 entro la
precisione richiesta
Grazie a tutti per l'aiuto

5 Risposte

  • Re: Programma in C++

    il mio problema è lanciare con un solo cpp i 2 header file degli intervalli e degli zeri
    Ciò che hai scritto non ha senso. spiegati meglio.
  • Re: Programma in C++

    Voglio che un solo file.cpp esegua due funzioni una successiva all'altra: in dettaglio la prima funzione trova gli intervalli dove sono gli zeri, e la funzione dopo dovrebbe , con il metodo della bisezione, trovare gli zeri negli intervalli trovati dalla prima
  • Re: Programma in C++

    E quindii? dove sta il problema?
    
    func1();
    func2();
    
    se li piazzi in un qualsiasi file questi verrano eseguiti in sequenza.
  • Re: Programma in C++

    Grazie
    Adesso però ho un altro problema! Quando compilo questo

    #include <iostream>
    #include <cstdlib>
    #include "Dividi.h"


    using namespace std;

    double y(const double x)
    {
    double y = pow((pow(x,3)-pow (x,2) - x - 1),3);
    return y;
    }

    int main()
    {
    Dividi<double> Dividi(-1.0, 2.0, 1000);
    cout << "Gli zeri della funzione sono nei seguenti intervalli: " << Dividi.Calcola(y) << endl;

    return 0;
    }
    mi dice che nel .h (questo):

    #include <limits>
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include "array1D.h"
    #include "mathLib.h"


    using namespace std;

    template <typename TYPE>
    class Dividi
    {
    public:
    Dividi (TYPE left, TYPE right, int j)
    {
    this->left = left;
    this->right = right;
    this->j = j;
    toll = std::numeric_limits<TYPE>::epsilon();
    toll *= 100.;
    double delta = toll;
    double epsilon = toll;
    }

    TYPE get_left()
    {
    return left;
    }

    TYPE get_right()
    {
    return right;
    }




    private:
    TYPE left;
    TYPE right;
    int j;
    TYPE toll;
    TYPE yleft;
    TYPE yright;
    TYPE intervallo;
    TYPE Dx;
    // dentro il vettore intervallo ci sono tanti valori quanti gli zeri della funzione
    // intervallo contiene gli intervallini i cui estremi sono discordi
    };


    MyLib::Array1D<TYPE> Dividi<TYPE>::Calcola(TYPE y(const TYPE x))
    {
    intervallo = right - left;
    Dx = intervallo/1000;
    MyLib::Array1D<TYPE> intervallini;
    for ( j = 0; j < 1000; j++)
    {
    cout << "!! j = " << j << endl;
    yleft = y(left);
    right = left + Dx;
    yright = y(right);
    cout << "!! left = " << left << "! f(left) = " << yleft << endl;
    cout << "!! right = " << right << "! f(right) = " << yright << endl;
    if (yleft*yright < (TYPE) 0)
    {
    intervallini.push_back(left);
    intervallini.push_back(right);
    // return 0;
    // fa parte del vettore intervallo


    //inseriamo qui l'algoritmo della bisezione
    for (int k = 1; k < 20; k++)
    {
    intervallo = intervallo/2.0;
    centro = left + intervallo;
    centroFcn = y(centro);
    if (intervallo < delta || abs(centroFcn) < epsilon)
    {
    return centro;
    cout << "Lo zero della funzione e': " << centro << endl;
    }
    if (y(left) * y(centro) < 0)
    {
    right = centro;
    rightFcn = centroFcn;
    }
    else
    {
    left = centro;
    leftFcn = centroFcn;
    }
    }
    } // qui finisce l'algoritmo di bisezione
    else
    {
    // non fa parte del vettore intervallo
    cout << " !!! NON ESISTONO ZERI IN QUESTO INTERVALLO !!! " << endl;
    }
    left = left + Dx;
    // right = right + Dx;
    right = left + Dx;
    }
    }
    return (intervallini);
    }
    mi dà gli errori nell'allegato
    Non so più cosa fare...
    Allegati:
    Questi sono gli errori
    Questi sono gli errori
  • Re: Programma in C++

    Impara ad usare i tag code. cosi non si capisce niente. Il file .h usa dei template, cosa sai su di loro?
Devi accedere o registrarti per scrivere nel forum
5 risposte