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 :

Probleme affichage d'un élément d'une file


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut Probleme affichage d'un élément d'une file
    slt c'est encore moi j'ai un autre porbleme avec les liste contigus circulaires.
    j'ai ecrit une fct pour afficher tous les elmts d'une file mais elle n'affiche que n-1 elmts et j'ai pas trouvé le moyen d'arranger ça.
    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
     
     
    typedef struct file
    {
    	int tete;
    	int queue;
    	int taille;
    	int tab[taille_max];// taille_max est un define
    }file;
     
    void afficher(file f)
    {
    	int i=0;
    	puts("\n\taffichage:\n");
    	printf("tete :%d,queue :%d taille:%d\n",f.tete,f.queue,f.taille);
    	do
    	{
    		printf("\ntete:%d\n",f.tete);
    		getch();
    		printf("elmt %d: %d\n",i,f.tab[f.tete]);
    		f.tete=(f.tete+1)%taille_max;
     
    		i++;
    	}
    	while (f.tete<=f.queue);
     
     
     
    }
    Merci bcp.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Tu parles de liste circulaire.
    Tu peux donc avoir f.tete>f.queue dès le départ.
    Ton test de sortie de boucle "while (f.tete<=f.queue)" n'est donc pas adapté.

    Dans ton code, que représente taille ?
    queue est il l'indice du dernier élément alloué ?
    Que vaut queue quand tu n'as aucun élément dans la liste ?

    En admettant que queue vaut -1 si la file est vide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (queue != -1)
    {
      for (;;f.tete=(f.tete+1)%taille_max)
      {
        ...
        if (f.tete == f.queue) break;
      }
    }
    else
    {
      printf("liste vide\n");
    }

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut
    taille c'est le nombre d'elmts de la file,queue est l'indice du dernier elemt ajouté et si la file est vide queue=tete=0.
    merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    tete = queue = 0 si la liste est vide ?
    Alors comment gère tu le cas où la liste contient un seul élément (qui peut être d'indice 0) ?

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut
    c'est pour ça que j'ai ajouté taille .

  6. #6
    Membre habitué Avatar de erictoguem
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 187
    Points
    187
    Par défaut
    Le problème vient du fait que la queue pointe sur le dernier élement alors que dans ton code, tu t'arrète quand la tete pointe sur la queue sans l'avor affiché(la queue ne s'affichera donc jamais), de plus si ta liste est vide tu risquerais d'avoir un resultat déplaisant.
    je pense que si tu devrais plutôt :

    typedef struct file
    {
    int tete;
    int queue;
    int taille;
    int tab[taille_max];// taille_max est un define
    }file;

    void afficher(file f)
    {
    int i=0;
    puts("\n\taffichage:\n");
    printf("tete :%d,queue :%d taille:%d\n",f.tete,f.queue,f.taille);
    if (f.taille <= 1)
    return;
    do
    {
    printf("\ntete:%d\n",f.tete);
    getch();
    printf("elmt %d: %d\n",i,f.tab[f.tete]);
    f.tete=(f.tete+1)%taille_max;

    i++;
    }
    while (f.tete<=f.queue);
    printf("\ntete:%d\n",f.queue);
    getch();
    printf("elmt %d: %d\n",i,f.tab[f.queue]);
    }

Discussions similaires

  1. [Débutant] Nombre d'éléments d'une file
    Par xerondark25 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 16/03/2015, 13h12
  2. Inverser les éléments d'une file (Queue<T>)
    Par F.Saad dans le forum C#
    Réponses: 3
    Dernier message: 18/10/2009, 19h09
  3. Probleme affichage Clip addchild à partir d'une classe externe
    Par Niokizou dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 23/04/2008, 15h53
  4. Affichage d'un élément d'une sous-requête
    Par Paxaranne dans le forum SQL
    Réponses: 7
    Dernier message: 30/08/2007, 16h39
  5. Réponses: 4
    Dernier message: 24/05/2007, 16h37

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