empiler des caracteres en pile langage c
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

empiler des caracteres en pile langage c



  1. #1
    med126

    empiler des caracteres en pile langage c


    ------

    bonjour , je voulais empiler des caractere dans une pile en adoptant la representation contegue mais au niveau de l'exécution il ya une probleme
    voici mon travaile
    Code:
    pile.h
    void creer();
    unsigned pile_vide();
    void empiler(char );
    char dernier();
    void depiler();
    
    pile.c
    #include<assert.h>
    #include"pile.h"
    #define n 10
    
    struct pile
    {char cle[n];
    int sommet;};
    
    static struct pile p;
    
    void creer_pile()
    {p.sommet=-1;}
    
    unsigned pile_vide()
    {return(p.sommet==-1);}
    
    char dernier()
    {assert(!pile_vide());
    return(p.cle[p.sommet]);}
    
    void empiler(char x)
    {p.sommet++;
    p.cle[p.sommet]=x;}
    
    void depiler()
    {assert(!pile_vide());
     (p.sommet)--;}
    
    test.c
    #include<stdio.h>
    #include"pile.cpp"
    unsigned i;
    void main()
    {char c;
    creer_pile();
    
    for(i=0;i<10;i++)
    {printf("donner c=");
    scanf("%c",&c);
    empiler(c);}
    
    printf("le dernier caractere est=%c\n",dernier());
    
    for(i=0;i<10;i++)
    {printf("%c",dernier());
     depiler();} }
    je travaile sur turbo c++, si un erreus existe me eclaire et merci en avance

    -----
    Dernière modification par Jack ; 24/01/2016 à 15h21. Motif: Ajout balises code

  2. #2
    Jack
    Modérateur

    Re : empiler des caracteres en pile langage c

    Le code est tellement mal indenté que ça ne donne pas envie de le lire. Essaie de le présenter comme il faut en ajoutant les balises code (voir les règles participatives de ce forum)

    mais au niveau de l'exécution il ya une probleme
    La moindre des choses serait d'indiquer ce qui te fait dire qu'il y a un problème.

    PS : turbo C++ est complètement dépassé et ne correspond plus aux normes actuelles du C++. Tu devrais passer à quelque chose de plus moderne.
    Dernière modification par Jack ; 24/01/2016 à 15h26.

  3. #3
    med126

    Re : empiler des caracteres en pile langage c

    a) c'est une probleme au niveau de l'empilement dans l'execution
    b) si tu ne veux pas m'aider allez-vous en

  4. #4
    Jack
    Modérateur

    Re : empiler des caracteres en pile langage c

    b) si tu ne veux pas m'aider allez-vous en
    Si tu le prends comme ça, ton vœux va être exaucé, il n'y a aucune chance pour que je t'aide désormais, vu comment tu tiens compte des remarques.

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

    Re : empiler des caracteres en pile langage c

    Pourquoi (p.sommet)-- dans dépile
    vue que p.sommet++; dans empile
    p.sommet-- ça devrait peut être aller mieux
    et puis c'est plus concis d'écrire p.cle[++p.sommet]=x; (en une ligne au lieu de 2)
    La béatitude est l'attitude de l’abbé : la théorie bleue

  7. #6
    EauPure

    Re : empiler des caracteres en pile langage c

    il y a une mauvaise utilisation de assert
    si assert est vérifié en mode debug (option _DEBUG du compilateur) le programme s’arrête avec une erreur d’exécution
    mais si tu es en mode release (sans l'option _DEBUG) ça ne fait rien
    void depiler()
    {
    assert(!pile_vide());
    (p.sommet)--;
    }
    donc remplace tout tes assert par des if
    if (!pile_vide())
    p.sommet--;
    La béatitude est l'attitude de l’abbé : la théorie bleue

  8. #7
    pm42

    Re : empiler des caracteres en pile langage c

    Citation Envoyé par EauPure Voir le message
    il y a une mauvaise utilisation de assert
    si assert est vérifié en mode debug (option _DEBUG du compilateur) le programme s’arrête avec une erreur d’exécution
    mais si tu es en mode release (sans l'option _DEBUG) ça ne fait rien
    void depiler()
    {
    assert(!pile_vide());
    (p.sommet)--;
    }
    donc remplace tout tes assert par des if
    if (!pile_vide())
    p.sommet--;
    Ce n'est pas une mauvaise utilisation : c'est exactement ce qu'assert est supposé faire : décrire le contrat d'utilisation et pouvoir ou non être controlé au runtime suivant qu'on privilégie la fiabilité/débugging ou la performance.
    Le remplacer par un if comme indiqué est une mauvaise idée : on passe de quelque chose d'immédiatement identifié comme un contrat, compilable ou pas à quelque chose qui n'a aucune de ses qualités et qui en cas d'erreur, de dépilage alors que rien n'est sur la pile va fonctionner sans rien signaler...

    Enfin, _DEBUG est spécifique à certains compilateurs notamment Microsoft. La norme est NDEBUG (qui fonctionne dans l'autre sens) : https://en.wikipedia.org/wiki/Assert.h.

  9. #8
    Chanur

    Re : empiler des caracteres en pile langage c

    Citation Envoyé par med126 Voir le message
    a) c'est une probleme au niveau de l'empilement dans l'execution
    b) si tu ne veux pas m'aider allez-vous en
    J'ai compilé et exécuté ton programme.
    Je n'ai pas compris le "#include "pile.cpp", alors je l'ai enlevé. On ne met pas un .cpp en include. C'est absurde.
    Chez moi, l'empilement et le dépilement ont l'air de bien se passer.

    Par contre, la saisie des caractères à empiler, c'est n'importe quoi. Mais comme, chez toi le problème est au niveau de l'empilement, ça n'a sans doute aucun rapport. Comme de toute façon tu ne nous dis pas ce que donne le programme quand tu le lances ...
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. langage C, utiliser des chaines de caractères
    Par invite49289c75 dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 15/01/2013, 13h25
  2. concaténation de chaînes de caractères, langage C
    Par aureo91 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 14/12/2012, 06h37
  3. Pile en langage C
    Par yann85 dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 04/12/2011, 13h05
  4. Un langage codé léger, 2 caractères non codé=1 caractère codé. Une solution?
    Par invite06e0b926 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 30/06/2010, 10h02
  5. empiler des images
    Par lau-val dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 3
    Dernier message: 09/02/2008, 15h42