Fonction recherche de nombres (liste chainée en C)
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Fonction recherche de nombres (liste chainée en C)



  1. #1
    invitee724cc92

    Fonction recherche de nombres (liste chainée en C)


    ------

    Bonjour à tous,

    Voilà j'ai un simple petit problème dans la dernière fonction de mon programme.

    Lorsque je lance la fonction recherche, mon programme part en boucle infinie et je ne vois pas du tout mon erreur. Je pensais à un simple problème d'initialisation mais ça ne règle pas mon soucis, ou alors je n'ai pas initialisé au bon endroit.

    Voici le code et merci d'avance!

    Code:
    #include<stdio.h>
    #include<stdlib.h>
    
    struct liste
    {
           int info;
           struct liste *suiv;
    };
    
    
    
    
    int main()
    {
       int option;
       struct liste * tete;
       int element;
       int menu();
       int creationok=0;
       int compteur;
       struct liste*creation(void);
       struct liste*ajout(struct liste*p,int n);
       struct liste * suppression (struct liste * p,int n);
       void affiche(struct liste*p);
       int comptage (struct liste * p);
       void recherche(struct liste * p,int *pointeur);
       do
       {
                  option=menu();
                  switch(option)
                  {
                                /* Création de la liste */
                                 case 1 :
                                      if(!creationok)
                                 {
                                      
                                      tete=creation();
                                      creationok=1;
                                 }
                                 break;
                                 /* Encodage */
                                 case 2 :
                                      if(creationok)
                                      {
                                                     printf("Entrez un element : ");
                                                     scanf("%d",&element);
                                                     tete=ajout(tete,element);
                                      }
                                      else
                                      printf("Creez d'abord une liste\n");
                                      system("pause");
                                 break;
                                 /* Affichage */
                                 case 3 :
                                      if(creationok)
                                      {
                                                     affiche(tete);
                                                     system("pause");
                                      }
                                 break;
                                 /* Suppression */
                                 case 4 :
                                      printf("Entrez un element a supprimer de la liste : ");
                                      scanf("%d",&element);
                                      tete=suppression(tete,element);
                                 break;
                                 /* Comptage */
                                 case 5 :
                                      if(creationok)
                                      printf("il y a %d elements multiples du premier\n",comptage(tete));
                                      system("pause");
                                      break;
                                  /* Recherche d'éléments */    
                                 case 6 :
                                      printf("Entrez l'element a rechercher");
                                      scanf("%d",&element);
                                      recherche(tete,&element);
                                      system("pause");
                                      break;
                                      
                                 /* Fermeture */
                                 case 0 :
                                      printf("Ce programme va terminer\n\n");
                                      system("pause");
                                      break;
                  }
                  
       }while(option !=0);
            
    }
    
    int menu(void)
    {
        int option;
        do
        {
            system("cls");
            printf("0 : Terminer le programme\n");
            printf("1 : Creation d une liste\n");
            printf("2 : Ajout d'un element dans la liste\n");
            printf("3 : Affichage de la liste dans l'ordre croissant\n");
            printf("4 : Suppression d'un element de la liste\n");
            printf("5 : Comptage des elements multiples du premier\n");
            printf("6 : Recherche d'elements\n");
            scanf("%d",&option);
        }while (option>6);
        return option;
    }
    
    struct liste*creation(void)
    {
           return NULL;
    };
    
    /* Ajouter un élément à la liste */
    
    struct liste*ajout (struct liste*p, int n)
    {
           struct liste*q;
           if(p!=NULL)
           {
                if(n>p->info)
                {
                                p->suiv=ajout(p->suiv,n);
                                q=p;
                }
                else
                {
                    q=(struct liste*)malloc(sizeof(struct liste));
                    q->info=n;
                    q->suiv=p;
                }
           }
                else
                {
                    q=(struct liste*)malloc(sizeof (struct liste));
                    q->info=n;
                    q->suiv=p;
                }
                return q;
    }
    
    /* Affichage des éléments */
    void affiche(struct liste*p)
    {
         if(p!=NULL)
         {
                    printf("\n");
              printf(" %d ",p->info);
              affiche (p->suiv);
              printf("\n");
         }
    }
                
    /* Suppression d'un élément*/
    
    struct liste * suppression (struct liste * p,int n)
    {
           struct liste * q;
           
           if(p!=NULL)
           {
                      if (n>p->info)
                      {
                                    p->suiv=suppression(p->suiv,n);
                                    q=p;
                      }
                      else
                      if(n==p->info)
                      {
                                    q=p->suiv;
                                    free(p);
                      }
                      else
                      q=p;
                      return q;
           }
    }
    
    /* Comptage des éléments */
    
    int comptage (struct liste * p)
    {
        int compteur=0;
        int element=p->info;
        
        
        while (p)
        {
              if((p->info) % (element) == 0)
              compteur++;
              p=p->suiv;
        }
        return compteur;
    }
    
    /* Recherche d'un élément */
    
    void recherche(struct liste * p,int *pointeur)
    {
        (*pointeur)=0;
         while (((*pointeur)!=(p->info)) || ((p->suiv) != NULL))
         {
               if ((*pointeur)==(p->info))
               {
                                      p=p->suiv;
                                      printf("l'element se trouve en position %d",(*pointeur));
               }
               else if((*pointeur)>(p->info))
               (*pointeur)++;
               else
               printf("Le nombre ne se trouve pas dans la liste mais devrait etre entre la place %d et %d\n",*pointeur,(*pointeur)+1);
        }
    }

    -----

  2. #2
    invite895675d5

    Re : Fonction recherche de nombres (liste chainée en C)

    Normal que tu ne trouves pas l'élément que tu cherches (sauf coup de bol...).
    Vérifie comment évolue la valeur que tu recherches (rien que dans cette phrase il y a un problème ...) dans ta fonction "recherche"

  3. #3
    invite2d7144a7

    Re : Fonction recherche de nombres (liste chainée en C)

    Bonjour,

    Et on ne définit pas de prototypes de fonction dans une fonction !!

    Certains compilateurs l'acceptent, mais ce n'est pas bon.

  4. #4
    invite74b500b2

    Re : Fonction recherche de nombres (liste chainée en C)

    slt !
    Sans vouloir te découragé, ta fonction recherche est tout faux !
    Bon le principe est là mais la manière n'y est pas.
    Réfléchis un peu pour le réécrire : tu verras que c'est tout bête...

  5. A voir en vidéo sur Futura
  6. #5
    invite1445654e

    Re : Fonction recherche de nombres (liste chainée en C)

    oui lol un gros probleme sur *pointeur
    il doit melanger les tableaux et les listes chainées
    j'aime bien le *pointeur=0; (de toute facon c'est tjrs 0 que je cherche )
    et aussi le *pointeur++ lol
    je pense qu'il y a un gros probleme de conception
    un conseil fais le deja sur un bout de papier et a la main

Discussions similaires

  1. [C]Liste chainée
    Par invite8b421ec7 dans le forum Programmation et langages, Algorithmique
    Réponses: 29
    Dernier message: 09/04/2011, 12h09
  2. [langage C]Liste chainée simple
    Par invite8b421ec7 dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 02/04/2011, 22h13
  3. liste chainée
    Par invite69686042 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 01/01/2011, 20h18
  4. liste chainée en C
    Par invite69686042 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 01/01/2011, 12h31
  5. liste chainée
    Par invite69686042 dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 11/12/2010, 16h35