FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Montant en toutes lettres Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Montant en toutes lettres Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Montant en toutes lettres Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Montant en toutes lettres Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Montant en toutes lettres Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Montant en toutes lettres Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Montant en toutes lettres Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Montant en toutes lettres Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Montant en toutes lettres Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Montant en toutes lettres Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Montant en toutes lettres Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Montant en toutes lettres Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Montant en toutes lettres Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Montant en toutes lettres Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Montant en toutes lettres Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-28%
Le deal à ne pas rater :
Précommande : Smartphone Google Pixel 8a 5G Double Sim 128Go ...
389 € 539 €
Voir le deal

 

 Montant en toutes lettres

Aller en bas 
3 participants
AuteurMessage
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Montant en toutes lettres Empty
MessageSujet: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 2:34

Salut tout le monde !

Voici un sous programme qui peut être utile pour certains.
Il s’agit de transformer un montant en chiffres en un montant en lettres tout en respectant la langue française, SVP !
* Le trait d’union dans 17 (DIX-SEPT) etc.
* Le ET dans 21 (VINGT ET UN) etc.
* Le S dans 80 (QUATRE-VINGTS), mais il n’y a pas d’S dans 81 (QUATRE-VINGT-UN)
* CENT prend S au pluriel quand il n’est pas suivi d’autres valeurs, comme 400 (QUATRE CENTS), mais 410 (QUATRE CENT DIX) ne prend pas d’S
* MILLE est toujours invariable (MILLE, DEUX MILLE, TROIS MILLE etc.)
* MILLION prend un S au pluriel
* On dit UN MILLION, mais on ne dit pas UN CENT ou UN MILLE
Toutes ces subtilités sont prises en charge dans le programme.
Le programme traite les nombres :
De 0.01 (UN CENTIME)
Jusqu’à 999999999.99
NEUF CENT QUATRE-VINGT-DIX-NEUF MILLIONS NEUF CENT QUATRE-VINGT-DIX-NEUF MILLE NEUF CENT QUATRE-VINGT-DIX-NEUF EUROS ET QUATRE-VINGT-DIX-NEUF CENTIMES.
Ce sous programme peut être intégré dans un programme plus important où il est question d'imprimer un montant en toutes lettres (par exemple une facture ...)


Code:

' ******************************************************************************
'
'                  Montant en toutes lettres
'
'                        Par Papydall
'
' ******************************************************************************

' Ecriture en toutes lettres d'un montant
' de (0.01) --> un centime
' à (999999999.99) -->
' NEUF CENT QUATRE-VINGT-DIX-NEUF MILLIONS NEUF CENT QUATRE-VINGT-DIX-NEUF MILLE
' NEUF CENT QUATRE-VINGT-DIX-NEUF EUROS ET QUATRE-VINGT-DIX-NEUF CENTIMES
'
' ******************************************************************************
dim montant,kk$,ss$,xx$,zz$,dp,cc$,rr$,tt$,cc,uu,dd,du
dim dd$(8),uu$(19),i

label ChiffresLettres,TroisChiffresLettres

width 0 ,1100

' **** Pour verifier l'algorithme

input "  Entrez le montant en chiffres  de 0.01 à 999999999.99 : "; montant
gosub ChiffresLettres
 kk$ = "****" + kk$ + "****"
 print : print kk$
end

ChiffresLettres:
' ******************************************************************************
' Initialisation des tables
' *** UU$() --> Table des unités: Pour faciliter les traitements,les valeurs 1
'    à 19 sont groupées comme "unités" !
' *** DD$() --> Table des dizaines : 70 et 90 sont traités à part

for i = 1 to 19 : read uu$(i) : next i

data "UN","DEUX","TROIS","QUATRE","CINQ","SIX","SEPT","HUIT","NEUF","DIX","ONZE"
data "DOUZE","TREIZE","QUATORZE","QUINZE","SEIZE","DIX-SEPT","DIX-HUIT"
data "DIX-NEUF"

dd$(2) = "VINGT" : dd$(3) = "TRENTE" : dd$(4) = "QUARANTE"
dd$(5) = "CINQUANTE" : dd$(6) = "SOIXANTE" : dd$(8) = "QUATRE-VINGT"

' **** Recherche de la position du point décimal dans le montant

xx$ = "" : dp = 0 : ss$ = str$(montant)
for i = 1 to len(ss$)
  if mid$(ss$,i,1) = "." then dp = i : exit_for
next i

' **** Traitement

if dp <> 0
  zz$ = mid$(ss$,1,dp-1) : tt$ = mid$(ss$,dp+1,3)
  else : zz$ = ss$ : tt$ = "000"
 end_if

while len(zz$) < 9 : zz$ = "0" + zz$ : end_while

' **** Tranche des millions

cc$ = mid$(zz$,1,3)
if cc$ = "001"
  xx$ = "UN MILLION"
  else
  if cc$ <> "000" then gosub TroisChiffresLettres : xx$ = rr$ + " MILLIONS"
end_if

' **** Tranche des mille

cc$ = mid$(zz$,4,3)

if cc$ <> "000"
  gosub TroisChiffresLettres
  if rr$ = " UN" then rr$ = ""
  xx$ = xx$ + rr$ + " MILLE"
end_if

' **** Tranche des centaines

cc$ = mid$(zz$,7,3)
if (val(zz$) <> 0) and (zz$ <> "000000001")
  gosub TroisChiffresLettres
  if (xx$ = "UN MILLION" or right$(xx$,8)="MILLIONS")and rr$ = "" then rr$="D'"
  xx$ = xx$ + "  " + rr$ + " EUROS"
end_if
if zz$ = "000000001" then xx$ = "UN EURO"
if (val(zz$) = 0) and (val(tt$) = 1) then xx$ = "UN CENTIME"
if val(tt$) <> 0
  cc$ = tt$
  if len(cc$) = 1 then cc$ = "0" + cc$ +"0"
  if len(cc$) = 2 then cc$ = "0" + cc$
  if not(val(zz$) = 0 and val(cc$) = 1) then gosub TroisChiffresLettres
  if (val(zz$) = 0) and (val(cc$) > 1)
      xx$ = rr$ + " CENTIMES" : gosub TroisChiffresLettres
  else
      if rr$ <> "" then xx$ = xx$ + " ET " + rr$ + " CENTIMES"
      if rr$ = "1" then xx$ = xx$ + " ET " + rr$ + " CENTIME"
  end_if
end_if

' *** Enlever les espaces superflus de la chaine contenant le montant

kk$ = ""
for i = 1 to len(xx$)-1
if not((mid$(xx$,i,1) = " ")and((mid$(xx$,i+1,1) = " ")or(mid$(xx$,i+1,1)="-")))
  kk$ = kk$ + mid$(xx$,i,1)
end_if
next i
if mid$(xx$,len(xx$),1) <> " " then kk$ = kk$ + mid$(xx$,len(xx$),1)
if mid$(xx$,1,1) = " " then kk$ = mid$(kk$,2,len(kk$))
return

' *** Codage d'un nombre de 3 chiffres  en lettres
TroisChiffresLettres:
rr$ = ""
cc = val(mid$(cc$,1,1)) : dd = val(mid$(cc$,2,1))
uu = val(mid$(cc$,3,1)) : du = val(mid$(cc$,2,2))

if cc = 1 then rr$ = rr$ + " CENT"
if (cc > 1) and (du = 0)then rr$ = rr$ + " " + uu$(cc) + " CENTS"
if (cc > 1) and (du <> 0) then rr$ = rr$ + " " + uu$(cc) + " CENT"
if du = 0 then return
if (0 < du) and (du < 20) then rr$ = rr$ + " " + uu$(du) : return
if ((69 < du) and (du < 80)) or ((89 < du) and (du < 100))
  rr$ = rr$ + " " + dd$(dd-1) + "-" + uu$(10+uu) : return
end_if
rr$ = rr$ + " " + dd$(dd)
if (uu = 0) and (dd = 8) then rr$ = rr$ + "S"
if uu = 0 then return
if (uu = 1) and (( dd = 2) or (dd = 3) or (dd = 4) or(dd = 5) or (dd = 6))
  rr$ rr$ + " ET " + uu$(uu) : return
end_if
if (uu > 1) and (dd = 0) then rr$ = rr$ + " " + uu$(uu) : return
rr$ = rr$ + "-" + uu$(uu)
return
' ****** Fin *****

PS : Je ne peux pas aller plus loin dans la limite supérieure du montant : ma fortune actuelle ne dépasse pas ce plafond, hélas !
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 7:23

bonjour papydall, Smile
Très interressant ton petit sous programme et surtout très utile. Je le met de coté car il pourrait bien me servir un jour!
Si tu tapes directement entrée ou une lettre ton programme plante; tu aurais du utiliser d'autres instructions à la place de input comme message input ou alors tester ce qui est entré au clavier avec l'instruction numeric(v$). Mais bon, c'est un détail, le principal c'est que c'est un programme utile que chacun peut modifier comme il l'entend pour ses propres besoins.
A bientôt Wink
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 10:36

Beau programme papydall. C'est clair que l'on peut faire quelques petits contrôle d'erreur de saisie ou de manipulation (comme vérifier que si la chaine saisie n'est pas "0", "00","0.0"; "0.00"; "0,0" ou "0,00" la valeur de la chaine saisie est diférente à 0 par exemple)
On peut faire un check du point ou de la virgule aussi comme séparateur
En testant s'il y a plusieurs points ou plusieurs virgules, en éviterait les confusions pour nos amis anglophones qui l'utilisent comme séparateur de millier, mais bon, l'énnoncé est clair, ils peuvent aussi faire attention.
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 10:46

Bonjour Bignono,
Bonjour Jicehel,
Bonjour tout le monde !
Ce que vous dites est certainement vrai !
L’INPUT ne sert qu’à vérifier le programme. Chacun peut l’adapter à sa guise.
En fait, dans mon intention, le « montant » sera fourni par le programme qui l’utilisera. Donc, le montant, serait calculé et vérifié avant d’utiliser le sous programme.
A+

PS :

Le français n’est pas ma langue maternelle, mais j’essaye toujours de m’exprimer avec le moins de fautes possible.

Pour une utilisation fiable, il faut vérifier ce sous programme avec différentes valeurs et voir s'il n'y a pas des petites incorrections. Moi-même, je ne l’ai vérifié que sommairement. Mais je pense que c'est correct!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 13:21

Une petite correction, en principe on écrit cinq millions d'euros (sans espace entre l'apostrophe et euros)
Il faudrait donc modifier le bout de code du test par:
Code:

  if (xx$ = "UN MILLION" or right$(xx$,8)="MILLIONS")and rr$ = ""
      xx$=xx$+" D'EUROS"
  else
      xx$ = xx$ + "  " + rr$ + " EUROS"
  end_if
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres EmptyMer 11 Avr 2012 - 16:18

OK Jicehel!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Montant en toutes lettres Empty
MessageSujet: Re: Montant en toutes lettres   Montant en toutes lettres Empty

Revenir en haut Aller en bas
 
Montant en toutes lettres
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Afficher un nombre en toutes lettres
» question de math et de lettres.
» Traduire des nombres en lettres.
» Traduction des nombres en lettres.
» exportation de fichiers texte et lettres accentuées

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: