اذهب إلى المحتوى
  • 0

استفسار بخصوص مسألة Number to Words

محمود السعيد عوف

السؤال

السلام عليكم ورحمة الله وبركاته 
اولا انا الان احاول تعلم حل المشاكل واحاول زيادة مستوي تقدمي في جافاسكريبت فقمت بحل تحديات برمجية من علي منصة كودرهب واستطعت حل حوالي 90 تحدي ولكن بعض التحديات اجد انه لا اعرف حلها ابدا فاريد مساعدة علي تحدي معين وهو تحويل الارقام الي نصوص مثلا 

من الرقم 1 الي الرقم 999 كل رقم يتحول الي نصه باللغة الانجليزية 

20 = twenty 
100 = one hundred 
220 = two hundred twenty 

قد فكرت في طريقة حلها ولكن التي قد اعتقدت انها تعمل وهي ان استعمل لكل رقم نص معين واستخدم ال for loop وال if statement علي كل رقم ولكن هذا لاغير معقول لانه سياخذ وقت طويل جدا

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

المشكلة في تحويل الأرقام إلى نصوص يبدو أنك بدأت في التفكير بحلول تقليدية مثل استخدام for loop و if statements، ولكن كما ذكرت، هذا الحل سيكون غير عملي ومعقد، خاصة إذا كنت تتعامل مع نطاق واسع من الأرقام فالأرقام لها أنماط محددة ومن 1 إلى 19 لكل رقم اسم مختلف وأما من 20 إلى 99 لديك العشرات (twenty, thirty, forty,...)، والرقم الذي يتبعها 1 إلى 9 أيضا.

في حين أنّ الأرقام من 100 إلى 999 تحتاج إلى التعامل مع المئات، ثم معالجة العشرات والوحدات بعد المئات.

وللتفكير في حلّ للمشكلة هذه سيتطلب منك البحث عن الأنماط بدلا من التفكير في كل رقم على حدة، عليك ملاحظة أن هناك مجموعات من الأرقام التي تتكرر بنمط معين ثم تقسيم المشكلة إلى أجزاء صغيرة كأن تسأل:

  • كيف ستحول الأرقام من 1 إلى 19؟
  • كيف ستحول العشرات مثل 20، 30، 40؟
  • كيف ستتعامل مع الأرقام التي تحتوي على مئات مثل 220 أو 345؟

وهنا يظهر العيب في استخدام الحلقات مع if statements لكل رقم يعني أنك ستحتاج إلى العديد من الشروط لكل رقم، وستكون الحلول غير مرنة مع الأرقام الكبيرة أو المستقبلية والفكرة تكمن في إيجاد طريقة لحل المشكلة بشكل عام وليس مجرد حل لكل حالة.

يمكنك مراعاة استخدام الكائنات بحيث يمكنك تخزين الأرقام الأساسية (من 1 إلى 19 والعشرات) كقيمة نصية في كائن، بحيث تسترجع النص المقابل لكل رقم بسهولة بعدها يمكنك تقسيم الأرقام إلى مئات وعشرات ووحدات، ومعالجة كل جزء على حدة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 ساعة قال ياسر مسكين:

المشكلة في تحويل الأرقام إلى نصوص يبدو أنك بدأت في التفكير بحلول تقليدية مثل استخدام for loop و if statements، ولكن كما ذكرت، هذا الحل سيكون غير عملي ومعقد، خاصة إذا كنت تتعامل مع نطاق واسع من الأرقام فالأرقام لها أنماط محددة ومن 1 إلى 19 لكل رقم اسم مختلف وأما من 20 إلى 99 لديك العشرات (twenty, thirty, forty,...)، والرقم الذي يتبعها 1 إلى 9 أيضا.

في حين أنّ الأرقام من 100 إلى 999 تحتاج إلى التعامل مع المئات، ثم معالجة العشرات والوحدات بعد المئات.

وللتفكير في حلّ للمشكلة هذه سيتطلب منك البحث عن الأنماط بدلا من التفكير في كل رقم على حدة، عليك ملاحظة أن هناك مجموعات من الأرقام التي تتكرر بنمط معين ثم تقسيم المشكلة إلى أجزاء صغيرة كأن تسأل:

  • كيف ستحول الأرقام من 1 إلى 19؟
  • كيف ستحول العشرات مثل 20، 30، 40؟
  • كيف ستتعامل مع الأرقام التي تحتوي على مئات مثل 220 أو 345؟

وهنا يظهر العيب في استخدام الحلقات مع if statements لكل رقم يعني أنك ستحتاج إلى العديد من الشروط لكل رقم، وستكون الحلول غير مرنة مع الأرقام الكبيرة أو المستقبلية والفكرة تكمن في إيجاد طريقة لحل المشكلة بشكل عام وليس مجرد حل لكل حالة.

يمكنك مراعاة استخدام الكائنات بحيث يمكنك تخزين الأرقام الأساسية (من 1 إلى 19 والعشرات) كقيمة نصية في كائن، بحيث تسترجع النص المقابل لكل رقم بسهولة بعدها يمكنك تقسيم الأرقام إلى مئات وعشرات ووحدات، ومعالجة كل جزء على حدة.

عذرا ولكن الا يعني هذا اني ايضا ساسترجع كل رقم علي حدة من الكائن لاني اريد وضعها بنصية فهذا يعني اني ايضا ساستخدم العديد من السطور لارجاع قيمة الرقم وكيف افعل هذا بدون ال if statement

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

 تحدي تحويل الأرقام إلى نصوص Number to Words من التحديات الكلاسيكية التي تساعد على فهم الخوارزميات والتفكير البرمجي، وفي البداية يقع الغالبية في خطأ وهو التفكير في المشكلة ككل بدلاً من تقسيمها إلى أجزاء أبسط والعمل على حلها، كالتالي:

  • الأرقام من 1 إلى 9 هنا الحالة مباشرة، حيث تستطيع استخدام if/else أو switch لتعيين نص لكل رقم.
  • الأرقام من 10 إلى 19 تلك الأرقام لها أسماء خاصة (ten, eleven, twelve... nineteen).
  • الأرقام من 20 إلى 99  هنا نبدأ باستخدام مضاعفات العشرة (twenty, thirty, ... ninety) ونضيف إليها الأرقام من 1 إلى 9 إذا لزم الأمر.
  • الأرقام من 100 إلى 999: نستخدم اسم المئة (one hundred, two hundred, ...) ونضيف إليه تحويل الجزء المتبقي من الرقم (من 1 إلى 99).

لتنظيم الكود وجعله قابل لإعادة الاستخدام، من الأفضل إنشاء دالة لكل حالة من الحالات السابقة.

في البداية دعك من جودة الكود، الهم هو تنفيذ المطلوب، ومع الوقت ستتحسن جودة الكود لديك.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 ساعة قال Mustafa Suleiman:

 تحدي تحويل الأرقام إلى نصوص Number to Words من التحديات الكلاسيكية التي تساعد على فهم الخوارزميات والتفكير البرمجي، وفي البداية يقع الغالبية في خطأ وهو التفكير في المشكلة ككل بدلاً من تقسيمها إلى أجزاء أبسط والعمل على حلها، كالتالي:

  • الأرقام من 1 إلى 9 هنا الحالة مباشرة، حيث تستطيع استخدام if/else أو switch لتعيين نص لكل رقم.
  • الأرقام من 10 إلى 19 تلك الأرقام لها أسماء خاصة (ten, eleven, twelve... nineteen).
  • الأرقام من 20 إلى 99  هنا نبدأ باستخدام مضاعفات العشرة (twenty, thirty, ... ninety) ونضيف إليها الأرقام من 1 إلى 9 إذا لزم الأمر.
  • الأرقام من 100 إلى 999: نستخدم اسم المئة (one hundred, two hundred, ...) ونضيف إليه تحويل الجزء المتبقي من الرقم (من 1 إلى 99).

لتنظيم الكود وجعله قابل لإعادة الاستخدام، من الأفضل إنشاء دالة لكل حالة من الحالات السابقة.

في البداية دعك من جودة الكود، الهم هو تنفيذ المطلوب، ومع الوقت ستتحسن جودة الكود لديك.

جزاك الله خيرا حاولت حله وقد نجحت بالفعل ولكن اري انه لا يقبل التحدي علي منصة كودر هب علما اني متاكد اني حللته بشكل صحيح  فهل هناك مشكلة بهذا الكود هذا هو الكود الخاص بالتحدي 
 


function numToEng(n) {
    // write your code here
    let r = ""
    if (n.toString().charAt(0) == 1 && n.toString().length == 3)
        r += "one hundred";
    else if (n.toString().charAt(0) == 2 && n.toString().length == 3)
        r += "two hundred";
    else if (n.toString().charAt(0) == 3 && n.toString().length == 3)
        r += "three hundred";
    else if (n.toString().charAt(0) == 4 && n.toString().length == 3)
        r += "four hundred";
    else if (n.toString().charAt(0) == 5 && n.toString().length == 3)
        r += "five hundred";
    else if (n.toString().charAt(0) == 6 && n.toString().length == 3)
        r += "six hundred";
    else if (n.toString().charAt(0) == 7 && n.toString().length == 3)
        r += "seven hundred";
    else if (n.toString().charAt(0) == 8 && n.toString().length == 3)
        r += "eight hundred";
    else if (n.toString().charAt(0) == 9 && n.toString().length == 3)
        r += "nine hundred";
    // ------------------------------------------------------------------
    if (n.toString().charAt(1) == 1 && n.toString().length == 3 && n.toString().charAt(2) == 0 || n.toString().charAt(0) == 1 && n.toString().length == 2 && n.toString().charAt(1) == 0)
        r += " ten";
    else if (n.toString().charAt(1) == 2 && n.toString().length == 3 || n.toString().charAt(0) == 2 && n.toString().length == 2)
        r += " twenty";
    else if (n.toString().charAt(1) == 3 && n.toString().length == 3 || n.toString().charAt(0) == 3 && n.toString().length == 2)
        r += " thirty";
    else if (n.toString().charAt(1) == 4 && n.toString().length == 3 || n.toString().charAt(0) == 4 && n.toString().length == 2)
        r += " forty";
    else if (n.toString().charAt(1) == 5 && n.toString().length == 3 || n.toString().charAt(0) == 5 && n.toString().length == 2)
        r += " fifty";
    else if (n.toString().charAt(1) == 6 && n.toString().length == 3 || n.toString().charAt(0) == 6 && n.toString().length == 2)
        r += " sixty";
    else if (n.toString().charAt(1) == 7 && n.toString().length == 3 || n.toString().charAt(0) == 7 && n.toString().length == 2)
        r += " seventy";
    else if (n.toString().charAt(1) == 8 && n.toString().length == 3 || n.toString().charAt(0) == 8 && n.toString().length == 2)
        r += " eighty";
    else if (n.toString().charAt(1) == 9 && n.toString().length == 3 || n.toString().charAt(0) == 9 && n.toString().length == 2)
        r += " ninety";
    // -----------------------------------------------------------------------------------------------------------------------------------
    if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 1 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 1 && n.toString().length == 2)
        r += " eleven"
    else if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 2 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 2 && n.toString().length == 2)
        r += " twelve"
    else if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 3 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 3 && n.toString().length == 2)
        r += " thirteen"
    else if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 4 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 4 && n.toString().length == 2)
        r += " fourteen"
    else if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 5 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 5 && n.toString().length == 2)
        r += " fifteen"
    else if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 6 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 6 && n.toString().length == 2)
        r += " sixteen"
    else if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 7 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 7 && n.toString().length == 2)
        r += " seventeen"
    else if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 8 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 8 && n.toString().length == 2)
        r += " eighteen"
    else if (n.toString().charAt(1) == 1 && n.toString().charAt(2) == 9 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().charAt(1) == 9 && n.toString().length == 2)
        r += " nineteen"
    // ---------------------------------------------------------------------------------------------------------------------
    if(n.toString().charAt(2) == 1  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 1 && n.toString().length == 1 )
        r += " one";
    else if(n.toString().charAt(2) == 2  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 2 && n.toString().length == 1 )
        r += " two";
    else if(n.toString().charAt(2) == 3  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 3 && n.toString().length == 1 )
        r += " three";
    else if(n.toString().charAt(2) == 4  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 4 && n.toString().length == 1 )
        r += " four";
    else if(n.toString().charAt(2) == 5  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 5 && n.toString().length == 1 )
        r += " five";
    else if(n.toString().charAt(2) == 6  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 6 && n.toString().length == 1 )
        r += " six";
    else if(n.toString().charAt(2) == 7  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 7 && n.toString().length == 1 )
        r += " seven";
    else if(n.toString().charAt(2) == 8  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 8 && n.toString().length == 1 )
        r += " eight";
    else if(n.toString().charAt(2) == 9  &&n.toString().charAt(1) == 0 && n.toString().length == 3 || n.toString().charAt(0) == 9 && n.toString().length == 1 )
        r += " nine";




    else if(n.toString().charAt(2) == 1 && n.toString().length == 3 || n.toString().charAt(1) == 1 && n.toString().length == 2|| n.toString().charAt(0) == 1 && n.toString().length == 1 )
        r += "-one"
    else if(n.toString().charAt(2) == 2 && n.toString().length == 3 || n.toString().charAt(1) == 2 && n.toString().length == 2|| n.toString().charAt(0) == 2 && n.toString().length == 1 )
        r += "-two"
    else if(n.toString().charAt(2) == 3 && n.toString().length == 3 || n.toString().charAt(1) == 3 && n.toString().length == 2|| n.toString().charAt(0) == 3 && n.toString().length == 1 )
        r += "-three"
    else if(n.toString().charAt(2) == 4 && n.toString().length == 3 || n.toString().charAt(1) == 4 && n.toString().length == 2|| n.toString().charAt(0) == 4 && n.toString().length == 1 )
        r += "-four"
    else if(n.toString().charAt(2) == 5 && n.toString().length == 3 || n.toString().charAt(1) == 5 && n.toString().length == 2|| n.toString().charAt(0) == 5 && n.toString().length == 1 )
        r += "-five"
    else if(n.toString().charAt(2) == 6 && n.toString().length == 3 || n.toString().charAt(1) == 6 && n.toString().length == 2|| n.toString().charAt(0) == 6 && n.toString().length == 1 )
        r += "-six"
    else if(n.toString().charAt(2) == 7 && n.toString().length == 3 || n.toString().charAt(1) == 7 && n.toString().length == 2|| n.toString().charAt(0) == 7 && n.toString().length == 1 )
        r += "-seven"
    else if(n.toString().charAt(2) == 8 && n.toString().length == 3 || n.toString().charAt(1) == 8 && n.toString().length == 2|| n.toString().charAt(0) == 8 && n.toString().length == 1 )
        r += "-eight"
    else if(n.toString().charAt(2) == 9 && n.toString().length == 3 || n.toString().charAt(1) == 9 && n.toString().length == 2|| n.toString().charAt(0) == 9 && n.toString().length == 1 )
        r += "-nine"
    
     
    


    

    if (r.charAt(0) == " ") {
        r = r.replace(" " , "")
    }
    return r
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...