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 :

Passer du c++ 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 Passer du c++ en C.
    Bonjour,
    j'ai trouvé un programme sur internet qui m'intéresse et je voudrais letraduire en c. Es-ce possible?

    le voici:

    CIC.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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    // 
    // Copyright(c) 1993-1996 Tony Kirke
    // author="Tony Kirke" *
    /*
     * SPUC - Signal processing using C++ - A DSP library
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 2, or (at your option)
     * any later version.
     * 
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    */
    #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
    cic.cpp

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    // 
    // Copyright(c) 1993-1996 Tony Kirke
    // author="Tony Kirke" *
    /*
     * SPUC - Signal processing using C++ - A DSP library
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 2, or (at your option)
     * any later version.
     * 
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    */
    // See cic.h for description
    #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
    Merci de votre aide.

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    A priori oui, rien de bien insurmontable à ce que je vois

    Une structure qui reprend les données (variables) de la classe et des fonctions prennant en argument cette structure pour pouvoir travailler sur les données ... pas très dur en soit ! Il n'y a pas spécialement de concepts objets utilisés ici sauf bien sûr le fait que c'est une classe mais sans plus !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par sandball22
    Bonjour,
    j'ai trouvé un programme sur internet qui m'intéresse et je voudrais letraduire en c. Es-ce possible?
    Oui.

    Je te fais l'entête (il n'y a pas d'héritage donc ça va très bien) :



    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
     
    #ifndef CIC_H
    #define CIC_H
     
    typedef struct 
    {
      signed long* nacc; //! Accumulators
      signed long* diff; //! Differentiators
      signed long* prev; //! Previous values
      char stages; //! Number of stages
    } Cic;
     
    int         cicInit(Cic *, char n);
    void        cicReset(Cic *);
    signed long cicInterpolate(Cic*, signed long, signed char);
    signed long cicDecimate(Cic*, signed long, signed char);
    void        cicNum_stages(Cic*, char n);
    void        cicDelete(Cic*);
     
     
    #endif
    Puis, il te suffira de changer les new en malloc pour les char et les long.

  4. #4
    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
    Merci. Par contre j'ai pa très bien compris dans le code que je vous ai donné la fonction correspondant à decilate si quelquun pouvait m'aider? Merci

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Petite correction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct 
    {
      signed long* nacc; //! Accumulators
      signed long* diff; //! Differentiators
      signed long* prev; //! Previous values
      char stages; //! Number of stages
    } Cic;
    Le mot clé protected n'existe pas en C
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par Franck.H
    Petite correction:

    Le mot clé protected n'existe pas en C

    mauvais copié collé. J'ai corrigé

  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
    Merci. Par contre j'ai pa très bien compris dans le code que je vous ai donné la fonction correspondant à decimate si quelquun pouvait m'aider? Merci

  8. #8
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par sandball22
    Personne ne peut m'aider?
    Si tu parles de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    signed long  CicDecimate(DVBTCic *DC, signed long in, signed char dump)
    {
        signed long a;
        return(a);
     
    }
    C'est un comportement indéfini...
    Jc

  9. #9
    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
    Non , je parle de ceci::


    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
     
    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]);
    }

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Tu cherches à traduire un code C++, mais tu ne sais pas à quoi ça sert ?

Discussions similaires

  1. Passer un projet de la version 6 à la version 7
    Par clisson dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/02/2003, 11h37
  2. Passer de la zone d'édition vers une instruction sql
    Par tripper.dim dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 14h44
  3. pk passer de mysql à postgre
    Par pioums dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 03/10/2002, 10h31
  4. Passer du Pascal à Delphi
    Par poppels dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2002, 21h07
  5. Passer en mode 800*600
    Par flavien tetart dans le forum Assembleur
    Réponses: 8
    Dernier message: 30/05/2002, 23h05

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