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++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    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
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    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...)
    besoin de réponses ? demande a un pote

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    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
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    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
    besoin de réponses ? demande a un pote

  5. #5
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    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 du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    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 confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    Citation Envoyé par sandball22
    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.
    il a pourtant bien un nom qui s'y prete...

    tu n'a pas une doc genre doxygen qui donnerait plus de détail quant à l'utilisation de la fonction decimate() ?
    besoin de réponses ? demande a un pote

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    J'ai trouvé ce programme sur le site koders:

    http://www.koders.com/cpp/fid3ACEC3E...3acic+decimate

    Je ne sais pas si on peut avoir des documentations dessus. J'ai cherché mais je n'en trouve pas.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    je viens de trouver une documentaiton:

    http://spuc.sourceforge.net/

  10. #10
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    Citation Envoyé par sandball22
    je viens de trouver une documentaiton:

    http://spuc.sourceforge.net/
    oui mais... ya pas plus d'infos la non plus...
    besoin de réponses ? demande a un pote

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    D'après le schéma, cette fonction fait un downsampler mais je ne le vois pas dans la fonction. Peux-tu m'aider?

    Merci.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    Il n'y a que cela comme documentaiton. c'est bizar que dans le programme il ne parle pas du downsampler

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  14. #14
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    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