السلام عليكم ورحمة الله
بارك الله لك أخي نبيل
مجهودك رائع يثمر عن موضوع أروع
كمساهمة صغيرة، رأيت في التقرير عبارة:
أحسن ما وجدت لتحويل الأرقام إلى حروف (بالفرنسية) هذه الدالة:
المميز فيها مراعاة دقيقة للقواعد النحوية الفرنسية والحالات الخاصة.
أيضا السرعة واختصار في الكود، غير أنها لا تأخذ الفواصل في الحسبان
المصدر: Developpez.com بتصرف (حذفت الجزء المتعلق بحالة استثنائية للفرنسيين).
ملاحظة: طرح أسئلتك في قسم الأسئلة، وأي سؤال خارج عن الموضوع هنا سيحذف، كما قد تحذف المشاركات التي لا تضيف إلى الموضوع
بالتوفيق أخي نبيل.
بارك الله لك أخي نبيل
مجهودك رائع يثمر عن موضوع أروع

كمساهمة صغيرة، رأيت في التقرير عبارة:
كود :
Arrêter la présente facture à la somme de:كود :
function NombreEnLettres(n: Integer): string;
Const
unite: array [1 .. 19] of string = ('un', 'deux', 'trois', 'quatre', 'cinq',
'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize',
'quatorze', 'quinze', 'seize', 'dix sept', 'dix huit', 'dix neuf');
dizaineF: array [2 .. 9] of string = ('vingt', 'trente', 'quarante',
'cinquante', 'soixante', '', 'quatre-vingt', '');
dizaineB: array [2 .. 9] of string = ('vingt', 'trente', 'quarante',
'cinquante', 'soixante', 'septante', 'octante', 'nonante');
coefs: array [0 .. 3] of string = ('cent', 'mille', 'million', 'milliard');
Var
temp: String;
c, d, u: Integer;
coef: Integer;
I: Integer;
neg: Boolean;
Begin
Result := '';
// Cas particulier de zéro
If n = 0 then
begin
Result := ' zero';
Exit;
end;
// Mémorisation du signe
neg := n < 0;
If neg then
n := -n;
coef := 0;
Repeat
// Récupération de l'unité du bloc de trois chiffres en cours
u := n mod 10;
n := n div 10;
// Récupération de la dizaine du bloc de trois chiffres en cours
d := n mod 10;
n := n div 10;
// Traitement des dizaines
temp := '';
// Passage sur la dizaine inférieure pour 10 à 19
// et pour 70-79 90-99 dans le cas de la France
If (d = 1) Or ((d in [7, 9])) then
begin
Dec(d);
Inc(u, 10);
end;
if d > 1 then
begin
temp := ' ' + dizaineF[d];
// Ajout du cas particulier de 'et' entre la dizaine et 1
if (d < 8) and ((u = 1) or (u = 11)) then
temp := temp + ' et';
end;
// ajout du texte de l'unité
if u > 0 then
temp := temp + ' ' + unite[u];
// ajout du 's' à Quatre-vingt si rien ne suit
If (Result = '') and (d = 8) and (u = 0) then
Result := 's';
Result := temp + Result;
// Récupération de la centaine du bloc de trois chiffres en cours
c := n mod 10;
n := n div 10; { Récupère centaine }
If c > 0 then
begin
temp := '';
if c > 1 then
temp := ' ' + unite[c] + temp;
temp := temp + ' ' + coefs[0];
// Traitement du cas particulier du 's' à cent si rien ne suit
If (Result = '') and (c > 1) then
Result := 's';
Result := temp + Result;
end;
// Traitement du prochain groupe de 3 chiffres
if n > 0 then
begin
Inc(coef);
I := n mod 1000;
If (I > 1) and (coef > 1) then
Result := 's' + Result;
If I > 0 then
Result := ' ' + coefs[coef] + Result;
// Traitement du cas particulier 'mille' ( non pas 'un mille' )
If (I = 1) and (coef = 1) then
Dec(n);
end;
until n = 0;
Result := Trim(Result);
// Ajout du signe en cas de besoin
if neg then
Result := 'moins ' + Result;
End;أيضا السرعة واختصار في الكود، غير أنها لا تأخذ الفواصل في الحسبان
المصدر: Developpez.com بتصرف (حذفت الجزء المتعلق بحالة استثنائية للفرنسيين).
ملاحظة: طرح أسئلتك في قسم الأسئلة، وأي سؤال خارج عن الموضوع هنا سيحذف، كما قد تحذف المشاركات التي لا تضيف إلى الموضوع
بالتوفيق أخي نبيل.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...

