Accueil > Forum > > > > Fonction recherche (listes chainées)
Fonction recherche (listes chainées)
vendredi 6 mai 2011 à 22:55:12 |
Fonction recherche (listes chainées)

adri10
|
Bonjour à tous,
Bon voilà j'ai un gros problème avec ma fonction recherche en liste chainées. Je pensais que mon programme était correct puisqu'en le lançant une première fois, il tournait. Puis j'ai fermé mon programme et réouvert et là...plus rien, du moins pour la fonction recherche. J'ai beau chercher, je ne vois pas comment corriger ma (mes) erreur(s).
Je précise simplement que je ne fais pas de C depuis longtemps et que c'est le tout dernier programme que je ferai pour cette année, et surement le dernier tout court, vu que j'ai ce cours pour la dernière fois.
Autre précision sur le code, je sais que les prototypes de fonctions ne se mettent normalement pas dans une fonction mais mon prof avait fait comme ca pour le début de ce code et j'ai donc continué comme ça.
Merci d'avance!
Voici le code:
Code C/C++ : #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);
}
}
|
|
samedi 7 mai 2011 à 12:09:09 |
Re : Fonction recherche (listes chainées)
|
samedi 7 mai 2011 à 19:34:18 |
Re : Fonction recherche (listes chainées)

adri10
|
Bonjour et merci pour la réponse,
En fait toutes autres fonctions écrites (à part le comptage des nombres et la recherche) ont été écrites par mon prof en classe, donc en principe je n'ai pas besoin d'autres fonctions. La consigne qui nous avait été donnée était de faire ce code sans élément sentinelle.
Bref, il n'y a que la fonction recherche qui me pose problème en réalité.
|
|
lundi 9 mai 2011 à 18:18:35 |
Re : Fonction recherche (listes chainées)

patatalo
|
re,
Je ne sais pas si ton prof se rend bien compte du gaspillage de mémoire qu'il pourrait obtenir en gerant une liste par récursivité.
Code C/C++ :
void recherche(struct noeud *p, int n)
{
struct noeud *c = p;
while (c != NULL && (n < (c->info)))
c = c->suiv;
if (c != NULL && n == c->info)
printf("l'element se trouve en position %d", n);
}
@++
|
|
Cette discussion est classée dans : int, liste, printf, element, struct
Répondre à ce message
Sujets en rapport avec ce message
Passage par adresse d'un tableau de structures. [ par alekine ]
Bonjour, j'ai un problème pour passer par adresse un tableau de structures. Voilà mon code:#include #define L_MAX 2struct point //la structure d'un p
Comment imprimer le contenu d'une structure? [ par madalf17 ]
Salut, j'aimerai savoir comment imprimer le contenu d'une structure.Voici une partie du code dont la fonction affichage, je voudrai imprimer ce que ce
Trier une structure indexée [ par RootASM ]
Bonjour,J'ai écrit un programme qui permet de faire des recherches, ajout, suppression sur une liste de membres.Je dois trier cette liste de nom, lors
Probleme de reception dans un serveur visual C++ pour windows [ par alfred ]
Salut a tous!!g un probleme dans mon serveur le recv renvoie la valeur -1 et je ne vois pas pouquoi.voici les source du client et du serveurLe Serveur
Liste chainéés [ par anek971 ]
Bonjour a tousEnfaite il y a déà eu un poste sur le site sur ce sujet mais ayant le mm tp a faire je me suis rendu compte ke sa fonction quitter ne ma
aide petit prog c [ par mayapour ]
Bonjour, Débutant en C, je souhaiterai savoir comment changer ce programme initiale (liste chainée) qui demande à l'utilisateur de choisir les optio
Problème avec liste chainée [ par MasterShadows ]
Bonjour à tous ,alors voilà dans le cadre de mon tp de C je dois créer une liste simplement chainée tout ce qu'il y'a de plus générique.donc on nous d
probleme affichage structure [ par lil_adriano ]
Slt tous le monde j'ai un souci avec l'affichage de mes structures. je dois faire la gestion d'une pizzeria.j'ai cree les structure et quelques proced
Trier une liste chainée [ par ango973 ]
Bonjour,J'ai un probleme avec une fonction qui doit me trier une liste chainée selon le nom mais apres le passage dans ma fonction la liste reste iden
ajout d'un element à la fin d'une liste chainée [ par beatkof ]
bonsoir je voudrai faire une fonction qui ajout un element à la fion d'une liste chainée et je n'y arrive pas voila ma fonction: #include #include s
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|