IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

fonctionnement d'un programme en c++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par d�faut fonctionnement d'un programme en c++
    Bonjour, j'ai trouv� un programme enn c++, mais je ne comprend pas tout le fonctionnement.

    voivi le code.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #ifndef CIC
    #define CIC
    namespace SPUC {
    /*! 
      \addtogroup fir FIR filters
    */
     
    /*!   \brief   class for CIC digital filter
      \ingroup fir interpolation
    */
    //!
    //!  Implementation for cascaded integrator comb filters
    //!  This implementation provides for both decimation and
    //!  interpolation filtering. Registers are signed long and
    //!  the default number of stages is 3.
    //! \image html cic.gif
    //! \image latex cic.eps
    class cic
    {
     protected:
      signed long* nacc; //! Accumulators
      signed long* diff; //! Differentiators
      signed long* prev; //! Previous values
      char stages; //! Number of stages
     public:                         
      //! Constructor
      cic(char n=3);
      //! Reset
      void reset() { 	
    	for (int i=0;i<stages;i++) nacc[i] = diff[i] = prev[i] = 0;
      }
      //! For CIC interpolation, non-zero dump implies new input
      signed long interpolate(signed long in=0, signed char dump=0);
      //! For CIC decimation, non-zero dump implies output required
      signed long decimate(signed long in, signed char dump);
      //! To change the number of stages dynamically
      void num_stages(char n);
    };
    } // namespace SPUC 
    #endif

    le code .c

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #include <cic.h>
    namespace SPUC {
    cic::cic(char n) : stages(n)
    {
    	int i;
    	nacc = new signed long[n];  
    	diff = new signed long[n]; 
    	prev = new signed long[n]; 
    	for (i=0;i<stages;i++) nacc[i] = diff[i] = prev[i] = 0;
    }
    void cic::num_stages(char n)
    {
    	int i;
    	stages = n; 
    	delete nacc;
    	delete diff;
    	delete prev; 
    	nacc = new signed long[n];  
    	diff = new signed long[n]; 
    	prev = new signed long[n]; 
    	for (i=0;i<stages;i++) nacc[i] = diff[i] = prev[i] = 0;
    }
    signed long cic::interpolate(signed long in, signed char dump)
    {
    	char i;
    	if (dump) {
    		diff[0] = in - prev[0];
    		prev[0] = in;
    		for (i=1;i<stages;i++) {
    			diff[i] = diff[i-1] - prev[i];
    			prev[i] = diff[i-1];
    		}
    		nacc[0] += diff[stages-1];
    	}  
    	for (i=0;i<(stages-1);i++) nacc[i+1] += nacc[i];
    	return(nacc[stages-1]);
    } 
    signed long cic::decimate(signed long in, signed char dump)
    {
    	char i;
    	nacc[0] += in;
    	for (i=0;i<(stages-1);i++) nacc[i+1] += nacc[i];
    	if (dump) {
    		diff[0] = nacc[stages-1] - prev[0];
    		prev[0] = nacc[stages-1];
    		for (i=1;i<stages;i++) {
    			diff[i] = diff[i-1] - prev[i];
    			prev[i] = diff[i-1];
    		}
    	}
    	return(diff[stages-1]);
    }
     
     
    } // namespace SPUC
    En fait, je dois faire un filtre cic en c. J'aimerais savoir ce que fait exactement ce programme afin de le retrnscrire en c.
    Merci.


    Ps: je ne peux pas ex�cuter du code c++.

  2. #2
    Invit�
    Invit�(e)
    Par d�faut
    c quoi que tu ne comprends pas exactement ?
    la, tout ce que je vois, c'est la d�finition d'une classe (un objet qui encapsule des donn�es (c�d qui les masque pr l'ext�rieur), et qui fournit des op�rations sp�cifiques sur une instance de cet objet...)

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par d�faut
    C'est la fonction que je comprends pas trop.
    signed long cic::decimate(signed long in, signed char dump)

    A quoi sert le dump et le in.?

  4. #4
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par sandball22
    C'est la fonction que je comprends pas trop.
    signed long cic::decimate(signed long in, signed char dump)

    A quoi sert le dump et le in.?
    je n'ai pas trop le temps de me pencher dans le corps de cette fonction, mais d'apres le commentaire sur la d�claration de la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
      //! For CIC decimation, non-zero dump implies output required
      signed long decimate(signed long in, signed char dump);
    ... un dump non nul force une sortie

  5. #5
    Membre exp�riment� Avatar de Rupella
    Inscrit en
    F�vrier 2005
    Messages
    286
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 286
    Par d�faut
    sinon, il reste la bonne vieille m�thode, � savoir le papier et le crayon
    pour passer l'algorithme et voir ce qu'il fait, et faire changer les valeurs...

    puis je pense que c'est relativement facile de faire �voluer ce code pour
    qu'il soit utilisable en C uniquement (avec tes tableaux dans le main, et
    tu appelles les fonctions avec diff�rentes valeurs, en changeant le prototype) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    signed long interpolate(signed long* nacc,
                                   signed long* diff,
                                   signed long* prev,
                                   signed long in, 
                                   signed char dump);
    je ferai un truc dans ce gout la...

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par d�faut
    C'est ce que j'ai fait. Normalement je devrais avoir une d�cimation mais je n'ai pa l'impression qu'e ce programme le fait.

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par d�faut
    Personne ne peut tester ce programme?

  8. #8
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par sandball22
    Personne ne peut tester ce programme?
    Si, toi, tu prends un compilo C++, et tu regardes comment il marche.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 28/05/2014, 15h14
  2. R�ponses: 16
    Dernier message: 12/03/2013, 11h01
  3. R�ponses: 4
    Dernier message: 21/05/2009, 00h22
  4. fonctionnement d'un programme
    Par cdoctora dans le forum Entr�e/Sortie
    R�ponses: 3
    Dernier message: 02/02/2009, 03h37
  5. [patterns] conseil sur le fonctionnement de mon programme
    Par lichman dans le forum Design Patterns
    R�ponses: 4
    Dernier message: 13/09/2007, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo