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

Algorithmes et structures de données Discussion :

nombre: de lettres aux chiffres


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Par défaut nombre: de lettres aux chiffres
    salut
    voila je doi creer une fonction qui reçoi en parametre une chaine de caracteres
    (un nombre ecrit en lettres) et qui doit retourner un entier (le nombre equivalent) g deja fai la fonction qui fai linverse.
    mai la javou k je suis depassé.
    mon probleme est surtt algorithmique
    comment aborder cela?
    connaissez vous des exemples des referencdes ou des liens parlant du sujet?
    avez vous une idées qui peu m'etre utile?


    merci pour votre pressieuse aide

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nsanabi
    voila je doi creer une fonction qui reçoi en parametre une chaine de caracteres
    (un nombre ecrit en lettres) et qui doit retourner un entier
    Quel est le format d'entrée ?

    "123" ou "Cent vingt trois" ?

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Par défaut
    non avec "123" c facil.
    le format d'entré est "deux cents cinqaunte huit" par exemple
    sans atteindre le million.
    je sai k je peu utiliser cent et mille comme une sorte d'operateur
    dans "trois cents mille" par ex je multipli 3 par cent puis par mille

    mai je sai pa. ça reste tres vague dans ma tete

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nsanabi
    non avec "123" c facil.
    le format d'entré est "deux cents cinqaunte huit" par exemple
    sans atteindre le million.
    je sai k je peu utiliser cent et mille comme une sorte d'operateur
    dans "trois cents mille" par ex je multipli 3 par cent puis par mille

    mai je sai pa. ça reste tres vague dans ma tete
    Il faut donc faire un analyseur syntaxique qui sait reconnaitre les mots dans un certain ordre et déterminer le chiffre et le coefficient multiplicateur correspondant... C'est assez complexe, mais c'est faisable.

    Bien sûr, il doit savoir signaler ce genre d'erreur : 'cinqaunte'

    Quand tu dis 'sans atteindre le million, tu veux dire des nombres entiers de 0 à 999999 ? Ca va être chaud, surtout que les règles de grammaire sont assez compliquées. Est-ce qu'il faut être rigoureux là dessus, ou est-ce qu'on tolère certaines erreurs 'du moment que c'est sans ambiguité'...

    As-tu étudié les automates finis et les outils comme lex et yacc ?

    C'est un projet scolaire, professionnel ? quel délai ?

  5. #5
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Il faut donc faire un analyseur syntaxique qui sait reonnaitre les mots dans un certain ordre et déterminer le chiffre et le coefficient multiplicateur correspondand... C'est assez complexe, mais c'est faisable.
    Complexe, pas forcément, il faut seulement faire attention aux cas particuliers : trente et un.

    Il faudrait découper l'analyse en deux passes (classiquement) : analyse lexicale puis syntaxique.

    Pour la lexicale, le tout est de reconnaitre les tokens (tous les nombres et autres subtilités).

    Ensuite, pour analyser tes nombres, le tout est de produire une grammaire adequate.

    Comme l'a suggéré Emmanuel, si tu as accès à un couple du genre flex/bison ou lex/yacc, ça peut être faisable rapidement.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    si on admet quelques fautes d'orthographes, la syntaxe admise ressemblerait à :
    • <chiffre2à9>='deux'|...|'neuf'
    • <chiffre2à9ourien>=''|<chiffre2à9>
    • <Basic1à100>='un'|'deux'|...|'quatrevingt dixneuf'
    • <UnitéCentaines>='cent'|'cents'
    • <UnitéMilliers>='mille'
    • <nombre0à999>=<basic1à00>|<chiffre2à9ourien><Unitécentaines>|<chiffre2à9ourien><Unitécentaines><Basic1a100>
    • <nombre0à999ourien>=''|<nombre0à999>
    • <nombre0à999999>=<nombre0à999>|<nombre0à999ourien><UnitéMilliers><nombre0à999ourien>

    Pour faire simple sans passer par l'analyse de la syntaxe formelle , on pourra faire les sous-programmes suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TraiteNombre0à100(s:string,valeur_chaine_vide:integer) ==> int;
    Trt_chaine_Milliers(s:string)==>s1,s2 : string ; coeffM : int (1000 ou 0) 
             si pas de mention de milliers : s1='' et coeffM=0 ;
    Trt_chaine_Centaines(s:string)==>s1,s2 : string ;CoeffC : int (0 or 100), 
              si pas de mention de centaines : s1='' et coeffC=0 ;
    Le code du Traitement global sera qqchose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Trt_ChaineMilliers(s,sA,sB,coeffM) ;
    Trt_Chainecentaines(sA,sA1,sA2CoeffCA) ;
    Trt_Chainecentaines(sA,sB1,sB2,CoeffCB) ;
    result=coeffM*(coeffCA*traitenombre0à100(sA1,1)+traitenombre0à100(sA2,0))
           +(coeffCB*traitenombre0à100(sB1,1)+traitenombre0à100(sB2,0))

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

Discussions similaires

  1. Fonction de conversion de nombre en lettres
    Par david_chardonnet dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2021, 17h51
  2. Réponses: 6
    Dernier message: 24/12/2014, 20h45
  3. Réponses: 1
    Dernier message: 02/09/2014, 14h53
  4. écrire un nombre en lettre
    Par dibak dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 19/05/2004, 11h27
  5. Comment compter le nombre de lettre identique ?
    Par divableue dans le forum ASP
    Réponses: 3
    Dernier message: 07/11/2003, 15h01

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