Se connecter avec
S'enregistrer | Connectez-vous

Problem:Exercice En Programmation C

Dernière réponse : dans Programmation

Bonjour,
j'ai crée une biblihothèque "Liste.h" et quand je fait appel à la fonction "supr_oc" qui suprime les occurences d'un élement entrer dans la liste alors la fonction retourne un erreur c'est ça le code source alors aider moi merci d'avance :
  1. typedef struct cellule{
  2. int x;
  3. cellule * suiv;
  4. }cellule;
  5. //----------------------------saisi entète de liste-----------------------------
  6. cellule * saisi_entete(cellule *l){
  7. cellule * nouv;
  8. nouv=(cellule*)malloc(sizeof(cellule));
  9. printf("entrer la cellule 1 de la liste\n");
  10. scanf("%d",&(nouv->x));
  11. nouv->suiv=l;
  12. l=nouv;
  13. return l;
  14. }
  15. //----------------------------verification si la liste est vide-----------------
  16. int vevide(cellule *l){
  17. if(l=NULL){
  18. return 0;
  19. }else {return 1;}
  20. }
  21. //----------------------------saisi fin de la liste ----------------------------
  22. cellule * saisi_fin(cellule *l){
  23. cellule *p,*nv;
  24. if(vevide(l)==0){
  25. l=saisi_entete(l);
  26. }else{
  27. nv=(cellule*)malloc(sizeof(cellule));
  28. p=l;
  29. while(p->suiv!=NULL){
  30. p=p->suiv;
  31. }
  32. p->suiv=nv;
  33. nv->suiv=NULL;
  34. printf("entrer lentier a ajouter a la fin:");
  35. scanf("%d",&(nv->x));}
  36. return l;
  37. }
  38. //--------------------------------Taille De la Liste----------------------------
  39. int taille(cellule * l){
  40. int nb=1;
  41. cellule *p;
  42. p=l;
  43. while(p->suiv!=NULL){
  44. nb++;
  45. p=p->suiv;
  46. }
  47. return nb;
  48. }
  49. //-----------------------------saisie position----------------------------------
  50. cellule * saiaie_position(cellule * l){
  51. int pos,i=1,ta;
  52. cellule *p;
  53. cellule *nv=(cellule *)malloc(sizeof(cellule));
  54. p=l;
  55. ta=taille(l);
  56. do{
  57. printf("Entrer la position de saisi entre [2..%d]:\n",ta);
  58. scanf("%d",&pos);
  59. }while(pos<1 || pos>ta);
  60. if(pos==1){
  61. l=saisi_entete(l);
  62. }else if(pos>ta){
  63. l=saisi_fin(l);
  64. }else{
  65. printf("Entrer l''element à saisi \n");
  66. scanf("%d",&(nv->x));
  67. for(i=1;i<pos-1;i++){
  68. p=p->suiv;
  69. }
  70. nv->suiv=p->suiv;
  71. p->suiv=nv;
  72. }
  73. return l;
  74. }
  75. //----------------------------Suppression debut---------------------------------
  76. cellule * supr_deb(cellule *l){
  77. cellule *p;
  78. p=l;
  79. if(l==NULL){l=NULL;}else if(l->suiv==NULL){l=NULL;free(p);}else{
  80.  
  81. l=l->suiv;
  82. free(p);}
  83. return l;
  84. }
  85. //------------------------------Supression Fin----------------------------------
  86. cellule * supr_fin(cellule *l){
  87. cellule * p,*p1;
  88. p=l;
  89. if(l==NULL){l=NULL;
  90. }else
  91. if(l->suiv==NULL){
  92. l=NULL;
  93. free(p);
  94. }else{
  95. while(p->suiv!=NULL){
  96. p1=p;
  97. p=p->suiv;
  98. }
  99. p1->suiv=NULL;
  100. free(p);
  101. }
  102. return l;
  103. }
  104. //-------------------------------Suppression Pos--------------------------------
  105. cellule * supr_pos(cellule *l,int pos,int ta){
  106. int i;
  107. cellule *p,*p1;
  108. p=l;
  109. p1=p;
  110. if(pos==1){l=supr_deb(l);}else if(pos==ta){l=supr_fin(l);}else{
  111. for(i=1;i<pos;i++){
  112. p1=p;
  113. p=p->suiv;
  114. }
  115. p1->suiv=p->suiv;
  116. free(p);}
  117. return l;
  118. }
  119. //-------------------------------Suppression occurance--------------------------
  120. cellule * supr_ocu(cellule *l){
  121. int a,ta,i;
  122. cellule *p;
  123. p=l;
  124. ta=taille(l);
  125. printf("entrer lelement a supprimer :\n");
  126. scanf("%d",&a);
  127. while(p->suiv!=NULL){
  128. while(p->x==a){
  129. p=supr_deb(p);
  130. }
  131. p=p->suiv;
  132.  
  133. }
  134. return l;
  135.  
  136. }
  137. //----------------------------affichage de liste--------------------------------
  138. void affich(cellule *l){
  139. cellule *t=l;
  140. while(t!=NULL){
  141. printf("%d||",t->x);
  142. t=t->suiv;
  143. }
  144. }


Configuration: Windows Vista / Firefox 3.6.16/Borland C++

Autres pages sur : problem exercice programmation

Lassé par la pub ? Créez un compte
Expert Programmation

Ce qu'il veut dire c'est que tu devrais faire ce qu'il te dit, et que ça lui donnera envie de t'aider...
Parce que là, ton code est difficilement lisible, on ne sait quelle est l'erreur, du coup, personne n'a envie de perde du temps à fouiller tes 144 lignes à comprendre ce qui se passe et voir où est-ce qu'il peut y avoir une erreur.

je sais monsieur.. mais je suis nouveau sur ce forum .. et je sais pas que c'était obligatoir d'indiquer l'erreur pasque j'ai participer dans autres forum et j'ai pas réçus c'est type de reponses.. alors la moindre d choses qu'il a fallu le faire de répondre à ma question aprés ts ce qu'il a dit dés le début.. entt ca merci je respecte ts enfin .. bye
Expert Programmation

T'es sur de ce que tu dis ?
Parce que j'ai retrouvé ton message sur 5 autres forums différents:
  • http://forum.hardware.fr/hfr/Programmation/C/probleme-p...
    Et on te répond:
    Citation :
    [traduction en français]Je n'ai pas pu les appeler dans le fichier principal.c[/traduction]
    Pourquoi ?
    Quel message d'erreur avez-vous ?
    Quel compilateur utilisez-vous ?
    Est-ce que vous avez créé un projet contenant tous les fichiers ".c" nécessaires ?
    Ou bien, est-ce que vous avez fait un makefile contenant ces fichiers ".c" ?


    Tu as réessayé sur le même forum 2 jours plus tard:
  • http://forum.hardware.fr/hfr/Programmation/C/aider-exer...
    Et on t'a encore envoyé chier
    Citation :
    Non mais tu parles vraiment comme ça dans la vie ? "Je n'arrive pas alors aider moi merci" ? Hein bein ...

    Donc, avant de venir ici demander de l'aide demande toi ce que fait chaque ligne du code de ta méthode. Parce que manifestement tu n'as pas les idées au clair ...


  • http://www.programmez.com/forum/viewtopic.php?t=2187
    Et on te répond:
    Citation :
    Bonjour,

    Merci de soigner la présentation des messages. Des caractères trop gros et un code non formaté le rendent illisible, et cela risque fort de décourager tous ceux qui voudraient t'aider


    Et puis il y a aussi:
  • http://www.forumfr.com/sujet420550-aider-moi-sur-un-exe...
    Où tu n'as aucune réponse.

    Il n'y a que developpez qui t'a répondu bien gentillement:
  • http://www.developpez.net/forums/d1073184/c-cpp/c/probl...
    Et encore ils t'ont dit d'utiliser les balises code (que j'ai rajouté sur ton message), et ils t'ont dit d'indiquer là où ça plantait.


    Comme quoi...

    voiçi mon effort mr !!!
    typedef struct cellule{
    int x;
    cellule * suiv;
    }cellule;
    //----------------------------saisi entète de liste-----------------------------
    cellule * saisi_entete(cellule *l){
    cellule * nouv;
    nouv=(cellule*)malloc(sizeof(cellule));
    printf("entrer la cellule 1 de la liste\n");
    scanf("%d",&(nouv->x));
    nouv->suiv=l;
    l=nouv;
    return l;
    }
    //------------------------------------------------------------------------------
    cellule * saisi_entete2(cellule *l,int a){
    cellule * nouv;
    nouv=(cellule*)malloc(sizeof(cellule));
    nouv->x=a;
    nouv->suiv=l;
    l=nouv;
    return l;
    }
    //----------------------------verification si la liste est vide-----------------
    int vevide(cellule *l){
    if(l==NULL){
    return 0;
    }else {return 1;}
    }
    //----------------------------saisi fin de la liste ----------------------------
    cellule * saisi_fin(cellule *l){
    cellule *p,*nv;
    if(vevide(l)==0){
    l=saisi_entete(l);
    }else{
    nv=(cellule*)malloc(sizeof(cellule));
    p=l;
    while(p->suiv!=NULL){
    p=p->suiv;
    }
    p->suiv=nv;
    nv->suiv=NULL;
    printf("entrer lentier a ajouter a la fin:");
    scanf("%d",&(nv->x));}
    return l;
    }
    //--------------------------------Taille De la Liste----------------------------
    int taille(cellule * l){
    int nb=1;
    cellule *p;
    p=l;
    while(p->suiv!=NULL){
    nb++;
    p=p->suiv;
    }
    return nb;
    }
    //-----------------------------saisie position----------------------------------
    cellule * saiaie_position(cellule * l){
    int pos,i,ta;
    cellule *p;
    cellule *nv=(cellule *)malloc(sizeof(cellule));
    p=l;
    ta=taille(l);
    do{
    printf("Entrer la position de saisi entre [2..%d]:\n",ta);
    scanf("%d",&pos);
    }while(pos<1 || pos>ta);
    if(pos==1){
    l=saisi_entete(l);
    }else if(pos>ta){
    l=saisi_fin(l);
    }else{
    printf("Entrer l''element à saisi \n");
    scanf("%d",&(nv->x));
    for(i=1;i<pos-1;i++){
    p=p->suiv;
    }
    nv->suiv=p->suiv;
    p->suiv=nv;
    }
    return l;
    }
    //----------------------------Suppression debut---------------------------------
    cellule * supr_deb(cellule *l){
    cellule *p;
    p=l;
    if(l==NULL){return l;}else if(l->suiv==NULL){l=NULL;free(p);return l;}else{
    l=l->suiv;
    free(p);
    return l;
    }
    }
    //------------------------------Supression Fin----------------------------------
    cellule * supr_fin(cellule *l){
    cellule * p,*p1;
    p=l;
    if(l==NULL){l=NULL;
    }else
    if(l->suiv==NULL){
    l=NULL;
    free(p);
    }else{
    while(p->suiv!=NULL){
    p1=p;
    p=p->suiv;
    }
    p1->suiv=NULL;
    free(p);
    }
    return l;
    }
    //-------------------------------Suppression Pos--------------------------------
    cellule * supr_pos(cellule *l,int pos,int ta){
    int i;
    cellule *p,*p1;
    p=l;
    p1=p;
    if(pos==1){l=supr_deb(l);}else if(pos==ta){l=supr_fin(l);}else{
    for(i=1;i<pos;i++){
    p1=p;
    p=p->suiv;
    }
    p1->suiv=p->suiv;
    free(p);}
    return l;
    }
    //-------------------------------Suppression occurance--------------------------
    cellule * supr_ocu(cellule *l){
    int a,ta,i;
    cellule *p,*pr,*ps,*temp;
    printf("entrer lelement a supprimé:\n");
    scanf("%d",&a);
    p=l;
    ta=taille(l);
    while(p->suiv!=NULL){
    if(p->x==a && p==l){
    l=supr_deb(l);
    p=l;
    }
    if(p->x!=a){
    pr=p;
    p=p->suiv;
    }
    if(p!=l && p->x==a && p->suiv!=NULL){
    pr->suiv=p->suiv;
    ps=pr->suiv;
    temp=p;
    free(temp);
    p=ps;
    }
    }
    if(p->x==a && p->suiv==NULL){
    l=supr_fin(l);
    }


    return l;

    }
    //----------------------------Recherche Entier pos------------------------------
    int recherche_pos(cellule * l ,int a){
    int ta,i=1,n;
    cellule *p;
    p=l;
    ta=taille(l);
    while(p->suiv!=NULL && p->x!=a){
    i++;
    p=p->suiv;
    }
    if(i>ta){
    printf("nexiste pas");
    n=0;
    }
    else
    {
    if(p->x==a)
    {n=i;}

    }
    return n;
    }
    //----------------------------affichage de liste--------------------------------
    void affich(cellule *l){
    cellule *t=l;
    while(t!=NULL){
    printf("%d||",t->x);
    t=t->suiv;
    }
    }
    //------------------------------Intersection de deux liste----------------------
    cellule * inter_lst(cellule *l, cellule *l1){
    cellule *p,*k=NULL;
    int a;
    p=l;
    while(p->suiv!=NULL){
    a=p->x;
    if(recherche_pos(l1,a)!=0){
    k=saisi_entete2(k,a);
    }
    p=p->suiv;
    }
    if(p->suiv==NULL){
    a=p->x;
    if(recherche_pos(l1,a)!=0){
    k=saisi_entete2(k,a);
    }
    }
    return k;
    }
    //--------------------------------------------------------------------------------Insertion d'un Liste 1 --------------------------------------------------
    cellule * saisi_l(cellule *l){
    int u,a,x;
    do{
    l= saisi_entete(l);
    printf("voulez vous continuer 0/1 \n");
    scanf("%d",&u);
    }while(u==1);
    affich(l);
    printf("\n");
    l=saisi_fin(l);
    affich(l);
    printf("\n");
    l=saiaie_position(l);
    affich(l);
    printf("\n");
    l=supr_deb(l);
    affich(l);
    printf("\n");
    l=supr_fin(l);
    affich(l);
    printf("\n");
    l=supr_ocu(l);
    affich(l);
    printf("\n");
    printf("entrer le entier a rechercher la position:\n");
    scanf("%d",&a);
    x=recherche_pos(l,a);
    printf("dan la position: %d\n",x);
    return l;}
    Expert Programmation

    Je parlais du fait que tu disais qu'on était les seuls à t'avoir fait ce genre de remarques, que les autres forums avaient bien voulu t'aider, blablabla...
    Alors que sur les 5 autres messages, y'en a 3 qui t'ont envoyé chier, 1 où personne t'a pas répondu, et 1 où on t'a répondu en te faisant comprendre qu'il faudrait quand même faire des efforts.

    Après que t'aies réussi tout seul, ça je m'en moque, tant mieux pour toi :) 
    Mais essayer de nous faire passer pour des "méchants" qui ne veulent pas te répondre, alors que tu t'exprimes n'importe comment, que tu colles du code sans mettre de balises ni indenter ton code, que tu n'expliques pas ton problème/erreur; et que tu attends agressif qu'on te réponde, bah non, ça c'est pas possible.
    Expert Programmation

    Oui, nos réponses n'avaient que pour vocation à t'inciter à donner plus d'informations sur ton problème (d'autant que sous borland tu peux faire du debug facilement et indiquer où le crash se trouve).
    Pour un code aussi simple, les erreurs se trouvent rapidement, alors je n'ai pas envie d'y passer 5 min juste pour analyser ton code.

    Ps: au moins, tu donnes le code, ce qui n'est pas donné à tout le monde... :) 

    bah non mon ami je veux pas dire que "vous ètes méchants" je vous jur que ce n'est pas vrai et ce que c'est pas ça ce que j'ai voulu.. mais la reponse de notre ami ne m'a pas plu d tt ..
    entt ca laiss tombé et merci .. dsl si jété un peut dur lol :) 
    Lassé par la pub ? Créez un compte
    Tom's guide dans le monde