Pile en langage C
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Pile en langage C



  1. #1
    invitee2e61ccb

    Pile en langage C


    ------

    j'ai 1 petit programme en C. Si je rentre "1234" et puis il s'affiche "1234".
    Mais, si je veux mettre des espaces dans ma chaine de "caractères". par exemple, je tape "123 45". il devrait s'afficher "123 45".
    Pouvez vous m'aider à résoudre ça ? merci

    Code:
    typedef struct el*pel;
    typedef struct el{
        int v;
        pel suivant;
    }tel;
    
    
    pel creeElem (int val){
        pel aux = (pel) malloc (sizeof(tel));
        aux -> v = val;
        aux -> suivant = NULL;
        return aux;
    }
    
    pel empiler (pel p, int val){
        pel aux = creeElem(val);
        aux -> suivant = p;
        p =aux;
        return p;
    }
    
    pel depiler (pel p, int *pv){
        pel aux = p;
        if (p == NULL){
            printf( "pile deja vide\n");
            exit(1);
        }
        else{
            p = p -> suivant;
            *pv = aux -> v;
            free(aux);
            return p;
        }
    }
    
    int calcul (pel p){
        int v,s,coef;
        s = 0;
        coef = 1;
        while (p!=NULL ){
            p = depiler(p,&v);
            s = s+v*coef;
            coef = coef*10;
        }
        return s;
    }
    
    
    pel analyse (char *t){
        int i;
        pel p = NULL;
        i = 0;
        while (t[i] != '\0'){
            switch (t[i]){
                case '0': p = empiler(p,0);
                          break;
                case '1': p = empiler(p,1);
                          break;
                case '2': p = empiler(p,2);
                          break;
                case '3': p = empiler(p,3);
                          break;
                case '4': p = empiler(p,4);
                          break;
                case '5': p = empiler(p,5);
                          break;
                case '6': p = empiler(p,6);
                          break;
                case '7': p = empiler(p,7);
                          break;
                case '8': p = empiler(p,8);
                          break;
                case '9': p = empiler(p,9);
                          break;
                default : printf("Erreur !\n");
                          exit(1);
            }
            i++;
        }
        return p;
    }
    
    int main (){
        pel p;
        char t[100];
        printf("chaine ?\n");
        gets (t);
        p = analyse(t);
        printf("entrez :%i\n", calcul(p));
    }

    -----

  2. #2
    invite4492c379

    Re : Pile en langage C

    Hello,

    Ton programme est correct mais ne correspond à tes attentes.
    Quand tu entres un caractère autre que '0','1','2','3','4','5','6','7 ','8','9' le switch de ta fonction analyse va passer dans le default, t'afficher une erreur et finir le programme par un exit(1). Si tu veux un autre comportement il va falloir que tu modifies ta fonction analyse pour gérer de nouveau caractère (je doute que ce soit ça que tu veuilles) ou modifier le comportement de ton programme, «123 45» signifiant traiter 123 puis traiter 45 ...

  3. #3
    invitee2e61ccb

    Re : Pile en langage C

    dans la fonction analyse, il rencontre 1 et 2, il les empile. Ensuite, il rencontre "espace", il dépile 1 et 2. Puis ...

  4. #4
    invite4492c379

    Re : Pile en langage C

    puis ... ben puis il faut le programmer

    dans ta fonction analyse il n'y a rien qui quoi faire quand le caratère est ' ', donc il passe dans le default.

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

    Re : Pile en langage C

    Bonjour,

    Eh oui, on y arrive toujours :

    Un programme ne sait rien faire de ce qui n'est pas programmé.

    (Enfin, on parle des programmes habituels, d'autres peuvent apprendre ce qu'il faut faire, mais c'est précisément parce qu'on les a conçu ainsi).

  7. #6
    invitee2e61ccb

    Re : Pile en langage C

    j'ai enlevé la fonction calcul en modifiant la fonction analyse. ça compile mais ça donne n'importe quoi
    Code:
    pel analyse (char *t, char *sortie){
        int i,j;
        pel p = NULL;
        i = 0;
        j=0;
        int v,s,coef;
        s = 0;
        coef = 1;
        while (t[i] != '\0'){
            switch (t[i]){
                case '0': p = empiler(p,0);
                          break;
                case '1': p = empiler(p,1);
                          break;
                case '2': p = empiler(p,2);
                          break;
                case '3': p = empiler(p,3);
                          break;
                case '4': p = empiler(p,4);
                          break;
                case '5': p = empiler(p,5);
                          break;
                case '6': p = empiler(p,6);
                          break;
                case '7': p = empiler(p,7);
                          break;
                case '8': p = empiler(p,8);
                          break;
                case '9': p = empiler(p,9);
                          break;
                case ' ': while (p!=NULL ){
                          p = depiler(p,&v);
                          s = s+v*coef;
                          sortie[j] = s;
                          j++;
                          coef = coef*10;
                          }
                          printf("voila, la chaine est %s:",sortie);
                          return s;
                          break;
    
            }
            i++;
        }
        return p;
    }

  8. #7
    invite4492c379

    Re : Pile en langage C

    Hello,

    avant de modifier un programme que tu n'as pas écrit en espérant qu'il tombe en marche par tâtonnement il faut :

    * comprendre le programme que tu modifies
    * ce que tu veux faire exactement (le plus imprtant ?)

    Donc ma première question est : que cherches-tu à faire exactement ?

  9. #8
    invitee2e61ccb

    Re : Pile en langage C

    je tape la chaine de caractères. le programme rencontre "espace". il dépile des chiffres et puis il calcul des chiffres et mets le résultat dans 1 tableau de caractères. je tape "123 45". ça me donne finalement "123 45"

  10. #9
    invite4492c379

    Re : Pile en langage C

    Un exemple peut-être ?

    Tu tapes «123 45»
    si je te comprends on obtient :

    chaîne pile
    123b45 []
    23b45 [1]
    3b45 [2;1]
    b45 [3;2;1]

    où b est l'espace.

    Ensuite tu me dis qu'il doit dépiler mais tu entends quoi par dépiler 4 dans la pile [3;2;1] ?
    Que signifie calculer des chiffres ?

  11. #10
    invitee2e61ccb

    Re : Pile en langage C

    le calcule est le code dessous:
    Code:
    while (p!=NULL ){
                          p = depiler(p,&v);
                          s = s+v*coef;
                          sortie[j] = s;
                          j++;
                          coef = coef*10;
                          }
                          return s;
    le programme empile 1 , 2 et ensuite 3. Mais quand il rencontre "espace", il dépile 3, 2 et 1. Et le code de calcul sert à mettre sous forme de nombre, c'est à dire 123 (le calcul du programme, on imagine : 3*1+2*10+1*100, ça donne 123). et le nombre 123, je le place dans 1 tableau. ensuite, je fais pareil pour les chiffres 4 et 5....

  12. #11
    invite4492c379

    Re : Pile en langage C

    Citation Envoyé par yann85 Voir le message
    le calcule est le code dessous:
    Code:
    while (p!=NULL ){
                          p = depiler(p,&v);
                          s = s+v*coef;
                          sortie[j] = s;
                          j++;
                          coef = coef*10;
                          }
                          return s;
    le programme empile 1 , 2 et ensuite 3. Mais quand il rencontre "espace", il dépile 3, 2 et 1. Et le code de calcul sert à mettre sous forme de nombre, c'est à dire 123 (le calcul du programme, on imagine : 3*1+2*10+1*100, ça donne 123). et le nombre 123, je le place dans 1 tableau. ensuite, je fais pareil pour les chiffres 4 et 5....
    Tu as le choix. Soit tu saisis une chaine, tu sépares la chaine en morceaux séparés par des espaces et tu traites chaque morceau.
    Soit tu modifies analyse : quand le caratère est ' ' alors tu calcules mais tu dois pouvoir insérer le résultat du calcul dans un tableau (ce qui pour simplifier ici signifie utiliser des variables globales ce qui est mal)

  13. #12
    invitee2e61ccb

    Re : Pile en langage C

    j'ai cherché depuis quelque jours mais, je n'arrive pas. De plus, cette partie est importante dans mon D.S. prochain. Vous pouvez me corriger mon programme, svp ?

  14. #13
    yoda1234

    Re : Pile en langage C

    Ben, n'est-ce ce que photon57 essaye de faire?
    À moins que tu ne veuillent qu'il te "ponde" le programme tout fait? Où serait l’intérêt?
    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

  15. #14
    invite4492c379

    Re : Pile en langage C

    Quel est ton niveau ? C'est un cours de quoi algo, c ?

    pour faire simple et propre essaye de réfléchir comment faire pour découper un chaine du genre "123 456 78" en utilisant par exemple la fonction strtok. Tu trouveras un exemple d'utilisation sur http://www.cppfrance.com/codes/STRTOK-EXEMPLE-UTILISATION_10851.aspx

  16. #15
    invitee2e61ccb

    Re : Pile en langage C

    on n'a pas fait le programme d'info en 1ère année et la 2è année. On est admis en 3è année après avoir passé les concours. mtn on doit rattraper le programme de 1ère et 2è en 2 mois. les cours se passent vite. on n'a pas assez de temps à tout comprendre. Bon, merci pour vos informations, j'essaye de faire encore

  17. #16
    polo974

    Re : Pile en langage C

    premier conseil: prends du recul
    quel est le but? travailler avec une structure pile ou séparer les nombres.

    en gros, il y a 3 cas à traiter:
    un chiffre: le cumuler dans un nombre (pas vraiment besoin de pile pour ça).
    un espace ou la fin de chaine: afficher le nombre s'il existe (puis l'effacer, sinon si 2 espaces, 2 affichages...)
    autre chose: bug de saisie

    pour gérer un nombre "qui existe ou pas": une variable qui dit 1: j'ai quelque chose, 0:rien
    Jusqu'ici tout va bien...

Discussions similaires

  1. Pile neuve / Pile usagée
    Par invite3ff5f84b dans le forum Physique
    Réponses: 26
    Dernier message: 27/12/2013, 12h41
  2. pile : réactif consommés alors que la pile ne débite pas ?
    Par invite55844dae dans le forum Chimie
    Réponses: 0
    Dernier message: 15/12/2009, 18h14
  3. testeur de pile: fils pile débrancher
    Par invite1547e3b7 dans le forum Électronique
    Réponses: 3
    Dernier message: 04/01/2009, 13h38
  4. Pile de Volta, pile à concentration et équation de Nernst
    Par invite8c3060a6 dans le forum Chimie
    Réponses: 3
    Dernier message: 04/03/2007, 12h42