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 : 50
    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