papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Afficher un nombre en toutes lettres Lun 28 Jan 2013 - 4:51 | |
| Salut tout le monde. Le code suivant contient une procédure qui affiche un nombre entier en toutes lettres. Le nombre peut être négatif, positif ou nul et pouvant comporter jusqu’à 15 chiffres soit neuf cent quatre-vingt dix-neuf billions neuf cent quatre-vingt dix-neuf milliards neuf cent quatre-vingt dix-neuf millions neuf cent quatre-vingt dix-neuf mille neuf cent quatre-vingt dix-neuf ! L’appel de la SUB se fait en lui transmettant 2 paramètres : Le 1er c’est un nombre ou une variable contenant le nombre à transformer ; Le second est un caractère entre guillemets : "F" , "B" , ou "S" Si c’est "F" , le nombre sera écrit en Français de FRANCE (soixante-dix, quatre-vingts, quatre-vingt-dix) Si c’est "B", le nombre sera écrit en Français de BELGIQUE (septante, octante, nonante) Si c’est "S", le nombre sera écrit en Français de SUISSE (septante, huitante, nonante). - Code:
-
' ****************************************************************************** ' ' Ecriture d'un nombre entier en toutes lettres ' Nombre_En_Lettres.bas ' Par PAPYDALL ' ' ******************************************************************************
' Le nombre à convertir peut être positif ou négatif. ' Il est limité à 15 chiffres ce qui est très suffisant. ' La procédure Nombre_EN_Lettres(n,pays$) doit être appelée avec 2 parametres : ' Le 1er représente l'entier à convertir ' Le second est une chaîne de 1 seul caractère "F", "B" ou "S" ' "F" : le texte sera affiché en Français de FRANCE (soixante-dix, quatre-vingts,quatre-vingt-dix) ' "B" : le texte sera affiché en Français de BELGIQUE (septante, octante, nonante) ' "S" : le texte sera affiché en Français de SUISSE (septante, huitante, nonante)
' ****************************************************************************** label fin dim result$,n,err% top 0, 100 : left 0,100 : width 0,1200 : height 0,150 : color 0,0,0,0 alpha 1 : top 1,10 : left 1,10 : font_bold 1 : font_color 1,255,255,0 caption 0,"Ecriture d'un nombre en toutes lettres" button 2 : top 2,80 : left 2,500 : caption 2,"OK" : hide 2 : on_click 2,fin ' n = 123456789012345 n = 999999999999999 ' n = -1234 Nombre_En_Lettres(n,"F") if err% = 1 then terminate show 2 end ' ---------------------------------- fin: terminate ' ****************************************************************************** ' Formater un nombre en intercalant des espaces entres les différentes tranches ' de 3 chiffres SUB Format_Nombre(n) dim_local l%,temp$,n$ n$ = str$(n) : l% = len(n$) if l% < 4 then result$ = n$ : exit_sub result$ = " " while l% > 3 temp$ = right$(n$,3) : result$ = " " + temp$ + result$ n$ = left$(n$,l%-3) : l% = len(n$) end_while result$ = n$ + result$ END_SUB ' ****************************************************************************** ' La valeur absolue du nombre doit être <= 999 999 999 999 999 SUB Nombre_En_Lettres(n,pays$) dim_local unite$(19),dizaineF$(9),dizaineB$(9),dizaineS$(9),coefs$(7) dim_local temp$,c%,d%,u%,i%,neg%,coef%,format$ ' ---------------- initialisations des unités ---------------------------------- unite$(1) = "un" : unite$(2) = "deux" : unite$(3) = "trois" unite$(4) = "quatre" : unite$(5) = "cinq" : unite$(6) = "six" unite$(7) = "sept" : unite$(8) = "huit" : unite$(9) = "neuf" unite$(10) = "dix" : unite$(11) = "onze" : unite$(12) = "douze" unite$(13) = "treize" : unite$(14) = "quatorze" : unite$(15) = "quinze" unite$(16) = "seize" : unite$(17) = "dix-sept" : unite$(18) = "dix-huit" unite$(19) = "dix-neuf" ' ----------- initialisation des dizaines pour la FRANCE ----------------------- dizaineF$(1) = "" : dizaineF$(2) = "vingt" : dizaineF$(3) = "trente" dizaineF$(4) = "quarante" : dizaineF$(5) = "cinquante" dizaineF$(6) = "soixante" : dizaineF$(7) = "" dizaineF$(8) = "quatre-vingt" : dizaineF$(9) = "" ' ----------- initialisation des dizaines pour la BELGIQUE --------------------- dizaineB$(1) = "" : dizaineB$(2) = "vingt" : dizaineB$(3) = "trente" dizaineB$(4) = "quarante" : dizaineB$(5) = "cinquante" dizaineB$(6) = "soixante" : dizaineB$(7) = "septante" : dizaineB$(8) = "octante" dizaineB$(9) = "nonante" ' ----------- initialisation des dizaines pour la SUISSE ----------------------- dizaineS$(1) = "" : dizaineS$(2) = "vingt" : dizaineS$(3) = "trente" dizaineS$(4) = "quarante" : dizaineS$(5) = "cinquante" dizaineS$(6) = "soixante" : dizaineS$(7) = "septante" : dizaineS$(8) = "huitante" dizaineS$(9) = "nonante" ' --------------------- initialisation des coefficients ------------------------ coefs$(0) = "cent" : coefs$(1) = "mille" : coefs$(2) = "million" coefs$(3) = "milliard" : coefs$(4) = "billion" ' ------------------------------------------------------------------------------ result$ = "" Format_Nombre(n) : format$ = result$ : result$ = "" ' Cas particulier de zéro If n = 0 then result$ = " zéro" : caption 1,"0 = zéro" : exit_sub if abs(n) > 999999999999999 message "Nombre trop grand !"+chr$(13)+"Le nombre doit être <= 999999999999"+chr$(13)+"en valeur absolue" err% = 1 exit_sub end_if
' Mémorisation du signe if n < 0 then neg% = 1 : n = abs(n) : else : neg% = 0 ' if upper$(pays$) = "F" then caption 0,"Ecriture en Français de FRANCE" ' if upper$(pays$) = "B" then caption 0,"Ecriture en Français de BELGIQUE" ' if upper$(pays$) = "S" then caption 0,"Ecriture en Français de SUISSE" coef% = 0 Repeat ' Récupération de l'unité du bloc de trois chiffres en cours u% = mod(n,10) : n = int(n/10) ' Récupération de la dizaine du bloc de trois chiffres en cours d% = mod(n,10) : n = int(n/10) ' Traitement des dizaines temp$ = "" ' Passage sur la dizaine inférieure pour 10 à 19 ' et pour 70-79 90-99 dans le cas de la France
if (d% = 1) or ((d% = 7) or (d% = 9)) and (upper$(pays$) = "F") d% = d% - 1 : u% = u% + 10 end_if if d% > 1 If upper$(pays$) = "F" temp$ = " " + DizaineF$(d%) ' Ajout du cas particulier de 'et' entre la dizaine et 1 if (d% < 8) and ((u% = 1) or (u% = 11)) then temp$ = temp$ + " et" Else if upper$(pays$) = "B" then temp$ = " " + DizaineB$(d%): else : temp$ = " " + DizaineS$(d%) ' // Ajout du cas particulier de 'et' entre la dizaine et 1 if (u% = 1) then temp$ = temp$ + " et" End_if end_if ' ajout du texte de l'unité if u% > 0 then temp$ = temp$ + " " + unite$(u%) ' ajout du 's' à Quatre-vingt si rien ne suit If (result$ = "") and (d% = 8) and (u% = 0) and (upper$(pays$) = "F") then result$ = "s" result$ = temp$ + result$
' Récupération de la centaine du bloc de trois chiffres en cours c% = mod(n,10) : n = int(n /10) : ' Récupère centaine If c% > 0 temp$ = "" if c% > 1 then temp$ = " " + unite$(c%) + temp$ temp$ = temp$ + " " + coefs$(0) ' Traitement du cas particulier du 's' à cent si rien ne suit If (result$ = "") and (c% > 1) then result$ = "s" result$ = temp$ + result$ end_if
' Traitement du prochain groupe de 3 chiffres if n > 0 coef% = coef% + 1 i% = mod(n, 1000) If (i% > 1) and (coef% > 1) then result$ = "s" + result$ If i% > 0 then result$ = " " + coefs$(coef%) + result$ ' Traitement du cas particulier 'mille' ( non pas 'un mille' ) If (i% = 1) and (coef% = 1) then n = n - 1 end_if until n = 0 result$ = Trim$(result$)
' Ajout du signe en cas de besoin if neg% = 1 then result$ = "moins " + result$ caption 1, format$ + " =" + chr$(13)+chr$(13) + result$ End_sub ' ******************************************************************************
Dernière édition par papydall le Lun 28 Jan 2013 - 16:32, édité 1 fois (Raison : Ajout de SUB Format_Nombre(n)) | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Afficher un nombre en toutes lettres Lun 28 Jan 2013 - 16:33 | |
| Salut tout le monde.
J’ai édité mon programme, ci-haut pour lui ajouter une procédure SUB Format_Nombre(n). Cette procédure permet d’aérer l’affichage d’un nombre en intercalant des espaces entre les différentes tranches de 3 chiffres de ce nombre. Le résultat est une meilleure lisibilité d’un nombre comportant plusieurs chiffres.
| |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Afficher un nombre en toutes lettres Lun 28 Jan 2013 - 17:15 | |
| Ajouté dans ma librairie | |
|
bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Afficher un nombre en toutes lettres Lun 28 Jan 2013 - 19:33 | |
| Merci Papydall Ça sera certainement très utile. Mais tu avais déjà fait un programme comme cela je crois. Mais c'est vrai que ce sera plus pratique avec des procédures! A+ | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Afficher un nombre en toutes lettres Lun 28 Jan 2013 - 23:15 | |
| | |
|
Contenu sponsorisé
| Sujet: Re: Afficher un nombre en toutes lettres | |
| |
|