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 :

rajouter des 0 dans un tableau


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 rajouter des 0 dans un tableau
    Bonjour,
    J'ai un premier tableau de taille= 10. Ce tableau contient les valeursq suivantes:
    1 -1 -1 1 -1 1 1 1 1 1.

    Je veux effectuer intercaler à chaque fois des 0 entre chaque; c'est à dire :
    1 00 -1 00 -1 00 ...... Quelqu'un a une idée? Merci. Je voudrai s que cela soit d'une façon générique.Merci.

  2. #2
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par sandball22
    Je veux effectuer intercaler à chaque fois des 0 entre chaque; c'est à dire :
    1 00 -1 00 -1 00 ......
    Intercaler où? Dans le tableau? A l'affichage? Dans un fichier?

  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 re
    Je veux intercaler dans un autre tableau.

  4. #4
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par sandball22
    Je veux intercaler dans un autre tableau.
    Cela convient-il?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #define TAILLE 10
    #define TAILLE_ZERO (2*TAILLE)
     
    int tab_original[TAILLE],tab_zero[TAILLE_ZERO];
     
    ...
    int i,*p;
     
    for (i=0,p=tab_original;i<TAILLE_ZERO;++i)
     {
     if (i%2) tab_zero[i]=0;
     else tab_zero[i]=*p++;
     }

  5. #5
    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 faut que j'intercale 2 zeros

  6. #6
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par sandball22
    il faut que j'intercale 2 zeros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #define TAILLE 10
    #define TAILLE_ZERO (3*TAILLE)
     
    int tab_original[TAILLE],tab_zero[TAILLE_ZERO];
     
    ...
    int i,*p;
     
    for (i=0,p=tab_original;i<TAILLE_ZERO;++i)
     {
     if (i%3) tab_zero[i]=0;
     else tab_zero[i]=*p++;
     }

  7. #7
    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 re
    cela fonctione mais je ne comprenfd pas trop ton alogorithme. Peux-tu me l'expliquer?
    Merci.

  8. #8
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par sandball22
    cela fonctione mais je ne comprenfd pas trop ton alogorithme. Peux-tu me l'expliquer?
    Merci.
    Pour la taille du tableau d'arrivée, il est aisé de voir que ce sera 3 fois celle du tableau de départ. Ensuite, pour le remplir, à chaque indice non multiple de 3 (1,2,4,5,7,8,...) [dans le code i%3], j'inscris la valeur zéro. Sinon, à chaque indice multiple de 3, j'insère l'élément correspondant du tableau original.
    J'espère que mon explication est assez claire, sinon faites le moi savoir.

  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 re
    j'ai compris . Merci.

  10. #10
    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
    Par contre j'ai un petit soucis. J'utilise une fonction pour faire ce procédé. Je n'arrive pas à récupérer les bonnes valeurs dans la fonction appellante.

    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
     
    void UseDVBTSignauxtests(DVBTSignauxtests *DS, int source[], int surechantillonage) {
     
    /*------déclaration des variables------*/
    	int N=10;
    	int signal[N];
    	int i=0;
    	int Ns=surechantillonage;           /* récupération du facteur de suréchantillonnage*/
    	int *upsignal=NULL;
     
    /*------------corps du programme----------*/
     
    	for(i=0;i<10;i++)
    		{
    			signal[i] = source[i];       /* récupération de la séquence de +1 -1*/
    			printf("%d ",signal[i]);
     
    		}
     
     
    	upsignal=UpsamplingDVBTSignauxtests(signal,Ns);
        printf("\n%d",upsignal);
     
     
    	return;
    }
    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
     
    int * UpsamplingDVBTSignauxtests(int sig[],int fact_surechantillon)
    {
     
    /*------déclaration et initialisation des variables------*/
     
       int Ns=fact_surechantillon;        /* récupération du facteur de suréchantillonnage*/
       int N=10;
       int i;
       int signal[N];
       int *up_signal= NULL;
       int *p;	
     
       up_signal=malloc(N*Ns);
     
     
       for(i=0;i<N;i++)
    		{
    			signal[i] = sig[i];       /* récupération de la séquence de +1 -1*/
     
    		}
     
      printf("\nupsampling:"); 
     
    /*-----------------surechantillonage----------------------*/
     
      for (i=0,p=signal;i<N*(Ns+1);++i)    
       {
         if (i%(Ns+1))                    /*A chaque indice non multiple du facteur d'échantillonnage+1*/
          { 
     	    up_signal[i]=0;	  			  /*on insère les valeurs 0*/	
          }
        else up_signal[i]=*p++;           /*sinon on insère les valeurs du signal originales*/   
      }
      for(i=0;i<N*(Ns+1);i++)
    	{
    	 printf("%d ",up_signal[i]); 
     	}		
      return(up_signal);
    }
    Peux-tu m'aider merci.

  11. #11
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Au moins un problème ici:
    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
     
    int * UpsamplingDVBTSignauxtests(int sig[],int fact_surechantillon)
    {
     
    /*------déclaration et initialisation des variables------*/
     
       int Ns=fact_surechantillon;        /* récupération du facteur de suréchantillonnage*/
       int N=10;
       int i;
       int signal[N];
       int *up_signal= NULL;
       int *p;	
     
       up_signal=malloc(N*Ns);
    ...
    Il faut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    up_signal=malloc(N*Ns*sizeof (int));

  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
    Cela vient pas de cela.
    Au lieu d'avoir:
    1 0 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0

    j'ai : 6687160

  13. #13
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par sandball22
    Cela vient pas de cela.
    Au lieu d'avoir:
    1 0 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0

    j'ai : 6687160
    C'est normal, car ce n'est pas la seule erreur dans votre code. Une autre erreur (à vous de la corriger):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void UseDVBTSignauxtests(DVBTSignauxtests *DS, int source[], int surechantillonage) {
     ...
     int *upsignal=NULL;
     ...
     printf("\n%d",upsignal);
     ...

  14. #14
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Une autre. Vous allouez pour N*Ns entiers, mais dans la boucle vous parcourez N*(Ns+1) éléments...

  15. #15
    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
    Pour cette erreur je ne vois pas trop.

    int *upsignal=NULL;
    ...
    printf("\n%d",upsignal);

  16. #16
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par sandball22
    Pour cette erreur je ne vois pas trop.

    int *upsignal=NULL;
    ...
    printf("\n%d",upsignal);
    upsignal est un pointeur vers int; or, "%d" dans printf() sert à afficher un entier, pas un pointeur vers entier. Si vous voulez afficher les entiers contenus dans un tableau, il faut faire une boucle et utiliser des indices.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] Compter des éléments dans un tableau
    Par helene22500 dans le forum Langage
    Réponses: 29
    Dernier message: 23/05/2005, 11h38
  2. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41
  3. [C#] Affichage des lignes dans un tableau.
    Par maldufleur dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/04/2004, 11h28
  4. Décaler des valeurs dans un tableau
    Par sh2003 dans le forum Langage
    Réponses: 6
    Dernier message: 20/03/2004, 16h01
  5. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

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