2007. augusztus 1., szerda
Number in french plain text
Problem/Question/Abstract:
Converting integer to plain text in French
Answer:
function IntToLetters(N: Integer): string;
function Mille(N: Integer; P: Integer): string;
// Calcul des nombre de 0..99
function Cent(N: Integer): string;
const
X: array[0..20] of string =
('zero', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf',
'dix',
'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept',
'dix-huit', 'dix-neuf', 'vingt');
Y: array[2..10] of string =
('vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante',
'quatre-vingt', 'quatre-vingt', 'cent');
var
A, B: Integer;
R, C: string;
begin
// Si le nombre est inferieur ou egal a 20 on a la solution directe
if (N <= 20) then
begin
R := X[N];
end;
// Si le nombre est superieur a 20
if (N > 20) and (N < 100) then
begin
// on prend la dizaine
A := N div 10;
// on pend l'unit�
B := N mod 10;
// si l'unit� est un, le s�parateur est 'et'
if (B = 1) and (A in [2, 3, 4, 5, 6, 7]) then
C := ' et '
else
C := ' ';
// si l'unite est sup�rieure a 1, le s�parateur est un '-'
if (B > 1) and (A in [2, 3, 4, 5, 6, 7, 8, 9]) then
C := '-';
// si la dizaine est 7 ou 9 on compte les unit�s de 10 ? 19
if (A = 7) or (A = 9) then
B := B + 10;
// On calcule la solution
if (B = 0) then
R := Y[A]
else
R := Y[A] + C + X[B];
end;
Result := R;
end;
// Calcul des nombres de 100..999
var
A, B: Integer;
R: string;
begin
if (N >= 100) then
begin
// on prend la centaine
A := N div 100;
// on prend le reste
B := N mod 100;
if (A = 0) or (A = 1) then
begin
// si la centaine est 0 ou 1
// on calcule et on 'cent' est au singulier
if (B = 0) then
R := 'cent '
else
R := 'cent ' + Cent(B);
end
else
begin
// si la centaine est > 1
if (P = 0) then
begin
// si c'est la fin d'un nombre (P=0)
// on mets 'cents' au pluriel si pas d'unit� sinon on met 'cent' au singulier
if (B = 0) then
R := Cent(A) + ' cents '
else
R := Cent(A) + ' cent ' + Cent(B);
end
else
begin
// si ce n'est pas la fin d'un nombre 'cent' est au singulier
if (B = 0) then
R := Cent(A) + ' cent '
else
R := Cent(A) + ' cent ' + Cent(B);
end;
end;
end
else
begin
// si le nombre est inf�rieur a 100 on le calcule directement
R := Cent(N);
end;
Result := R;
end;
// Function principale
const
Z: array[0..3] of string =
('', 'mille', 'million', 'milliard');
var
B, I: Integer;
R, M: string;
begin
R := '';
I := 0;
// On va d�composer en tranche de 1000 en partant de la droite
while (N > 0) do
begin
// prend une tranche (reste de la division par 1000)
B := N mod 1000;
// le pluriel est utilis� a partir des milliers
if (I = 0) then
M := ' '
else
M := 's ';
if I = 1 then
begin
// on calcule la tranche des milliers
// si le nombre de milliers est sup�rieur a 1 on ecrit le nombre et 'milles'
if (B > 1) then
R := Mille(B, I) + ' ' + Z[I] + M + R;
// sinon on �ecrit 'mille' et pas 'un mille'
if (B = 1) then
R := Z[I] + ' ' + R;
end
else
begin
// on calcule les millions et suivants
// on mets un 's' au pluriel
if (B > 1) then
R := Mille(B, I) + ' ' + Z[I] + M + R;
// on n'en met pas au singulier
if (B = 1) then
R := Mille(B, I) + ' ' + Z[I] + ' ' + R;
end;
// on decale de 3 rangs vers la droite
N := N div 1000;
I := I + 1;
end;
if (R = '') then
R := 'z�ro';
Result := R;
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése