السلام عليكم
خلال اليوميين الماضيين كنت غير مشغول وتقريبا "فاضي" تماما واشعر بالملل. وبدأت اقلب في اشياء واوراق قديمة
وقعت في يدي فاتورة قديمة ولاحظت أن المبلغ المسجل في الفاتورة (بشكل يدوي) مكتوب رقما وكتابة (سبحان الله) قد يقول البعض ولكن حلمكم علي شوي.
بدأت افكر : كيف استطيع ترجمة رقم مثل 17 الى "سبعة عشر" في برنامج؟
استحوذ الموضوع على إهتمامي وتركت ما في يدي , و امسكت ورقة وقلم وقعدت افكر واشخبط في شكل خوارزمية بسيطة.
ومع مرور الوقت تحولت من حبر على ورق الى Java class بسيط .
مبدأ الخوارزمية الذي توصلت له غير معقد بالمرة:
المدخل لهذة الخوارزمية هو عدد (بصورة رقمية مثل 123) .
تقوم الخوارزمية بمسح (scan) العدد من اقصى اليمين (خانة آحاد الوحدات) وصعودا الى اخر رقم في اقصى اليمين .
اثناء المسح وعند كل خانة يجب ان تتوفر للخوارزمية قيمتين , القيمة الاولى هي خانة العدد المقروء (احاد,عشرات ام مئات) , وكذلك القوة العشرية للموقع .
فمثلا واثناء المسح وجدنا العدد 2 في خانة العشرات , هذا يعني ان القيمة الحرفية لة هي "عشرون" بشكل مبدأي.
ومن خلال القوة العشرية لموقع الرقم نستطيع ان نعرف هل هي "عشرون" فقط ام "عشرون الف" ام "عشرون مليون" وهكذا.
القيم الحرفية الأساسية للأرقام , ستكون عبارة عن كلمات مخزونة ("صفر,واحد,اثنان.......,عشرة ,عشرون, ثلاثون....مائة ,الف, مليون...") . ومنها تستطيع الخوارزمية انشاء تركيبات حرفية مثل "سبعة عشرة الف و خمسة مائة".
تطبيق الخوارزمية برمجيا ليس معقدا. وبالإمكان تطبيقها بكود جميل وغير معقد.
ولكن.
بما أن اللغة العربية لها قواعد لغوية صارمة . نجد ان نص مثل "اثنان الف" غير مقبول قواعديا بل "الفان"
و نص مثل "اثنين عشرة" لا وجود لة في اللغة العربية بل "اثنا عشرة".
ولذلك كان لابد من محاولة إدخال "بعض" القواعد على الكود , فتحول الكود من كود Java الى شيء يشبة كود الC :huh: (مع كل التقدير لمبرمجي C).
وعلى العموم الموضوع بأكملة كان مثير ومنعش للعقل.
لا اطيل عليكم واترككم مع النتيجة النهائية وهي عبارة عن فئة تحوي دالة واحدة فقط public static تأخذ متغير واحد من نوع Number وتعيد String
وهي صالحة للأعداد الموجبة والسالبة وكذلك الكسور
ملحوظة للأخ علاء الصالحي:
قرأت هنا او هناك انك قمت بتطوير حزمة خاصة بالأرقام العربية ,لم اراها حتى الان, ولكن مارأيك ان تقوم بتضمين الفئة هذه للحزمة؟ بعد تجربتها والتأكد من فائدتها إن شاء الله.


