Bonjour, bon voila je demande votre aide a propos d'un programme en langage c permettant
d'Afficher en toutes lettres un nombre donné avec virgule.( 0<nombre<1000000) merci bcp de votre aide
public class Convertisseur
{
private static final String[] nombres = {"zéro",
"un",
"deux",
"trois",
"quatre",
"cinq",
"six",
"sept",
"huit",
"neuf",
"dix",
"onze",
"douze",
"treize",
"quatorze",
"quinze",
"seize",
"dix-sept",
"dix-huit",
"dix-neuf"};
private static final String[] dizaines = {"dix","vingt","trente","quarante","cinquante","soixante","septante","quatre-vingt","nonante"};
private static final String[] unites = {"cent","mille","million","milliard","billion","billiard"};
private boolean belge=false;
public void setFormatBelge(boolean b)
{
belge=b;
}
public String getNombreEnLettres(long nombre)
{
String chaine= new String();
int n = 0;
if(nombre>=Math.pow(10,15))
{
n= (int) (nombre/(long)Math.pow(10,15));
nombre%=Math.pow(10,15);
chaine+= getUnite(n,true) + " " + unites[5];
if(n>1) chaine+="s";
}
if(nombre>=Math.pow(10,12))
{
if(n>0) chaine+=" ";
n= (int) (nombre/(long)Math.pow(10,12));
nombre%=Math.pow(10,12);
chaine+=getUnite(n,true) + " " + unites[4];
if(n>1) chaine+="s";
}
if(nombre>=Math.pow(10,9))
{
if(n>0) chaine+=" ";
n= (int) (nombre/(long)Math.pow(10,9));
nombre%=Math.pow(10,9);
chaine+=getUnite(n,true) + " " + unites[3];
if(n>1) chaine+="s";
}
if(nombre>=Math.pow(10,6))
{
if(n>0) chaine+=" ";
n= (int) (nombre/(long)Math.pow(10,6));
nombre%=Math.pow(10,6);
chaine+=getUnite(n,true) + " " + unites[2];
if(n>1) chaine+="s";
}
if(nombre>=Math.pow(10,3))
{
if(n>0) chaine+=" ";
n= (int) (nombre/(long)Math.pow(10,3));
nombre%=Math.pow(10,3);
if(n==1) chaine+=unites[1];
else chaine+=getUnite(n,true) + " " + unites[1];
}
if(nombre>0 && nombre<1000)
{
if(n>0) chaine+=" ";
chaine+=getUnite((int)nombre,false);
}
return chaine;
}
private String getUnite(int nombre, boolean s)
{
String chaine = new String();
int n = 0;
if(nombre==0)
return nombres[0];
else
{
if(nombre>=100) // Centaines
{
n = (int) nombre/100;
nombre%=100;
if(n==1)
chaine=unites[0];
else
chaine=nombres[n] + " " + unites[0];
if(nombre==0 && n>1 && s==false)
chaine+="s";
}
if(nombre>0 && nombre>19) // Dizaines
{
if(n>0) chaine+=" ";
if(belge)
{
n = (int) nombre/10;
nombre%=10;
if(n>0) chaine+= dizaines[n-1];
if(n==8 && nombre==0) chaine+="s";
}
else
{
n= (int) nombre/10;
if(n==9) {chaine+=dizaines[7]; nombre-=80;}
else if (n==7) {chaine+=dizaines[5]; nombre-=60;}
else if (n>0) {chaine+=dizaines[n-1]; nombre%=10;}
if(n==8 && nombre==0) chaine+="s";
}
}
else
{
if(n>0) n=-1;
else n=0;
}
if(nombre>0)
{
if(n>0 && nombre==1 && n!=8) chaine+=" et ";
if((n>0 && nombre!=1) || n==8) chaine+="-";
if(n==-1) chaine+=" ";
chaine+=nombres[(int)nombre];
}
return chaine;
}
}
}
Option Explicit
Option Base 0
Rem ***** BASIC *****
Function numToAlpha(x As String, Optional u As Boolean = True, Optional v As String = "") As String
' _________________________________ Mémo _________________________________________________________________________________
' Écriture en lettres d'un nombre donné en chiffres
' Fonction créée le 16/07/2003 par ROGER
' Modifiée le 25/07/2008 par ROGER
' x est le nombre donné, de 0 à 999 999 999 999 999 999 (on peut essayer plus grand...)
' u (VRAI par défaut) contrôle l'écriture de 1000 ("mille" si u=1 ou VRAI ou est omis, "mil" si u=0 ou FAUX)
' v ("" par défaut, "d'" ou "de" typiquement) ajoute v à la fin si le nombre se termine par
' "milliard(s)" ou "million(s)".
' =numToAlpha(1948) renvoie mille neuf cent quarante-huit
' =numToAlpha(1948,9) renvoie mille neuf cent quarante-huit (la partie décimale est ignorée)
' =numToAlpha(1948;1) renvoie mille neuf cent quarante-huit
' =numToAlpha(1948;0) renvoie mil neuf cent quarante-huit
' =numToAlpha("1 000 000";;"de francs")
' renvoie un million de francs
' =numToAlpha("876 543 200 980 654 321";1)
' renvoie huit cent soixante-seize millions cinq cent quarante-trois mille deux cents milliards
' neuf cent quatre-vingts millions six cent cinquante-quatre mille trois cent vingt-et-un
' ________________________________________________________________________________________________________________________
If IsMissing(v) Then v = "" Else v = " " & v
numToAlpha = NZ312UX(x, u, v)
End Function
Function NZ312UX(x As String, u As Boolean, v As String) As String
' ATTENTION : Cette fonction est récursive.
Dim it As String, y As String
x = clean1(x)
On Error GoTo annule
If Len(x) <> 0 Then
If x <> "0" Then
If Len(x) > 9 Then y = Left$(x, Len(x) - 9) Else y = "0"
If y <> "0" Then
it = it & NZ312UX(y, u, "") '*** *** *** APPEL RECURSIF DE NZ312UX *** *** ***
If CDec(Right$(y, 6)) = 0 Then it = it & " de"
it = it & " milliard": If y <> "1" Then it = it & "s"
End If
y = CStr(CDec(Right$(x, 9)))
If y <> "0" Then
If it <> "" Then it = it & " "
it = it & t9(y, u): If CDec(Right$(y, 6)) = 0 Then it = it & v
Else: it = it & v
End If
Else
it = NZ312UY(0)
End If
End If
annule:
NZ312UX = it
End Function
Function t9(x As String, Optional u As Boolean = True) As String
Dim it As String, y As String
y = CStr(CDec("0" & Right$(Left$(x, max(0, Len(x) - 6)), 3)))
If y <> "0" Then
it = it & t3(y) & " million": If y <> "1" Then it = it & "s"
End If
y = CStr(CDec("0" & Right$(Left$(x, max(0, Len(x) - 3)), 3)))
If y <> "0" Then
If it <> "" Then it = it & " "
If y <> "1" Then it = it & t3(y, 0) & " "
it = it & "mil": If u Then it = it & "le"
End If
y = CStr(CDec(Right$(x, 3)))
If y <> "0" Then
If it <> "" Then it = it & " "
it = it & t3(y)
End If
t9 = it
End Function
Function t3(x As String, Optional u As Boolean = True) As String
Dim it As String, y As String
If x <> "0" Then
y = CStr(CDec("0" & Left$(x, max(0, Len(x) - 2)))): x = CDec(Right$(x, 2))
If y <> "0" Then
If y <> "1" Then it = NZ312UY(CInt(y)) & " "
it = it & "cent": If x = "0" And y <> "1" And u Then it = it & "s"
End If
If x <> "0" Then
If it <> "" Then it = it & " "
it = it & NZ312UY(CInt(x)): If x = "80" And u Then it = it & "s"
End If
End If
t3 = it
End Function
Function clean1(x As String) As String
Dim it As String, compte As Integer
For compte = 1 To Len(x)
If Mid(x, compte, 1) = "," Then Exit For
If IsNumeric(Mid(x, compte, 1)) And Mid(x, compte, 1) <> " " And Mid(x, compte, 1) <> Chr(160) Then it = it + Mid(x, compte, 1)
Next compte
clean1 = it
End Function
Function clean2(x As String) As String
Dim it As String, compte As Integer
For compte = 1 To Len(x)
If (Mid(x, compte, 1) = "," Or IsNumeric(Mid(x, compte, 1))) And Mid(x, compte, 1) <> " " And Mid(x, compte, 1) <> Chr(160) Then it = it + Mid(x, compte, 1)
Next compte
clean2 = it
End Function
Function min(a As Long, b As Long) As Long
min = (a + b - Abs(a - b)) / 2
End Function
Function max(a As Long, b As Long) As Long
max = (a + b + Abs(a - b)) / 2
End Function
Function NZ312UY(x As Integer) As String
' ATTENTION : Cette fonction est récursive.
Dim a As Variant, s As String
a = Array("zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", _
"douze", "treize", "quatorze", "quinze", "seize", "vingt", "trente", "quarante", "cinquante", _
"soixante", "quatre-vingt")
Select Case x
Case 0 To 16: s = a(x)
Case 17 To 19: s = a(10 * Int(x / 10)) & "-" & a(x Mod 10)
Case 20 To 69: s = a(15 + Int(x / 10))
If x Mod 10 = 1 Then s = s & " et " & a(x Mod 10) Else If x Mod 10 > 1 Then s = s & "-" & a(x Mod 10)
Case 70 To 99: s = a(18 + Int(x / 20))
If x = 71 Then s = s & " et " & a(x Mod 20) Else If x Mod 20 > 0 Then s = s & "-" & NZ312UY(x Mod 20)
Case Else: s = "?"
End Select
NZ312UY = s
End Function
' ________________________________________________________________________________________________________________________
Function numDecToAlpha(x As String, Optional u As Boolean = True) As String
Dim c As Integer
x = clean2(x)
If Len(x) <> 0 Then
c = InStr(x, ",")
If c <> 0 Then
numDecToAlpha = numToAlpha(Left$(x, c - 1), u) & " virgule "
Do While InStr(Right$(x, Len(x) - c), "0") = 1
numDecToAlpha = numDecToAlpha & "zéro ": c = c + 1
Loop
numDecToAlpha = numDecToAlpha & numToAlpha(Right$(x, Len(x) - c), u)
Else
numDecToAlpha = numToAlpha(x, u)
End If
Else
numDecToAlpha = ""
End If
End Function
Function FRFA(x As String, Optional u As Boolean = True) As String
Dim c As Integer
x = clean2(x)
If Len(x) <> 0 Then
c = InStr(x, ",")
If c <> 0 Then
FRFA = numToAlpha(Left$(x, c - 1), u, "de")
FRFA = FRFA & " franc"
If CDec(x) >= 2 Then FRFA = FRFA & "s"
FRFA = FRFA & " et " & numToAlpha(Mid$(x & "0", c + 1, 2), u) & " centime"
If CDec(Mid$(x, c + 1, 2)) >= 2 Then FRFA = FRFA & "s"
Else
FRFA = numToAlpha(x, u, "de")
FRFA = FRFA & " franc"
If CDec(x) >= 2 Then FRFA = FRFA & "s"
End If
Else
FRFA = ""
End If
End Function
Function EURA(x As String, Optional u As Boolean = True) As String
Dim c As Integer
x = clean2(x)
If Len(x) <> 0 Then
c = InStr(x, ",")
If c <> 0 Then
EURA = numToAlpha(Left$(x, c - 1), u, "d'")
If Right$(EURA, 1) = "'" Then EURA = EURA & "euro" Else EURA = EURA & " euro"
If CDec(x) >= 2 Then EURA = EURA & "s"
EURA = EURA & " et " & numToAlpha(Mid$(x & "0", c + 1, 2), u) & " centime"
If CDec(Mid$(x, c + 1, 2)) >= 2 Then EURA = EURA & "s"
Else
EURA = numToAlpha(x, u, "d'")
If Right$(EURA, 1) = "'" Then EURA = EURA & "euro" Else EURA = EURA & " euro"
If CDec(x) >= 2 Then EURA = EURA & "s"
End If
Else
EURA = ""
End If
End Function
' ________________________________________________________________________________________________________________________
Combien cela coûte-t-il au total ? Quelles aides apportent l'état et les acteurs du marché pour alléger cette charge non choisie ? Tous les détails sur Commentçamarche.net.