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 en GTK


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Par défaut Calculatrice en GTK
    Bonsoir,

    Je souhaite réaliser une calculatrice (la même que celle de windows) avec la librairie GTK. (je n'ai pas posté dans le forum GTK car mon problème n'est pas en lien direct avec GTK).

    Actuellement, tout fonctionne sauf la gestion des priorités.
    Ex :
    3+2+9-6=8 La c'est bon
    3*3 = 9 La c'est bon aussi
    Mais si l'utilisateur fait : 3+3*2 ça va me faire 12

    Mon problème est que je ne gère pas les priorités avec * et /.
    Et je ne vois pas comment je pourrais faire.

    Pour mon code, j'ai une fonction pour chaque bouton.
    J'ai une structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct tete
    {
    	GtkLabel * champ;
    	void * bouton;
    	long float resultat;
    	long float nombre;
    	char operateur;
    }t_tet;
    A chaque clic sur un opérateur, mon programme va vérifier s'il n'y avait pas une opération avant à effectuer, et si oui il va l'effectuer.

    Et c'est là qu'est le problème si par exemple cette opération était un + et que la nouvelle opération est un *, ça va poser problème.

    Avez vous une idée de comment je pourrais faire ?

    Merci de votre aide

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    C'est un problème d'évaluation d'expression, généralement résolu avec une pile d'opérandes et une seconde avec les opérations.

    Il y a eu plusieurs discussions sur le sujet, en C ou en C++, fais une recherche sur le forum avec des mots clés comme évaluation, expression, arithmétique, mathématique.

  3. #3
    Membre éclairé Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Par défaut
    Sauf erreur de ma part, dans la calculatrice Windows, quand tu tapes successivement sur 3 puis + puis 3 puis * puis 2, tu obtiens effectivement 12 car celle-ci ne recherche pas non plus les priorités, donc ta propre calculatrice en est une excellente copie !

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ngork Voir le message
    Sauf erreur de ma part, dans la calculatrice Windows, quand tu tapes successivement sur 3 puis + puis 3 puis * puis 2, tu obtiens effectivement 12 car celle-ci ne recherche pas non plus les priorités, donc ta propre calculatrice en est une excellente copie !
    Ce n'est plus le cas sous Windows Seven : 3+3*2=9. Ils ont progressé en calcul chez Microsoft

    A chaque clic sur un opérateur, mon programme va vérifier s'il n'y avait pas une opération avant à effectuer, et si oui il va l'effectuer.

    Et c'est là qu'est le problème si par exemple cette opération était un + et que la nouvelle opération est un *, ça va poser problème.

    Avez vous une idée de comment je pourrais faire ?
    Oui : il faut mémoriser toute la liste d'opérateurs / opérandes et quand l'utilisateur clique sur =, alors il faut l'analyser. Dés que tu as un + ou un -, tu ne peux plus calculer au fur et à mesure. Éventuellement, tu pourrais faire les * et les / au fur et à mesure, mais je ne pense pas que cela ait un grand intérêt par rapport à tout calculer à la fin.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Par défaut
    Citation Envoyé par Ngork Voir le message
    Sauf erreur de ma part, dans la calculatrice Windows, quand tu tapes successivement sur 3 puis + puis 3 puis * puis 2, tu obtiens effectivement 12 car celle-ci ne recherche pas non plus les priorités, donc ta propre calculatrice en est une excellente copie !
    Effectivement, je suis sur Windows 7 et tu as raison...
    Ils se sont vraiment pas cassés la tête....

    Merci en tout cas

  6. #6
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Citation Envoyé par leternel Voir le message
    C'est un problème d'évaluation d'expression, généralement résolu avec une pile d'opérandes et une seconde avec les opérations.
    .
    Oui, c'est ce que tu devrais faire.
    Ou ,plus compliqué, utiliser une grammaire.

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    il y a deux types de calculatrice:
    celles permettant les expressions: c'est-à-dire équivalente à eval("3 + 3 * 2")
    et les autres, séquentielles, qui sont toutes simples : "3" puis "+3" puis "*2" puis "="

    La première utilise une grammaire plus ou moins explicite.
    La seconde utilise une simple machine à état:
    while not finished
    input operator
    input number
    let current value be (current value) operator (number)
    (update current value display)

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Je reviens à la charge avec la calculatrice Windows :
    • en mode standard, 3+3*2=12
    • en modes programmeur et scientifique, 3+3*2=9

    Moralité : si t'es pas un programmeur ou un scientifique, alors tu n'as pas le droit de calculer comme il faut ^^

    En cherchant "grammaire calculatrice", je suis tombé sur 2 liens intéressants :
    http://www.enseignement.polytechniqu...2/TD3/TD3.html
    http://www.enseignement.polytechniqu...2/TD4/TD4.html

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme calculatrice GTK+3 Linux.
    Par Luke spywoker dans le forum Débuter
    Réponses: 2
    Dernier message: 16/12/2014, 18h25
  2. Compilation GTK+ DevC++
    Par GLDavid dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 30/06/2004, 23h04
  3. [GTK]instal devPack avec dev c++
    Par FreshVic dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 15/04/2003, 16h48
  4. [Kylix] Kylix GTK et QT
    Par mailstef dans le forum EDI
    Réponses: 2
    Dernier message: 19/11/2002, 21h53
  5. [GTK]PB Librairie GTK+ sous dev-c++
    Par wozzy dans le forum Dev-C++
    Réponses: 15
    Dernier message: 05/11/2002, 14h55

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