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.
Traduire des nombres en lettres. Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Traduire des nombres en lettres. Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Traduire des nombres en lettres. Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Traduire des nombres en lettres. Emptypar Marc Sam 11 Mai 2024 - 12:38

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

» Philharmusique
Traduire des nombres en lettres. Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Traduire des nombres en lettres. Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Traduire des nombres en lettres. Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Traduire des nombres en lettres. Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Traduire des nombres en lettres. Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Traduire des nombres en lettres. Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Traduire des nombres en lettres. Emptypar papydall Mer 8 Mai 2024 - 4:17

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

» KGF_dll - nouvelles versions
Traduire des nombres en lettres. Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Traduire des nombres en 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
Le deal à ne pas rater :
Cartes Pokémon : la prochaine extension Pokémon sera EV6.5 Fable ...
Voir le deal

 

 Traduire des nombres en lettres.

Aller en bas 
2 participants
AuteurMessage
Pedro

Pedro


Nombre de messages : 1561
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 : 12301
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 : 1561
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 : 12301
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 : 1561
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 : 12301
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.
» Montant en toutes lettres
» 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: