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

Assembleur Discussion :

Création d'une calculatrice en C : gestion de la pile


Sujet :

Assembleur

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Création d'une calculatrice en C : gestion de la pile
    Bonjour,

    J'ai un travail a faire pour l'école, mais je n'y arrive vraiment pas... Une âme charitable voudrait bien m'aider ?
    Je joins l'énoncé... enoncé_travail_calculatrice.pdf

    Ps: ce travail doit donc comporter du C et de l'asm...

    D'avance merci de votre aide..

    Ben

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    au moins tu as le mérite de dire clairement que c'est un devoir mais ... moi non plus j'y arrive vraiment pas

    Si tu nous disais sur quoi tu bloques ? (si tu réponds "tout" tu peux changer d'orientation )

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Je ne vais pas cacher que c'est un devoir fin une préparer pour un test... Bah y a le fait de la pile que j'ai du mal...

  4. #4
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Tu ne dois pas utiliser la pile système car ton programme C l'utilise déjà pour lui-même
    Mais tu peux simuler la pile avec un tableau de n éléments. (n sera la profondeur de la pile)
    ton programme doit vérifier si la saisie est un nombre ou un opérateur.
    Si c'est un nombre, décaler le tableau (vérifier que ce dernier ne déborde pas) et placer la valeur saisie au début
    si c'est un opérateur, agir en conséquence sur les deux dernières valeurs, décaler le tableau dans l'autre sens (enlever un élément)
    et placer le résultat au sommet.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Je ne comprends pas trop ce que tu veux dire.. Notre prof a dit qu'il fallait faire une pile pour placer les éléments.... Et toi tu me parles d'un tableau, tu peux dévlopper ?

    D'avance merci de ton aide... !

  6. #6
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Une pile c'est un tableau à une dimension

    voici un petit exemple
    - pile de 5 éléments de type entiers signés
    - n= nombre d'éléments sur la pile (initialisé à 0)
    - je décide que le sommet de la pile correspond au premier élément de mon tableau (affiché le plus à gauche)
    - si les valeurs du tableau n'ont pas d'importance, je les remplace par un "x"

    voici ma pile au début du programme :
    x,x,x,x,x (n=0)

    lors de la saisie d'une valeur, (après avoir testé qu'il s'agissait bien d'un nombre)
    - le contenu de la pile est décalé d'un élément vers la droite
    - la valeur est placée au sommet (à gauche).
    - n est incrémenté de 1
    - sir n>5 (profondeur de pile) il y a débordement de la pile

    je rentre 8
    8,x,x,x,x (n=1)

    je rentre maintenant 4
    4,8,x,x,x (n=2)

    Je rentre 5
    5,4,8,x,x (n=3)

    si l'entrée correspond à une opération simple impliquant 2 éléments
    - vérifier que n>1
    - récupérer les deux dernières valeurs de la pile,
    - décaler la pile de 2 éléments à gauche (efface les deux valeurs)
    - n est décrémenté de 2
    - effectuer l'opération sur ces valeurs
    - déposer la valeur calculée au sommet de la pile comme si elle avait été saisie

    je rentre "+"
    9,8,x,x,x (n=2)

    je rentre "-"
    -1,x,x,x,x (n=1)

    je rentre "*"
    erreur car n<2

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci cela m'a un peu éclairci les idées, mais je vois pas trop comment je vais faire pour différencier un nombre d'un opérateur ;o

  8. #8
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    bien si la saisie est en ASCII c'est pas dur, les nombres sont uniquement composés des codes "0" à "9" du "." et du "-" (mais uniquement au début et il faut qu'il y ait au moins un
    chiffre derrière)
    si ton test de nombre renvoie une erreur, alors il faut tester s'il s'agit d'un opérateur "+", "-", "*" ou "/"

    Par contre, je ne vois pas l'utilité de vouloir utiliser l'assembleur dans ton programme

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bah il a dit qu'on pouvait aussi faire la pile en asm avec push et pop^^

  10. #10
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    euh.... alors il faut déclarer une autre pile car la pile système sert au programme,
    du coup je ne vois pas comment éviter le plantage
    (après je n'y connais pas grand chose en programmation C)

    Enfin si ton prof a un programme "démo" je suis preneur

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    que veux tu dire par programme démo ?

  12. #12
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    s'il vous propose un programme en correction.
    histoire de voir comment il a géré ça.

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Voila, je comprends pas pourquoi mon code ne marche pas :/

    quelqu'un peut-il m'aider ?

    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
    typedef struct ElementListe{
      char *donnee;
      struct ElementListe *suivant;
    } Element;
     
    typedef struct ListeRepere{
      Element *debut;
      int taille;
    } Pile;
     
    /* initialisation */
    void initialisation (Pile *tas);
     
    /* EMPILER*/
    int empiler (Pile *tas, char *donnee);
     
    /* DEPILER*/
    int depiler (Pile *tas);
     
    /* Affiche la pile */
    void affiche (Pile *tas);
     
     
    void main()
    {
       initialisation (struct Pile *tas);
       printf("initialisation");
     
       // empiler (Pile *tas,  *donnee);
        printf("L'empilage");
     
        depiler (Pile*tas);
        printf("Dépilage");
     
       // affiche (Pile *tas);
        printf("Affichage pile");
     
    }
     
    void initialisation (Pile * tas){
      tas->debut = NULL;
      tas->taille = 0;
    }
     
    /* empiler (ajouter) un élément dans la pile */
    int empiler (Pile * tas, char *donnee){
      Element *nouveau_element;
      if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
        return -1;
      if ((nouveau_element->donnee = (char *) malloc (50 * sizeof (char)))
          == NULL)
        return -1;
      strcpy (nouveau_element->donnee, donnee);
      nouveau_element->suivant = tas->debut;
      tas->debut = nouveau_element;
      tas->taille++;
    }
     
    /* depiler (supprimer un élément de la pile */
    int depiler (Pile * tas){
      Element *supp_element;
      if (tas->taille == 0)
        return -1;
      supp_element = tas->debut;
      tas->debut = tas->debut->suivant;
      free (supp_element->donnee);
      free (supp_element);
      tas->taille--;
      return 0;
    }
     
    /* affichage de la pile */
    void affiche (Pile * tas){
      Element *courant;
      int i;
      courant = tas->debut;
     
      for(i=0;i<tas->taille;++i){
        printf("\t\t%s\n", courant->donnee);
        courant = courant->suivant;
      }
    }

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/09/2018, 17h19
  2. [AC-2003] Création d'une BD pour la gestion et l'impression de documents
    Par meddly dans le forum Modélisation
    Réponses: 1
    Dernier message: 17/08/2012, 20h34
  3. Création d'une calculatrice en C#
    Par K1IG1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/12/2009, 08h50
  4. Création d'une calculatrice a nombre "entier"
    Par en-one dans le forum Débuter
    Réponses: 3
    Dernier message: 16/11/2008, 16h19
  5. Création d'une calculatrice en Java
    Par angelka dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 05/12/2007, 19h19

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