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 :

Conversion d'un nombre en lettre


Sujet :

C

  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    45
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 45
    Par défaut Conversion d'un nombre en lettre
    Bonjour,
    y'a t-il quelqu'un qui connaisse l'idée de conversion d'un chiffre écrite en toute lettre en une nombre
    j'ai une methode mais je pense pas qu'elle est valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /*par exemple convertir "mille cent trois"*/
    //t=mille cent trois 
    for (i=0;i<strlen(t);i++)
    if (t[i]=' ')
    mot[i]=t[i]
    /*la stratégie consiste a détecter l'espace*/

    si quelqu'un a une idée s.v.p veuillez répondre et merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Commence par nous montrer ton code en entier.

    Citation Envoyé par waldomania Voir le message
    j'ai une methode mais je pense pas qu'elle est valide
    Tu penses ou bien tu en en sûr ?
    As-tu testé ton code ?

    Y-a-t-il des messages d'erreurs ?
    Les résultats sont-ils différents de ceux espérés ?

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    45
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 45
    Par défaut
    non ça pas marché

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par waldomania Voir le message
    non ça pas marché
    Pourrais-tu être plus précis ?

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    45
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 45
    Par défaut
    ok mon objectif est de séparer ou plutôt couper la chaine par espace, j'ai découvert maintenant qu'il y'a en c une fonction strtok mais j'ai pas compris comment l'utiliser

  6. #6
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Tiré de la page de man :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(void) {
    	char test[80], blah[80];
    	char *sep = "\\/:;=-";
    	char *word, *phrase, *brkt, *brkb;
     
    	strcpy(test, "This;is.a:test:of=the/string\\tokenizer-function.");
     
    	for (word = strtok_r(test, sep, &brkt);
    		 word;
    		 word = strtok_r(NULL, sep, &brkt))
    	{
    		strcpy(blah, "blah:blat:blab:blag");
     
    		for (phrase = strtok_r(blah, sep, &brkb);
    			 phrase;
    			 phrase = strtok_r(NULL, sep, &brkb))
    		{
    			printf("So far we're at %s:%s\n", word, phrase);
    		}
    	}
    	return EXIT_SUCCESS;
    }
    Ils mettent aussi :

    évitez au maximum d'utiliser cette fonction.
    http://www.linux-kheops.com/doc/man/.../strtok.3.html

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    45
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 45
    Par défaut
    Bonjour,

    j'ai arrivé a séparer une chaine de caractère mais je suis coincé comment affecter 1er chaine séparé (ici cent à 100 puis quatre-vingt à 80 etc...) à une case d'une tableau.
    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
     
    #include <stdio.h>
    #include <string.h>
     
    int main ()
    {
      char str[] ="cent quatre-vignt cinq ";
      char *p;
     
     
     
      p = strtok (str," ");
     
      while (p != NULL)
      {
        printf (" %s\n", p);
        p = strtok (NULL, " ");
      }
      return 0;
    }

  8. #8
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    En fait ton problème n'est pas trop le découpage (car maintenant c'est bon) mais plutôt la conversion d'un nombre écrit en toute lettre en sa correspondance chiffrée (ex : mille -> 1000).
    Là franchement, il n'y a pas de fonction C qui permet de faire cela. La solution serait de créer toi même les correspondances dans un tableau puis d'aller comparer ton mot pour en tirer le bon nombre.

    Mais bon, je doute fort que tu veuilles te taper à créer manuellement un tableau de ce type, surtout si tu veux gérer des grands nombres...

  9. #9
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    45
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 45
    Par défaut
    j'ai une idée de couper la chaine de caractere mais je suis coincé...le probleme conciste a retouner le compteur i directement apres l'espace

    voila le programme :

    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
    #include <conio.h>
    #include <stdio.h>
    #include <string.h>
     
    void main ()
    {
        char t[300] ="cent quatre-vignt cinq";
        char mot[50], mot2[50];
        int i;
     
      printf("%s\n",t);
     
      for(i=0;i<strlen(t);i++)
      {
       if(t[i]!=' ')
       mot[i]=t[i];  
      }     
      for(i=strlen(mot)+1;i<strlen(t);i++)
       {
        if(t[i]!=' ')
         mot2[i]=t[i];
         }   // end du 2eme for 
     
     printf("%s\n", mot);
     
     printf("%s\n",mot2);
     
    }   // end main

  10. #10
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    45
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 45
    Par défaut Ecrire un nombre en lettres
    Bonjour, j'ai trouvé ce programme :

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    #include <iostream.h>
     #include <stdlib.h>
     #include <string.h>
     #include <conio.h>
     
     /*
     La valeur de chiffre ne doit pas dépasser la plage de valeur
     pour unsigned int càd 4 294 967 295 , sinon il y a erreur de
     conversion !!!
     */
     
     void ChiffreEnLettre(unsigned int, char*);
     int main()
     {
     unsigned int x = 0;
     char choix = 'o',c[256];
     while((choix=='o')||(choix=='O'))
     {
     cout << "Introduire un chiffre entier : ";
     cin >> x;
     ChiffreEnLettre(x,c);
     cout << "\nEn lettre ca fait : "<< c <<endl;
     cout << "\nEncore d'autre? (O/N): ";
     choix = getche();
     cout << "\n==================================================="<<endl;
     }
     return 0;
     }
     
     void ChiffreEnLettre(unsigned int chiffre, char * lettre)
     {
     unsigned int centaine, dizaine, unite, reste, y;
     bool dix = false;
     strcpy(lettre, "");
     reste = chiffre;
     for(int i=1000000000; i>=1; i/=1000)
     {
     y = reste/i;
     cout << y  << endl;
     if(y!=0)
     {
     centaine = y/100;
     cout << centaine << endl;
     dizaine = (y - centaine*100)/10;
     cout << dizaine << endl; 
     unite = y-(centaine*100)-(dizaine*10);
     cout << unite << endl;
     switch(centaine)
     {
     case 0:
     break;
     case 1:
     strcat(lettre,"cent ");
     break;
     case 2:
     if((dizaine == 0)&&(unite == 0)) strcat(lettre,"deux cents ");
     else strcat(lettre,"deux cent ");
     break;
     case 3:
     if((dizaine == 0)&&(unite == 0)) strcat(lettre,"trois cents ");
     else strcat(lettre,"trois cent ");
     break;
     case 4:
     if((dizaine == 0)&&(unite == 0)) strcat(lettre,"quatre cents ");
     else strcat(lettre,"quatre cent ");
     break;
     case 5:
     if((dizaine == 0)&&(unite == 0)) strcat(lettre,"cinq cents ");
     else strcat(lettre,"cinq cent ");
     break;
     case 6:
     if((dizaine == 0)&&(unite == 0)) strcat(lettre,"six cents ");
     else strcat(lettre,"six cent ");
     break;
     case 7:
     if((dizaine == 0)&&(unite == 0)) strcat(lettre,"sept cents ");
     else strcat(lettre,"sept cent ");
     break;
     case 8:
     if((dizaine == 0)&&(unite == 0)) strcat(lettre,"huit cents ");
     else strcat(lettre,"huit cent ");
     break;
     case 9:
     if((dizaine == 0)&&(unite == 0)) strcat(lettre,"neuf cents ");
     else strcat(lettre,"neuf cent ");
     }// endSwitch(centaine)
     
     switch(dizaine)
     {
     case 0:
     break;
     case 1:
     dix = true;
     break;
     case 2:
     strcat(lettre,"vingt ");
     break;
     case 3:
     strcat(lettre,"trente ");
     break;
     case 4:
     strcat(lettre,"quarante ");
     break;
     case 5:
     strcat(lettre,"cinquante ");
     break;
     case 6:
     strcat(lettre,"soixante ");
     break;
     case 7:
     dix = true;
     strcat(lettre,"soixante ");
     break;
     case 8:
     strcat(lettre,"quatre-vingt ");
     break;
     case 9:
     dix = true;
     strcat(lettre,"quatre-vingt ");
     } // endSwitch(dizaine)
     
     switch(unite)
     {
     case 0:
     if(dix) strcat(lettre,"dix ");
     break;
     case 1:
     if(dix) strcat(lettre,"onze ");
     else strcat(lettre,"un ");
     break;
     case 2:
     if(dix) strcat(lettre,"douze ");
     else strcat(lettre,"deux ");
     break;
     case 3:
     if(dix) strcat(lettre,"treize ");
     else strcat(lettre,"trois ");
     break;
     case 4:
     if(dix) strcat(lettre,"quatorze ");
     else strcat(lettre,"quatre ");
     break;
     case 5:
     if(dix) strcat(lettre,"quinze ");
     else strcat(lettre,"cinq ");
     break;
     case 6:
     if(dix) strcat(lettre,"seize ");
     else strcat(lettre,"six ");
     break;
     case 7:
     if(dix) strcat(lettre,"dix-sept ");
     else strcat(lettre,"sept ");
     break;
     case 8:
     if(dix) strcat(lettre,"dix-huit ");
     else strcat(lettre,"huit ");
     break;
     case 9:
     if(dix) strcat(lettre,"dix-neuf ");
     else strcat(lettre,"neuf ");
     } // endSwitch(unite)
     
     switch (i)
     {
     case 1000000000:
     if(y>1) strcat(lettre,"milliards ");
     else strcat(lettre,"milliard ");
     break;
     case 1000000:
     if(y>1) strcat(lettre,"millions ");
     else strcat(lettre,"million ");
     break;
     case 1000:
     strcat(lettre,"mille ");
     }
     } // end if(y!=0)
     reste -= y*i;
     dix = false;
     } // end for
     if(strlen(lettre)==0) strcpy(lettre,"zero");
     }
    le probleme est comment ont a fait pour convertir ? vraiment j'ai cassé la tete tout la nuit pour comrendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=1000000000; i>=1; i/=1000)
     {
     y = reste/i;
    et ces ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    centaine = y/100;
     cout << centaine << endl;
     dizaine = (y - centaine*100)/10;
     cout << dizaine << endl; 
     unite = y-(centaine*100)-(dizaine*10);
     cout << unite << endl;
    j'ai fait des cout por mieux comprendre
    merci d'avance

  11. #11
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Déjà il ne faut pas confondre chiffre et nombre. Les chiffres sont des symboles graphiques utilisés pour représenter des nombres. Dans le système décimal, il existe dix chiffres : 0, 1, ... 9. Nous les utilisons pour représenter des nombres comme "quinze" (qu'on écrit 15), "huit" (qu'on écrit 8), etc.

    En ce qui concerne l'écriture d'un nombre en lettres, supposons par exemple qu'on veut écrire un nombre x compris entre 0 et 999 en lettres. Il suffit de faire :
    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
     
    1. Calcul des centaines
    c = x / 100
     
    2. Retirons les centaines
    x = x - (c * 100)
     
    3. Calcul des dizaines
    d = x / 10
     
    4. Retirons les dizaines
    x = x - (d * 10)
     
    5. Il ne nous reste plus que les unités
    u = x
    Connaissant les centaines (c), les dizaines (d) et les unités (u), on passer aisément à l'écriture en lettres. Pour avoir un programme plus souple, on fait la décomposition et la traduction à l'intérieur d'une boucle.

    Le programme ci-dessus est un mélange affreux de C non portable et de C++ obsolète. Les cours de C, c'est par ici.

+ 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. [Turbo Pascal] Conversion d'un nombre en lettres
    Par rolain dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 20/05/2015, 12h43
  3. [VB.NET]Conversion nombre en lettre
    Par kinganasius dans le forum Windows Forms
    Réponses: 6
    Dernier message: 30/05/2012, 15h51
  4. T-SQL - Conversion d'un nombre en lettres
    Par laurep dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/02/2008, 12h32
  5. Réponses: 3
    Dernier message: 26/09/2006, 11h33

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