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 :

calculatrice de priorité


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mai 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut calculatrice de priorité
    Bonjour,

    J'essaye de faire une calculatrice avec priorité qui calcule une expression du genre : 5+2*7 et donne d'abord la priorité au * avant le +. Voici mon programme
    mais j'ai un problème avec et je sais pas pourquoi il n'affiche pas le résultat juste

    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
    #include <stdlib.h>
    main()
    {
       float n[100]; char o[100];
       int i,j,k;
       float x,y;
       char a;
       i=1; j=1;
       scanf("%f",&x);
       n[i]=x;
       i++;
       do {
           scanf("%c",&a);
           o[j]=a;
           j++;
           if ((a=='+')||(a=='-')||(a=='*')||(a=='/'))
           {scanf("%f",&y);
           n[i]=y;
           i++;}}
       while (a!='=');
       for (k=1;k<i;k++)
       {
           if (o[k]='*'){n[k+1]=n[k]*n[k+1];
           x=n[k+1];
           n[k]=n[k+1]; }}
       for (k=1;k<i;k++)
       {
           if (o[k]='/'){n[k+1]=n[k]/n[k+1];
           x=n[k+1];
           n[k]=n[k+1]; }}
       for (k=1;k<i;k++)
       {
           if (o[k]='+'){n[k+1]=n[k]+n[k+1];
           x=n[k+1];
           n[k]=n[k+1]; }}
       for (k=1;k<i;k++)
       {
           if (o[k]='-'){n[k+1]=n[k]-n[k+1];
           x=n[k+1];
           n[k]=n[k+1]; }}
     
       printf("...............%f",x);

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Premier conseil : donnez des noms de variables explicites à vos variables, là, on ne comprend pas à quoi serve 'o', 'n' ou autre.
    Ensuite, pour les priorités, je pense le mieux serait de faire un système de pile (structure de données) afin de regrouper et de traiter les opérations de manière ordonnées (mais qui n'est pas le même ordre que celui de la lecture de la ligne).

    Veuillez faire attention à l'indentation.
    Mettez des commentaires, pour expliquer votre reflexion lors de la création du code.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    J'imagine que c'est un exercice, donc il faut tout faire "à la main".
    De manière générale, il faut d'abord écrire une grammaire pour fixer la syntaxe et les mots à reconnaitre. Ensuite câbler les productions de la grammaire par des fonctions.
    L'évaluation se fait via une pile. Lorsqu'un nombre est reconnu, il est placé dans la pile. Lorsqu'un opérateur est reconnu, il faut dépiler les opérandes de la pile, effectuer le calcul puis placer le résultat dans la pile.
    La priorité se décide dans l'élaboration de la grammaire. La plus grande partie du travail se fait avec les outils les plus puissants : feuille + crayon + cerveau
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 9
    Points
    9
    Par défaut réponse
    Bonjour,

    Va faire un tour du côté de la NPI ? (Notation Polonaise Inversée)

  5. #5
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Il y a plusieurs facons de faire je te propose de faire un petit tour de ce cote

    http://www.enseignement.polytechniqu...PDF/Amphi4.pdf

    tu peux aussi utiliser les arbres ...

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    D'autre part, ton code contient une erreur (copiée collée 3 fois, d'ailleurs): pour comparer on utilise ==, dans tes boucles, les comparaisons utilisent '='.
    Ce qui est faux, mais valide au sens du C, une affectation est une expression dont la valeur est la valeur affectée
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Calculatrice et gestion de priorité avec les parenthèses
    Par Fullmetale dans le forum Débuter
    Réponses: 7
    Dernier message: 05/11/2013, 13h46
  2. calculatrice avec priorite
    Par azert2010 dans le forum C#
    Réponses: 3
    Dernier message: 15/01/2011, 22h47
  3. [C#] Configuration du niveau de priorite des processus
    Par stephdiplo150 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/04/2007, 23h29
  4. [VB6] Forçage de la priorité d'un processus Windows
    Par okyle dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/06/2004, 11h27
  5. Priorité de recherche des DLLs
    Par patapetz dans le forum Windows
    Réponses: 3
    Dernier message: 10/09/2003, 18h44

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