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 :

liste contiguë problème


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    étudiant
    Inscrit en
    Février 2018
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 91
    Par défaut liste contiguë problème
    Bonsoirs à tous .
    j'ai eu un problème dans mon code dans l'appelle d'une procédure dans une autre procédure .
    pouvez vous s'il vous plais trouvez l’erreur et merci d'avance
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    #include<stdio.h>
    #include <stdbool.h>
    #define taille 100
     
    //declartionde de liste
    typedef struct {
     
         int tab[taille];
         int longueur;
     
    }Liste;
     
    //verification liste si elle est pleine
    void listePleine(Liste l, bool *r)
    {
    	if (l.longueur>=100)
    	{
    		*r=false;
    	}	 
    }
     
    //verification liste si elle est vide
     
    void listeVide(Liste l, bool *r)
    {
    	if (l.longueur==0)
    	{
    		*r=false;
    	}	 
    }
     
    //insertion d'un nouveau element
    void inserListe(Liste *l ,int k , int e)
    {
    	int i ;
    	bool b = false  ;
    	listePleine(l,&b);
     
    	if(b==false)
    	{
     
    		for(i=0;i<=l->longueur;i--)
    		{
    			l->tab[i+1]=l->tab[i];
    		}
    		l->tab[k]=e;
    		l->longueur=l->longueur+1;
    	}	
    }
     
    //suppression d'un element 
    void suppression(Liste *l ,int k )
    {
    	int i ;
    	bool b= false ;
     
    	listeVide(l,&b);
     
    	if(b==false)
    	{
     
    		for(i=k;i<=l->longueur;i--)
    		{
    			l->tab[i]=l->tab[i+1];
    		}
    		l->longueur=l->longueur-1;
    	}
    }
     
     
     
    void afficher(int tab[])
    {
    	int i;
     
    	for( i=0; i<taille ; i++ )
    	{
        	printf("t[%d]=%d\n",i+1,tab[i]);
        }
    }
     
    void inisialise(Liste l)
    {
    	l.longueur=0;
    }
     
    int main()
    {
    	Liste l ;
    	int n ,i;
    	int v , p ;
     
    //initialier lalongueur de laliste avec 0
      inisialise(l);
     
       printf("donner la taille de l (max.100)\n");
        scanf("%d",&n);
     
      printf("remplissage de l \n");
      for(i=0;i<=taille;i++)
      {
      	scanf("[%d]",&l.tab[i]);
     
      }
     
      printf("affichage de  l");
      afficher(l.tab);
     
       printf("donner la valeur a ajouter \n");
       scanf("%d",&v);
       printf("donner sa position \n");
       scanf("%d",&p);
     
       inserListe(&l,p,v);
       printf("l'affichage apres ajout de l'element \n");
       afficher(l.tab);
     
    return 0;
    }

  2. #2
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    Bonsoir,
    Dans votre code source ligne 38 il y a une erreur; vous passer à la fonction listePleine(l,&b); une variable pointeur alors que celle-ci attend juste une variable du type Liste l il y a donc ici une incompatibilité des paramètres de fonction et c’est également valable pour la fonction listeVide(Liste l, bool *r) à la ligne 58.

    La ligne 95 dans le main; la fonction inisialise(l); n'initialise pas la liste elle initialise en réalité la copie de liste. Pour corriger cela, il vous faut changer les paramètres de la fonction inisialise(l); en utilisant une variable pointeur de type Liste *l suite à ça, les modifications prendront effets.

    La variable n ne sert a rien ou éventuellement dans une utilisation future "peut-être..."
    Ligne 49 le programme s’arrête dû a une erreur de segmentation et il faut également faire attentions a la ligne 101 à 105 .

    à bientôt

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Les fonctions "listeVide()" et "listePleine()" n'ont pas besoin de stocker le résultat vu qu'elles pourraient "renvoyer" ce résultat. Ca éviterait donc de devoir déclarer une variable pour ça et permettrait de tester directement if (listeVide(l)) { ... }. Et tu pourrais utiliser la macro "taille" au lieu de répéter "100" dans ton code.

    Ensuite je m'interroge sur tes boucles qui vont de 0 jusqu'à "longueur" incluse (donc déjà tu dépasses tes limites) et où, en plus, tu tapes dans tab[i+1] => tu dépasses alors de 2 éléments les limites de ton tableau.
    Et enfin il y a "++" et "--" plus efficaces pour incrémenter et décrémenter une variable que d'écrire var=var+1.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Femme Profil pro
    étudiant
    Inscrit en
    Février 2018
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 91
    Par défaut
    Merci beaucoup pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vider liste chainée, problème
    Par hunter99 dans le forum C
    Réponses: 39
    Dernier message: 28/03/2007, 21h08
  2. Réponses: 10
    Dernier message: 11/01/2007, 10h22
  3. [Liste Modifiable] Problème avec la valeur par défault
    Par fusion_sadam dans le forum Access
    Réponses: 3
    Dernier message: 16/06/2006, 11h00
  4. [MFC]List Control : problème d'affichage
    Par gege2061 dans le forum MFC
    Réponses: 5
    Dernier message: 25/07/2005, 13h40
  5. [std::list][find_if] problème avec mes foncteurs
    Par n!co dans le forum SL & STL
    Réponses: 12
    Dernier message: 04/02/2005, 11h56

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