Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    41

    [C++] Stroustrup 10.6 distribution classes

    Salve, mi sto esercitando sull'utilizzo delle classi risolvendo alcuni esercizi di Stroustrup. Purtroppo non ho le soluzioni (non so neanche se esistono) e facendo da autodidatta non riesco a capire se sto facendo bene o meno, quindi chi avrà la pazienza di leggere e darmi un riscontro avrà la mia gratitudine (che fortuna eh...).
    Il programma sembra funzionare correttamente, ma ovviamente non so autovalutare il mio lavoro d'implementazione. L'esercizio richiedeva la scrittura di una classe per la generazione di random variable estratte dalla distribuzione uniforme e esponenziale.
    Qui riporto l'header e il source, grazie a chi vorrà commentare.
    In particolare ho dubbi sulla ripetizione degli header nei due file (forse il cpp può evitare di riscrivere gli header già inclusi nel .header annesso?, in questo caso solo <vector>, ma la domanda è generale, cioè c'è una prassi?). Inoltre non so quale implementazione della funzione che genera un vettore di r.v. è il migliore. Grazie

    Header

    codice:
    #ifndef UNIFORM_DISTRIBUTION_H
    #define UNIFORM_DISTRIBUTION_H
    
    
    #include <vector>
    
    
    class UniformDist {
        private:
                double _a, _b; //distributions' interval
        public: 
                UniformDist(); //default constructor (default interval [0,1])
                UniformDist(const double& a_, const double& b_); //parameter constructor
                UniformDist(const UniformDist& rhs); //copy constructor
                virtual ~UniformDist(); //virtual destructor
                double get_a(); //get _a
                double get_b(); //get _b
                // extract a realization of a r.v. having a uniform distribution on the [a,b] interval
                void gen_samples(std::vector<double>& Vsamples);
                void gen_samples(const int& Nsamples, std::vector<double>& Vsamples); 
    };
    
    
    #endif
    Source

    codice:
    #ifndef UNIFORM_DISTRIBUTION_CPP
    #define UNIFORM_DISTRIBUTION_CPP
    
    #include <cstdlib>
    #include <vector>
    #include <ctime>
    #include "UniformDist.h"
    
    
    //default constructor
    UniformDist::UniformDist(){
        srand(time(0));
        _a = 0;
        _b = 1;
    }
    
    
    //parameter constructor
    UniformDist::UniformDist(const double& a_, const double& b_){
        srand(time(0));
        _a = a_;
        _b = b_;
    }
    
    
    //copy constructor
    UniformDist::UniformDist(const UniformDist& rhs){
         _a = rhs.get_a();
         _b = rhs.get_b();
    }
    
    
    //virtual destructor
    UniformDist::~UniformDist() {};
    
    
    //getters
    double UniformDist::get_a(){
        return _a;
    }
    
    
    double UniformDist::get_b(){
        return _b;
    }
    
    
    //return a vector of Nsample samples from the uniform distribution on the [_a,_b] interval
    void UniformDist::gen_samples(const int& Nsamples, std::vector<double>& Vsamples){
        srand(time(0));
        Vsamples.assign(Nsamples, 0.0);
        for(std::vector<double>::iterator iter = Vsamples.begin(); iter != Vsamples.end(); iter++){
            *iter = (_b -_a)*(rand() / (double)RAND_MAX) +_a;
        }
    }
    
    
    /*//return a vector of Nsample samples from the uniform distribution on the [_a,_b] interval
    void UniformDist::gen_samples(const int& Nsamples, std::vector<double>& Vsamples){
        srand(time(0));
        for(int i=0;i<Nsamples;i++){
            Vsamples.push_back((_b-_a)*(rand()/(double)RAND_MAX) + _a);
        }
    }*/
    #endif
    Ultima modifica di Toxotes; 29-01-2014 a 13:42

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 © 2025 vBulletin Solutions, Inc. All rights reserved.