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
» Logiciel de planétarium.
Traduire des nombres en lettres. Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Traduire des nombres en lettres. Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Traduire des nombres en lettres. Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Traduire des nombres en lettres. Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Traduire des nombres en lettres. Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Traduire des nombres en lettres. Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Traduire des nombres en lettres. Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Traduire des nombres en lettres. Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Traduire des nombres en lettres. Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Traduire des nombres en lettres. Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Traduire des nombres en lettres. Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Traduire des nombres en lettres. Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Traduire des nombres en lettres. Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Traduire des nombres en lettres. Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Traduire des nombres en lettres. Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -28%
-28% Machine à café avec broyeur ...
Voir le deal
229.99 €

 

 Traduire des nombres en lettres.

Aller en bas 
2 participants
AuteurMessage
Pedro

Pedro


Nombre de messages : 1595
Date d'inscription : 19/01/2014

Traduire des nombres en lettres. Empty
MessageSujet: Traduire des nombres en lettres.   Traduire des nombres en lettres. EmptyLun 10 Nov 2014 - 10:32

Bonjour.

@Klaus.

Que penses-tu de ma sub ci-dessous ?

Code:
sub traduire_nombre_allemand_en_lettre(param1)

    dim_local nombre, nl$(20), c$, k%, x%, y

    nombre=param1

    c$="eins    zwei    drei    vier    fünf    sechs    sieben  acht    neun    zehn    elf      zwölf    "
    c$=c$+"dreizehn vierzehn fünfzehn sechzehn siebzehn achtzehn neunzehn "
    for k%=1 to 19
        nl$(k%)=trim$(mid$(c$,k%*9-8,8))
    next k%

    a$=""

    if param1>999
      x%=int(param1/1000)
      if x%>0 then a$=a$+nl$(x%)
      a$=a$+"tausend"
      param1=param1-x%*1000
    end_if

    if param1>99
      x%=int(param1/100)
      a$=a$+nl$(x%)+"hundert"
      param1=param1-x%*100
    end_if

    if param1>19
      y=int(param1/10)

      b$=""
      ' Pas de select: bug.
      if y=2 then b$="zwanzig"
      if y=3 then b$="dreißig"
      if y=4 then b$="vierzig"
      if y=5 then b$="fünfzig"
      if y=6 then b$="sechzig"
      if y=7 then b$="siebzig"
      if y=8 then b$="achtzig"
      if y=9 then b$="neunzig"
    end_if

    if y>0
      if param1-y*10>0
          a$=a$+nl$(param1-y*10)+"und"
          param1=param1-(param1-y*10)
      end_if
      if b$<>"" then a$=a$+b$
    end_if
    a$=trim$(a$)

    param1=param1-y*10
    if param1>0 then a$=a$+nl$(param1)

    if left$(a$,3)="und" then a$=right_pos$(a$,4)
    y%=instr(a$," und")
    if y%>0 then a$=left$(a$,y%)+right_pos$(a$,y%+4)

    ' eins devient ein dans un mot composé.
    while true%=1
          y%=instr(a$,"eins")
          if y%=0 then exit_while
          if instr("htu",mid$(a$,y%+4,1))>0 then a$=left$(a$,y%+2)+right_pos$(a$,y%+4)
    end_while

end_sub
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Traduire des nombres en lettres. Empty
MessageSujet: Re: Traduire des nombres en lettres.   Traduire des nombres en lettres. EmptyLun 10 Nov 2014 - 14:44

Bien tenté, Pédro. J'ai relevé certaines anomalies dans ta routine (les décalages dans la variable c$ n'étaient pas cohérents, plus quelques petits détails. Et je t'ai fait cadeau d'une double version: nombre normal et année calendaire. Voici le résultat:
Code:
dim nombre, true%, x%, y%
dim a$, b$
true%=1

traduire_nombre_allemand_en_lettre(1971,0)
message "Nombre: '"+a$+"'"
traduire_nombre_allemand_en_lettre(1971,1)
message "Année: '"+a$+"'"
terminate

sub traduire_nombre_allemand_en_lettre(param1,typ%)
' typ%=0 ==> nombre normal
' typ%=1 ==> année calendaire

    dim_local nombre, nl$(20), c$, k%, x%, y, c1$, c2$, c3$, c4$, z

    nombre=param1

    c$=    "eins    zwei    drei    vier    fünf    sechs    sieben  acht    neun    zehn    elf      zwölf    "
    c$=c$+ "dreizehn vierzehn fünfzehn sechzehn siebzehn achtzehn neunzehn 111111111222222222111111111222222222111111111"
    for k%=1 to 19
        nl$(k%)=trim$(mid$(c$,(k%-1)*9+1,9))
    next k%

    a$=""

    if typ%=0
      if param1>999
        x%=int(param1/1000)
        if x%>0
          if x%>1
            c1$ = nl$(x%)
          else
            c1$ = "ein"
          end_if
        end_if
        c1$ = c1$ + "tausend"
        param1=param1-x%*1000
      end_if
    end_if
    if typ%=1
      if param1>99
        x% = int(param1/100)
        if x%>1 then c1$ = nl$(x%)
        if x%=10
          c1$ = "tausend"
        else
          c1$ = c1$ + "hunderd"
        end_if
      end_if
      param1=param1-x%*100
    end_if

    if param1>99
      x%=int(param1/100)
      if x%>1
        c2$ = nl$(x%)
      else
        c2$ = "ein"
      end_if
      c2$ = c2$ + "hundert"
      param1=param1-x%*100
    end_if

    if param1>19
      y=int(param1/10)

      b$=""
      ' Pas de select: bug.
      if y=2 then b$="zwanzig"
      if y=3 then b$="dreißig"
      if y=4 then b$="vierzig"
      if y=5 then b$="fünfzig"
      if y=6 then b$="sechzig"
      if y=7 then b$="siebzig"
      if y=8 then b$="achtzig"
      if y=9 then b$="neunzig"
    else
      c4$ = nl$(param1)
    end_if

    z = param1-y*10
    if y>0
      if z>0
        if z>1
          c4$ = nl$(z)
        else
          c4$ = "ein"
        end_if
      end_if
      if z>0 then c4$ = c4$ + "und"
      if b$<>"" then c4$ = c4$ + b$
    end_if

    a$ = c1$ + c2$ + c3$ + c4$

end_sub
Amuse-toi bien !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Pedro

Pedro


Nombre de messages : 1595
Date d'inscription : 19/01/2014

Traduire des nombres en lettres. Empty
MessageSujet: Traduire des nombres en lettres.   Traduire des nombres en lettres. EmptyLun 10 Nov 2014 - 15:14

Bonjour..

@Klaus.

Je pense que ta routine comporte un bug.

En faisant un test sur '99', elle affiche zehnundneunzig !!

Alors que la mienne affiche bien neunundneunzig.

Merci de voir.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Traduire des nombres en lettres. Empty
MessageSujet: Re: Traduire des nombres en lettres.   Traduire des nombres en lettres. EmptyLun 10 Nov 2014 - 15:22

Chez moi, le résultat est bon. Donc, le problème vient des espaces pour la variable c$ qui sont mangés par le forum. Alors, passe plutôt par des DATA:
Code:
dim nombre, true%, x%, y%
dim a$, b$
true%=1

traduire_nombre_allemand_en_lettre(99,0)
message "Nombre: '"+a$+"'"
traduire_nombre_allemand_en_lettre(99,1)
message "Année: '"+a$+"'"
terminate

sub traduire_nombre_allemand_en_lettre(param1,typ%)
' typ%=0 ==> nombre normal
' typ%=1 ==> année calendaire

    dim_local nombre, nl$(20), c$, k%, x%, y, c1$, c2$, c3$, c4$, z

    nombre=param1
    restore
    data "eins","zwei","drei","vier","fünf","sechs","sieben"
    data "acht","neun","zehn","elf","zwölf"
    data "dreizehn","vierzehn","fünfzehn","sechzehn","siebzehn",
    data "achtzehn","neunzehn"
    for k%=1 to 19
        read nl$(k%)
    next k%

    a$=""

    if typ%=0
      if param1>999
        x%=int(param1/1000)
        if x%>0
          if x%>1
            c1$ = nl$(x%)
          else
            c1$ = "ein"
          end_if
        end_if
        c1$ = c1$ + "tausend"
        param1=param1-x%*1000
      end_if
    end_if
    if typ%=1
      if param1>99
        x% = int(param1/100)
        if x%>1 then c1$ = nl$(x%)
        if x%=10
          c1$ = "tausend"
        else
          c1$ = c1$ + "hunderd"
        end_if
      end_if
      param1=param1-x%*100
    end_if

    if param1>99
      x%=int(param1/100)
      if x%>1
        c2$ = nl$(x%)
      else
        c2$ = "ein"
      end_if
      c2$ = c2$ + "hundert"
      param1=param1-x%*100
    end_if

    if param1>19
      y=int(param1/10)

      b$=""
      ' Pas de select: bug.
      if y=2 then b$="zwanzig"
      if y=3 then b$="dreißig"
      if y=4 then b$="vierzig"
      if y=5 then b$="fünfzig"
      if y=6 then b$="sechzig"
      if y=7 then b$="siebzig"
      if y=8 then b$="achtzig"
      if y=9 then b$="neunzig"
    else
      c4$ = nl$(param1)
    end_if

    z = param1-y*10
    if y>0
      if z>0
        if z>1
          c4$ = nl$(z)
        else
          c4$ = "ein"
        end_if
      end_if
      if z>0 then c4$ = c4$ + "und"
      if b$<>"" then c4$ = c4$ + b$
    end_if

    a$ = c1$ + c2$ + c3$ + c4$

end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Pedro

Pedro


Nombre de messages : 1595
Date d'inscription : 19/01/2014

Traduire des nombres en lettres. Empty
MessageSujet: traduire des nombres en lettres.   Traduire des nombres en lettres. EmptyLun 10 Nov 2014 - 17:07

@Klaus.


Désolé, mais pour l'année 2014, la sub affiche:

hundertvierzehn

Merci de voir le problème.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Traduire des nombres en lettres. Empty
MessageSujet: Re: Traduire des nombres en lettres.   Traduire des nombres en lettres. EmptyLun 10 Nov 2014 - 17:25

Tu as raison. Voici la correction:
Code:
dim nombre, true%, x%, y%
dim a$, b$
true%=1

traduire_nombre_allemand_en_lettre(1914,0)
message "Nombre: '"+a$+"'"
traduire_nombre_allemand_en_lettre(1914,1)
message "Année: '"+a$+"'"
terminate

sub traduire_nombre_allemand_en_lettre(param1,typ%)
' typ%=0 ==> nombre normal
' typ%=1 ==> année calendaire

    dim_local nombre, nl$(20), c$, k%, x%, y, c1$, c2$, c3$, c4$, z, t%

    nombre=param1
    restore
    data "eins","zwei","drei","vier","fünf","sechs","sieben"
    data "acht","neun","zehn","elf","zwölf"
    data "dreizehn","vierzehn","fünfzehn","sechzehn","siebzehn",
    data "achtzehn","neunzehn"
    for k%=1 to 19
        read nl$(k%)
    next k%
   
    t% = typ%
    if (typ%=1) and (param1>=2000) then t% = 0

    a$=""

    if t%=0
      if param1>999
        x%=int(param1/1000)
        if x%>0
          if x%>1
            c1$ = nl$(x%)
          else
            c1$ = "ein"
          end_if
        end_if
        c1$ = c1$ + "tausend"
        param1=param1-x%*1000
      end_if
    end_if
    if t%=1
      if param1>99
        x% = int(param1/100)
        if x%>1 then c1$ = nl$(x%)
        if x%=10
          c1$ = "tausend"
        else
          c1$ = c1$ + "hunderd"
        end_if
      end_if
      param1=param1-x%*100
    end_if

    if param1>99
      x%=int(param1/100)
      if x%>1
        c2$ = nl$(x%)
      else
        c2$ = "ein"
      end_if
      c2$ = c2$ + "hundert"
      param1=param1-x%*100
    end_if

    if param1>19
      y=int(param1/10)

      b$=""
      ' Pas de select: bug.
      if y=2 then b$="zwanzig"
      if y=3 then b$="dreißig"
      if y=4 then b$="vierzig"
      if y=5 then b$="fünfzig"
      if y=6 then b$="sechzig"
      if y=7 then b$="siebzig"
      if y=8 then b$="achtzig"
      if y=9 then b$="neunzig"
    else
      c4$ = nl$(param1)
    end_if

    z = param1-y*10
    if y>0
      if z>0
        if z>1
          c4$ = nl$(z)
        else
          c4$ = "ein"
        end_if
      end_if
      if z>0 then c4$ = c4$ + "und"
      if b$<>"" then c4$ = c4$ + b$
    end_if

    a$ = c1$ + c2$ + c3$ + c4$

end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Traduire des nombres en lettres. Empty
MessageSujet: Re: Traduire des nombres en lettres.   Traduire des nombres en lettres. Empty

Revenir en haut Aller en bas
 
Traduire des nombres en lettres.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» exportation de fichiers texte et lettres accentuées
» Les nombres narcissiques (ou nombres d’Armstrong)
» question de math et de lettres.
» nombres aléatoires
» Afficher un nombre en toutes lettres

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: