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 :

Pb d'affichage du contenu d'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 Pb d'affichage du contenu d'un tableau.
    Bonjour, j'ai un problème pour afficcher le contenu d'un tableau. Je l'afiche 2 fois, mais je n'obtiens pas la même chose dans les 2 cas.

    Voici le programme:
    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
     
    ....
    for (i=0;i<10000;i++) 
     {
        for (j=0;j<decim;j++)    
       {
        if(j==decim-1)                            /*(j==0)//(j==decim-1)*/
        { decimation=CicDecimate(DC,entree[i],1);
    	}
        else
        { decimation=CicDecimate(DC,entree[i],0);
    	}
       sortie_decim[i/decim]=decimation/gain1;
     
       printf(" %lf",sortie_decim[i/decim]);
    //	 getchar();
       }
     
     }
    ....
     
     printf("\n\n\ndécimation :");                   /*Affichage résultat décimation*/
      for(i=0;i<10000/decim;i++)
      { 
        printf(" %lf",sortie_decim[i]);
     
      }
    Je ne comprends pas pourquoi cela n'affiche pas le mêmme contenu. Quelqu'un peut-il m'aider ? Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Salut,

    Dans la première boucle tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(i=0;i<10000/decim;i++) {
       [...]
       printf(" %lf",sortie_decim[i/decim]);
    }
    et dans la seconde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(i=0;i<10000/decim;i++) {
       printf(" %lf",sortie_decim[i]);
    }
    Ton indice n'étant pas identique, il est vraisemblable que tu ne trouve pas la même chose les deux fois...

  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
    DAns la deuxième je fais bien cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for(i=0;i<10000/decim;i++) { printf(" %lf",sortie_decim[i]); }
    Mais dans la 1ere je fais :
    for(i=0;i<10000/decim;i++) { [...] printf(" %lf",sortie_decim[i/decim]); }

    et dans la seconde :
    Code :
    for (i=0;i<10000;i++)
    {
    for (j=0;j<decim;j++)
    {

    ....
    printf(" %lf",sortie_decim[i/decim]);
    }
    }

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Désolé je n'avais pas vu que les deux boucles n'étaient pas identique...

    Cependant je doute que cela fonctionne tout de même...

    exemple avec decim = 2
    on a donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (i=0; i<10000; i++) { 
       [...]
       printf (" %lf", sortie_decim[i/2]); 
    }  
    [...]
    for (i=0; i<10000/2 /*=5000*/; i++) 
       printf (" %lf", sortie_decim[i]);
    Dans la première boucle, il y aura 10000 affichages de valeurs. Dans la seconde il n'y en aura que 5000... A moins que decim vaille 1, tu ne pourras jamais obtenir la même chose...

    Tu devrais plutôt écrire la seconde boucle comme le première...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (i=0; i<10000; i++) 
       printf (" %lf", sortie_decim[i/decim]);

  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
    Cela ne change rien , je n'obtiens toujours pas la même chose

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Citation Envoyé par sandball22
    Cela ne change rien , je n'obtiens toujours pas la même chose
    C'est-à-dire ?

  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
    Dans le 1er cas j'obtiens des valeures alors que dans le 2ème je n'obtiens que des 0.

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Quelle est la taille de ton tableau sortie_decim ? Comment l'as-tu déclaré, initialisé? Que vaut decim? Les deux boucles sont-elles dans une même fonction ou non?

  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
    Quelle est la taille de ton tableau sortie_decim ?
    ->Normalement 1250


    Comment l'as-tu déclaré, initialisé?

    double *sortie_decim=NULL;
    sortie_decim=malloc(sizeof(double)*(10000/decim));

    Que vaut decim?
    ->8
    Les deux boucles sont-elles dans une même fonction ou non?
    oui dan s la même fonction

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    euh....

    Quand tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for (i=0;i<10000;i++) 
     {
        for (j=0;j<decim;j++)    
       {
        if(j==decim-1)                            /*(j==0)//(j==decim-1)*/
        { decimation=CicDecimate(DC,entree[i],1);
    	}
        else
        { decimation=CicDecimate(DC,entree[i],0);
    	}
       sortie_decim[i/decim]=decimation/gain1;
    ta boucle sur les j ne SERT à RIEN, puisque tu écris toujours en fonction de i...

  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
    Si la boucle avec les j me sert.

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Désolé mais c'est faux :

    Admettons juste i = 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       for (j=0;j<decim;j++)    
       {
          if(j==decim-1)
           { 
              decimation=CicDecimate(DC,entree[i],1);
           }
        else
          { 
             decimation=CicDecimate(DC,entree[i],0);
          }
     
         sortie_decim[i/decim]=decimation/gain1;
       }
    calcule decim fois decimation, qui, à part pour j = (decim-1), vaut la même chose quelque soit j (même entrée d'indice i).

    Et le résultat est stocké quel que soit j à l'indice (i/decim), qui, quel que soit j, vaut la même chose...

  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
    En fait, il s'agit d'un cic décimation. Je ne sais pa s si tu vois ce que cest. En en entrée j'ai un signal de taille N. Lors que je fais une décimation par un facteur R, cela revient à prendre un élément parmi R. Exemple: si R=2, le tableau en sortie aura une taille de N/2.

    Tu vois ce que je veux dire?

    La condition if(j==decim-1) permet de prendre un échantillon parmi decim (R).

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    admettons pour decimation, je ne sais pas du tout ce qu'est cet algo.

    Mais le résultat est le même :

    pour TOUS les j tu stockes au même endroit , à l'indice (i/decim)...

    Donc tu ré-écrases ta valeur à chaque j...

  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
    J'ai fait une modification
    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
     
    for (i=0;i<10000;i++) 
     {
        for (j=0;j<decim;j++)    
       {
        if(j==decim-1)                            /*(j==0)//(j==decim-1)*/
        { decimation=CicDecimate(DC,entree[i],1);
          sortie_decim[i/decim]=decimation/gain1;	
       }
        else
        { decimation=CicDecimate(DC,entree[i],0);
    	}
     
     
       printf(" %lf",sortie_decim[i/decim]);
    //	 getchar();
       }
     
     }
    ....
     
     printf("\n\n\ndécimation :");                   /*Affichage résultat décimation*/
      for(i=0;i<10000/decim;i++)
      { 
        printf(" %lf",sortie_decim[i]);
     
      }
    C'est mieux?

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    lol si c'est ça que tu veux faire, oui.. Quoique ton print soit encore exécuté à chaque j.

    Mais maintenant obtiens-tu donc les mêmes chiffres ?

  17. #17
    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
    non c'est toujours pareil. ca na rien changé depui le début

  18. #18
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    C'est normal...
    Je ne sais pas ce que tu veux obtenir, mais la façon dont tu complete ton tableau ne correspond en rien à la manière dont tu le lis

    Tu le remplis comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (i=0; i=10000; i++) {
       sortie_decim [i/decim] = ... // et en encore pas tout le temps
    }
    i / decim est un entier, et comme decim = 8, tu remplis en fait que 1250 du tableau. Sachant que pour chaque case tu calcules 8 fois la même chose...
    ex : pour i=0 : i/decim = 0/8 = 0
    pour i=1 : i/decim = 1/8 = 0
    pour i=2 : i/decim = 2/8 = 0
    [...]
    pour i : i/decim = i division entière par 8...

    Tu fais donc beaucoup de tour de boucles qui ne servent à rien... Et je ne suis pas sûr que toutes les cases soient bien remplies, puisque tu mets une conditions au remplissage du tableau (j==decim-1)... Je ne sais pas ce qu'elle dit... mais vérifie bien...

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/10/2008, 16h05
  2. Problème avec affichage contenu d'un tableau
    Par demcoul dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 08/08/2008, 10h08
  3. Affichage du contenu d'une page dans une cellule d'un tableau
    Par Fizgig dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/10/2007, 16h45
  4. [debutant]affichage du contenu d'un tableau dans du JTextField
    Par mehdi_swatch dans le forum Composants
    Réponses: 2
    Dernier message: 30/11/2006, 11h16

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