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 sur les listes chainees


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut probleme sur les listes chainees
    Bonjour,je vous explique mon problème.J'ai un fichier texte que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    \ \ \ 5\ 18\ \ \
    \ \ 11\6 . . \ \
    \ \13 . . . \ \
    \7 . . \4 . . \
    \ \15 . . . \ \
    \ \ \ \ \ \ \
    Mon but est de faire un tableau de listes qui a la taille du nombre de variables qui sont ici représentés par les points.
    J'ai déjà un programme qui calcule le nombre de variables.

    Maintenant,je dois donc lire le fichier, je dois donner des valeurs(indices) à mes variables(points).
    Et lorsque 2 variables(points)se succèdent comme dans la deuxieme ligne par exemple,je dois chainer la premiere variable(premier point) à la deuxieme et inversement la deuxieme(deuxieme point) a la premiere.

    Je schématise pour la premiere ligne :

    0->1
    1->0

    Pour la deuxieme ligne j'aurais:

    0->1 //le premier point trouvé(indice 0) dans le fichier est lié au 2eme point(indice 1)
    1->0 //l'inverse
    //deuxieme ligne
    2->3->4 // le 3eme point(indice 2) est lié au 4eme et 5eme point trouvé
    3->2->4
    4->2->3
    .........
    .........
    .........
    nieme point

    Les variables(points) sur une meme ligne qui se succèdent
    ex: . . .
    sont dans une liste.

    Voici ce que j'ai fait :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <stdlib.h>
     
    void construction_graphe_contraintes(int nombre_variables);
    typedef struct maillon maillon;
    struct maillon
    {
    	maillon *suivant;
    	int indice_maillon;
    };
     
    typedef maillon*liste;
     
    liste tableau_contraintes[nombre_variables];
     
    int main(void)
    {
    	FILE*grille=fopen("grille.txt","r");
    	if(grille==NULL)
    	{
    		perror("Erreur lors de l'ouverture de la grille");
    		return EXIT_FAILURE;
    	}
    	while(!feof(grille)
    	{
    		lecture_ligne(nombre_variables);
    	}
     
    }
    	//Contraintes sur les lignes
    	lecture_ligne(int nombre_variables)
    	{
    		char caractere;
    		int indice_tableau=0;
    		int indice_m=0;
    		char tmp;
    		int reste_variable=nombre_variables;
    		tmp=fgetc(grille);
     
    		while(tmp!="\n")
    		{
    			if(tmp==".")
    			{	
    				maillon* tableau_contraintes[nombre_variables]=(maillon*)malloc(sizeof(struct maillon));
    				maillon*maillon=(maillon*)malloc(sizeof(struct maillon));
    				maillon->indice_maillon=indice_m;
    				indice_m++;
    				maillon->suivant=NULL;
     
    				tmp=fgetc(grille);
     
    				while(tmp==".")
    				{
    					maillon * pointeur=(maillon*)malloc(sizeof(struct maillon)):
    					pointeur=tableau_contraintes[indice_tableau];
    					maillon* nouveau_maillon=(maillon*)malloc(sizeof(struct maillon));
    					nouveau_maillon->indice_maillon=indice_m;
    					indice_m++;
    					nouveau_maillon->suivant=NULL;
    					pointeur->suivant=nouveau_maillon;
    					indice_tableau++;
    					pointeur->suivant=maillon;
    					pointeur=nouveau_maillon;
    				}
    			}
    		}
    Mon probleme est que je n'arrive pas a généraliser mon code pour n variables et je n'ai pas très bien compris le procéder pour chainer 0 à 1 et en meme temps 1 à 0. C'est un problème d'algo.Merci de m'aider!

  2. #2
    Membre Expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Par défaut
    Bonjour,

    Tu as plusieurs problèmes dans ton code.
    Déjà d'un point de vue algorithmique, tu ne lis pas le caractère suivant dans ta boucle de départ.

    Reprenons un peu ton exercice
    Il te demande de rechercher le caractère "." et de chainer les caractères points successifs entre eux.

    1 - Parcourir tant que non fin de fichier
    2 - Parcourir tant que non fin de ligne
    3 - Rechercher le premier caractère point
    4 - Regarder le caractère suivant
    a) C'est un point => Traitement de chainage et regarder le suivant
    b) Regarder le suivant

    En algo :

    parcours tant que non fin de fichier
    parcours tant que non fin de ligne et non fin de fichier
    Recherche caractère Point
    Parcours tant que non fin de fichier et non fin de ligne et caractère suivant différent de point
    Traitement de chaînage
    fin de parcours
    fin de parcours
    fin de parcours

    Pour des raisons évidentes, tous ces parcours doivent être effectué à l'aide de la même variable afin de progresser toujours dans le fichier

    Au niveau programmation dans ton code, tu as une erreur importante sur le traitement des chaines de caractères.

    La comparaison des chaines de caractères s'effectue avec la fonction strcmp. Je t'invite à regarder la FAQ à ce sujet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	while(tmp!="\n") // Entre autre dans ton code
    En espérant t'avoir un peu éclairer
    Cordialement,
    Christophe

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    Merci mais j'avouerai que je bloque ici:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    lecture_ligne(int nombre_variables)
    	{
    		char caractere;
    		int indice_tableau=0;
    		int indice_m=0;
    		char tmp;
     
    		while(!feof(grille))
    		{
    			tmp=fgetc(grille);
    			while((strcmp(tmp,'\n')==0) && !feof(grille))
    			{
    Je ne vois pas comment faire pour "chercher" le caractère point tant que non fin de fichier,non fin de ligne et caractère suivant différent de point.

    Merci !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    lecture_ligne(int nombre_variables)
    	{
    		char caractere;
    		int indice_tableau=0;
    		int indice_m=0;
    		char tmp;
     
    		while(!feof(grille))
    		{
    			tmp=fgetc(grille);
    			while((strcmp(tmp,'\n')==0) && !feof(grille))
    			{	
    				while(strcmp(tmp,'.')==0)
    				{

Discussions similaires

  1. Probleme sur les listes WD
    Par Godvertomi dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 12/06/2013, 16h18
  2. Réponses: 6
    Dernier message: 16/02/2008, 21h53
  3. MS Access et TQuery (probleme sur les dates)
    Par Djob dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2004, 14h57
  4. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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