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

SL & STL C++ Discussion :

Comment faire pour ça?


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut Comment faire pour ça?
    Bonjour à tous,

    je dois faire un truc pour un projet, mais je ne sais pas trop par où commencer... Je ne sais pas trop trop quoi faire en premier, quoi vérifier ni rien...
    Je dois le faire en C++, c'est la raison pour laquelle je poste ici, mais s'il y a un forum plus adapté, n'hésitez pas à m'en informer.

    En fait, on doit écrire un programme qui convertira une opération arithmétique en LISP.
    Seules 3 variables existent, X, Y et Z.
    Les opérations sont +, -, * et /
    Il peut y avoir des parenthèses pour spécifier une priorité.

    Voici des exemples qu'il donne:
    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
    􀂾 X = 12
    􀂾 (SETQ X 12)
    􀂾 Y = 10
    􀂾 (SETQ Y 10)
    􀂾 Z = 30
    􀂾 (SETQ Z 30)
    
    􀂾 X + 10
    􀂾 (+ X 10)
    􀂾 X + (Z – Y)
    􀂾 (+ X (- Z Y))
    􀂾 X
    􀂾 12
    􀂾 X = 10
    􀂾 (SETQ X 10)
    􀂾 Y = Z / X
    􀂾 (SETQ Y (/ Z X))
    􀂾 Y
    􀂾 3
    􀂾 X + Y
    􀂾 (+ X Y)
    􀂾 X + (Y – 100) * Z
    􀂾 (+ X (* (- Y 100) Z))
    􀂾 A = 10
    􀂾 Unrecognized variable name A
    􀂾 X = Y ++ 10
    􀂾 Unrecognized operator ++
    􀂾 Z = Y Z
    􀂾 Illegal arithmetic expression
    En rouge, c'est ce que le programme doit afficher, après la saisie de l'utilisateur. (En noir)

    Je ne sais pas du tout par où commencer... quelqu'un pourrait t-il m'aiguiller?

    Merci !

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjour,
    Je pense que l'idée de base est de définir une grammaire qui te permette de créer un arbre a partir de tes formule.
    A partir de cette arbre tu pourra ensuite générer le code LISP.

    A tu le droit d'utiliser une librairie pour faire ça? (Si c'est un exercice je suppose que non...). boost::spirit peut peut-être t'aider, mais ne l'ayant jamais utilisé, je ne suis sur de rien.

    Pour rentrer plus dans les détail, l'idée c'est que tes opérateurs deviennes des nœud de ton arbre, et les variables et valeurs numériques deviennent des feuilles. Bien sur il faut traiter les instruction entre parenthèse en premier, et respecter la priorité des opérateurs mathématique.

    Par exemple:
    X + (Z – Y)

    Devient:
    ...+
    ./...\
    X.....-
    ...../...\
    ....Z.....Y

    Après il n'y a plus qu'a faire l'opération inverse pour reconstruire l'équivalent en LISP. Je pense que pour cette étape il vaux mieux mètre un maximum de parenthèse, pour de pas avoir a s'inquiéter de la priorité des opérateur en LISP.(Mais on as peut être pas le choix? J'ai jamais codé en LISP...)

    Voila, j'espère que ça te mettra un peu sur la voie.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Je ne sais pas du tout par où commencer...
    Par le lexer. Ensuite tu fais le parser, puis tu affiches ton arbre.
    C'est simple comme bonjour.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    Merci à vous deux.

    Il n'est écrit nulle part que je ne dois pas utiliser de librairie, donc je regarderai du côté de boost::spirit.

    Je vous tiendrai au courant.

    Merci

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Citation Envoyé par z980x Voir le message
    Merci à vous deux.

    Il n'est écrit nulle part que je ne dois pas utiliser de librairie, donc je regarderai du côté de boost::spirit.

    Je vous tiendrai au courant.

    Merci
    à mon avis ton prof veux vérifier ton algo d'arbre, pas l'utilisation d'une lib de boost.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    On t'a pas plutôt appris à utiliser lex/yacc en cours ?

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    Citation Envoyé par loufoque Voir le message
    On t'a pas plutôt appris à utiliser lex/yacc en cours ?
    Euh non... Qu'est ce que c'est?

    Sinon, pour l'utilisation de la librairie, le prof s'en fout à mon avis... Je fais mes études aux Etats-Unis, et ici, à partir du moment que le programme fonctionne, c'est bon... Pas besoin de regarder le code...
    Au semestre précédent, j'étais dans un groupe de projet, nous avions ce prof... Juste avant la présentation au prof, un truc merdait... les mecs de mon groupe (des américains), ont codé tout en dur, juste pour la démo.
    Ca a marché, le prof n'y a vu que du feu, on a eu un A.

    Alors je sais, c'est pas bien, mais c'est pour dire que je peux utiliser des librairies externes.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Soe,
    Citation Envoyé par z980x Voir le message
    Ca a marché, le prof n'y a vu que du feu, on a eu un A.
    Ne crois pas ça. C'est seulement dû au laxisme.

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    Citation Envoyé par droggo Voir le message
    Soe,

    Ne crois pas ça. C'est seulement dû au laxisme.
    Loin de moi l'idée de vouloir généraliser, mais aux Etats-Unis, avec tous les profs que j'ai eu, ils se foutent complètement de "How?" du moment que ça marche.
    C'est affolant... Ca peut être codé avec les pieds, du moment que ça marche, c'est bon.

    Sérieusement, pour le projet dont je parlais précédemment, on aurait rendu ça au prof, il nous aurait rit au nez...
    Enfin... C'est une autre mentalité quoi...


    En ce qui concerne le projet, je vais regarder flex... J'ai jamais essayé, ça s'annonce chaud, et encore plus avec Windows...

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Vai,
    Citation Envoyé par z980x Voir le message
    Loin de moi l'idée de vouloir généraliser, mais aux Etats-Unis, avec tous les profs que j'ai eu, ils se foutent complètement de "How?" du moment que ça marche.
    C'est bien ce que je disais, c'est dû au laxisme.

    Et ça ne permet absolument pas d'affirmer que "le prof n'y a vu que du feu".

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Utilise les outils qu'on t'a enseignés.
    Sinon Boost.Spirit c'est mieux moi je trouve, mais bon, c'est autre chose.

  12. #12
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Utilise les outils qu'on t'a enseignés.
    ++.
    L'objectif premier est de comprendre aussi ce que tu fais et ce qu'on t'a enseigné. Ensuite, que ça marche, ce sera impératif quand tu seras dans un environnement pro ! Mais t'arriveras d'autant plus à faire quelque chose qui marche que tu maîtrise les différents éléments que ça met en œuvre.

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    J'ai cours dans moins d'une demi heure maintenant, je n'ai toujours pas commencé car je ne sais pas ce que le prof autorise...
    J'ai regardé un peu LEX/YACC, mais je ne sais pas si on a le droit. (Je vais lui demander tout à l'heure.)

    Et puis pour faire fonctionner lex/yacc sous Windows, euh... ça s'annonce chaud... (Je travaille avec Eclipse)

    Avez vous de bons tutos pour une utilisation sous Windows?

  14. #14
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    Ah oui, et... euh... Les outils qu'on m'a enseigné... Bah... Je suis désolé de vous décevoir, mais on m'a rien enseigné parce c'est la deuxième heure de cours qu'on a avec lui...

  15. #15
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    Réponse du prof:

    Obliger d'utiliser le C/C++
    Interdiction de toute librairie externe
    Interdiction d'utiliser LEX/YACC

    "You have to write it from scratch !"

    Comment faire alors??? Existe t-il des codes ressemblants à ce que je veux faire? (J'ai cherché, j'en ai trouvé quelques un, mais il y a encore bcp de boulot.)

    (Oui, j'ai la flemme de le faire en fait...)

  16. #16
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Heo,
    Citation Envoyé par z980x Voir le message
    Réponse du prof:

    Obliger d'utiliser le C/C++
    Interdiction de toute librairie externe
    Interdiction d'utiliser LEX/YACC

    "You have to write it from scratch !"

    Comment faire alors??? Existe t-il des codes ressemblants à ce que je veux faire? (J'ai cherché, j'en ai trouvé quelques un, mais il y a encore bcp de boulot.)

    (Oui, j'ai la flemme de le faire en fait...)
    Et comme personne n'est ici pour faire TON travail ...

    Et si c'est vraiment la première heure de cours avec ce prof, c'est que vous avez eu d'autres cours, et qu'il estime que avez le bagage nécessaire pour résoudre cet exercice.

    Conclusion : au boulot.

  17. #17
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 472
    Par défaut
    Citation Envoyé par z980x Voir le message
    Obliger d'utiliser le C/C++
    Interdiction de toute librairie externe
    Interdiction d'utiliser LEX/YACC

    Comment faire alors??? Existe t-il des codes ressemblants à ce que je veux faire? (J'ai cherché, j'en ai trouvé quelques un, mais il y a encore bcp de boulot.)
    Faire un lexer-parser en C++ from scratch après deux heures de cours, c'est pas impossible mais c'est violent quand même. Il y avait déjà eu un thread à ce sujet, je crois. C'est vrai que c'est très motivant une fois que l'on a compris et que, de là, ça paraît simple, mais il faut quand même un temps pour assimiler le tout quand on débute complètement.

    Si tu ne vois pas comment t'y prendre de prime abord et que tu ne connais pas Lex & Yacc, il y a des chances pour que tu n'aies pas étudié les langages formels. Cherche de ce côté pour en voir les fondamentaux. La calculatrice quatre opérations + parenthèses avec priorité des opérateurs est un exercice assez répandu quand on fait ses premiers pas avec ces outils. C'est un peu le « hello world » de Lex & Yacc.

    En l'occurence, l'exercice en question est une variante mais qui s'aborde exactement de la même façon : il faut être capable de lire une expression et d'en reconnaître les termes. Une fois qu'ils sont identifiés et isolés, il est très facile de réécrire l'expression selon une autre syntaxe, ici celle du LISP.

    Jette un oeil du côté de la BNF déjà ...

  18. #18
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    Citation Envoyé par droggo Voir le message
    Heo,


    Et comme personne n'est ici pour faire TON travail ...

    Et si c'est vraiment la première heure de cours avec ce prof, c'est que vous avez eu d'autres cours, et qu'il estime que avez le bagage nécessaire pour résoudre cet exercice.

    Conclusion : au boulot.
    Oui, c'est clair, c'est à moi de le faire, mais bon... C'est vachement démoralisant de balancer ça dans la tête des étudiants directement...

    Va falloir que je m'y mette quand même !

  19. #19
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Et c'est pire en environnement pro quand l'entreprise néglige d'investir dans ses employés en ignorant la formation (continue ou occasionnel).
    Les clients envoient des données en sql, en xml, en pdf, en doc, en xls, en scan (oui, des scan papier), à toi de te démerder pour en extraire le contenu, l'indéxer, etc.
    T'es pas sorti de l'auberge, mais le monde de developez.com sera toujours là pour te soutenir

  20. #20
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    En même temps c'est pas comme si la grammaire était compliquée...

Discussions similaires

  1. comment faire pour qu'une application soit toujours visible ?
    Par goldbar dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/03/2004, 14h35
  2. Réponses: 7
    Dernier message: 13/12/2003, 14h09
  3. comment faire pour developper des prog en win32
    Par rhodan51 dans le forum Autres éditeurs
    Réponses: 11
    Dernier message: 09/11/2003, 19h39
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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