الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برنامج لكتابة الأرقام بالكلمات ◄◄◄

بدأه احمد حجير في 19 يونيو 2010 · 17 رد · 3,448 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا الموضوع منقول من شبكة تكنولوجيا المعلومات والهندسه التقنيه

وقد اعجبني جدا صاحب الموضوع بطرحه وطريقة شرحه

ارجو من الجميع الفائده~

banar.png

لدينا رقم مكون من 9 خانات فأقل ، كيف نكتب برنامجاً لتهجئة ذلك الرقم وكتابته بالكلمات ؟ حتى تكون لديك فكرة عن طبيعة عمل البرنامج ، انظر الصورة :

28273_125294900841934_100000842732216_132870_4943752_n.jpg

سيكون لدينا مخزون من الكلمات الأساسية التي سنحتاجها عند التهجئة ، تلك الكلمات نخزنها في مصفوفات رمزية string arrays ويكمن دورنا في انتقاء الكلمة المناسبة من المصفوفة المناسبة ووضعها في المكان المناسب . المصفوفات اللازمة هي :

string digits[20]={"Zero ","One ","Two ","Three ","Four  ","Five ",
              "Six ","Seven ","Eight ","Nine ","Ten ","Eleven ","Twelve  ",
              "Thirteen ","Fourteen ","Fifteen ","Sixteen ","Seventeen  ",
              "Eighteen ","Nineteen "};

string tens[8]={"Twenty ","Thirty ","Forty ","Fifty ","Sixty ","Seventy  ","Eighty ","Ninety "};

ولتسهيل التعامل مع الأعداد والوصول إلى خاناتها من اليسار إلى اليمين ، سنفرغ محتويات العدد في مصفوفة عددية num من 9 عناصر . خذ العدد n=120351807 مثلاً ، مصفوفته هي :

32543_125309000840524_100000842732216_132930_6365861_n.jpg

الأمر يتم ببساطة من اليمين إلى اليسار من خلال الكود التالي :

    int n;

    cout << "Insert a Number : ";
    cin >> n;

    int num[9];

    for(int i=8 ;  i>=0 ; i--)
    {
        num=n%10;
        n=n/10;
    }

الآن أصبح الوضع تحت السيطرة خصوصاً عندما نمر على الفئات الثلاثة بدوران for يأخذ خلاله المتغير k القيم 0 و 3 و 6 بحيث تكتب مواقع الخانات ويتم التعامل معها بدلالة k كما يلي :

28273_125314207506670_100000842732216_132963_4425353_n.jpg

     for(int k=0 ;  k<=6 ; k+=3)
     {
        .
       .
       .
    }

قبل الدخول في صلب الكود سنحتاج إلى ثلاثة متغيرات منطقية ، وستعرف دورها لاحقاً ؛ الأول a تكون قيمته false فقط عندما لا يكون لفئة الملايين وجود ، والثاني b تكون قيمته false فقط عندما لا يكون لفئة الألوف وجود ، وأخيراً c تكون قيمته false فقط عندما لا يكون لفئة الواحدات وجود .

   bool a=(num[0]+num[1]+num[2] > 0);    

   bool b=(num[3]+num[4]+num[5] > 0);

   bool c=(num[6]+num[7]+num[8] > 0);

الصورة التالية هي ترجمة لما سبق ، عوض مكان العلامة ؟ ما شئت :

28273_125321250839299_100000842732216_132988_5347966_n.jpg

التعامل مع الفئات الثلاثة سيكون بشكل مماثل ؛ الآحاد وآحاد الألوف وآحاد الملايين في الموقع k+2 ، والعشرات وعشرات الألوف وعشرات الملايين فتكون في الموقع k+1 ، أما المئات ومئات الألوف ومئات الملايين ففي الموقع k من المصفوفة num .

لما k=0 فنحن نعالج فئة الملايين ، ولما k=3 فنحن نعالج فئة الألوف ، أما عندما k=6 فنحن نعالج فئة الواحدات . نفس الأوامر تنفذ في الحالات الثلاثة ، عدا كلمة Million التي تطبع في الحالة الأولى وكلمة Thousand والتي تطبع في الحالة الثانية .

داخل الدوران المذكور ، نبدأ بخانات المئات k ؛ نطبع الخانة يليها كلمة Hundred فقط إن كانت قيمتها أكبر من الصفر .

    if(num[k] != 0)
         cout << digits[num[k]] << "Hundred ";

بالنسبة للعشرات فهناك وقفة ، ان كانت خانة العشرات ( الموقع k+1 ) اكبر من واحد ، 2 أو 3 أو ... ، حينها سنطبع Twenty أو Thirty أو ... ، على الترتيب ، وبما أن أول قيمة لدينا Twenty موجودة في الموقع 0 من المصفوفة tens ، نكتب الكود االتالي :

    if(num[k+1] > 1)
         cout << tens[num[k+1] - 2];

أما إن كانت خانة العشرات تساوي 1 ، حينها سنطبع Ten وحتى Nineteen بالاعتماد على خانة الآحاد ( الموقع k+2 ) كما يلي :

   if(num[k+1] == 1)
        cout << digits[10 * num[k+1] + num[k+2]];

وماذا ان كان لدينا آحاد وخانة العشرات لا تساوي 1 ؟ حينها سنطبع خانة الآحاد كما هي :

  
   if(num[k+1]!=1  && num[k+2]!=0)
        cout << digits[num[k+2]];

كما أشرنا ، سيطبع برنامجنا كلمة Million فقط عندما k=0 ، و a=true بمعنى أنه لدينا مليون فأكثر .

وسيطبع كلمة Thousand فقط عندما k=3 ، و b=true بمعنى أنه لدينا ألف واحد فأكثر في فئة الألوف .

بالنسبة للفاصلة :

سيطبع فاصلة بعد كلمة Million إذا كان لدينا ما نطبعه بعد هذه الكلمة ، أي إذا كان محتوى فئة الواحدات وفئة الألوف ليس كلاهما صفراً . وكذلك الأمر ، سيطبع فاصلة بعد كلمة Thousand إن كانت فئة الواحدات لا تساوي صفراً ، أي أنه لا يزال هناك ما سيطبعه .

    if(k==0 && a)
    {
        cout << "Million ";
        if(b || c) cout << ",\n";
    }

    if(k==3 && b)
    {
        cout << "Thousand ";
        if(c) cout << ",\n";
    }

نقوم بتجميع أجزاء البرنامج لنحصل على الآتي :

  
#include<iostream>
#include<string>
using namespace std;

void main()
{
    string digits[20]={"Zero  ","One  ","Two ","Three ","Four ","Five ",
              "Six ","Seven ","Eight ","Nine ","Ten ","Eleven ","Twelve   ",
              "Thirteen ","Fourteen ","Fifteen ","Sixteen ","Seventeen   ",
              "Eighteen ","Nineteen "};

    string tens[8]={"Twenty ","Thirty ","Forty ","Fifty ","Sixty  ","Seventy ","Eighty ","Ninety "};

    int n;

    cout << "Insert a Number : ";
    cin >> n;

    int num[9];

    for(int i=8 ;  i>=0 ; i--)
    {
        num=n%10;
        n=n/10;
    }

    bool a=(num[0]+num[1]+num[2] > 0);
    bool b=(num[3]+num[4]+num[5] > 0);
    bool c=(num[6]+num[7]+num[8] > 0);

    cout<<"\n";

    for(int k=0 ;  k<=6 ; k+=3)
    {
        if(num[k] != 0)
            cout << digits[num[k]] << "Hundred ";

        if(num[k+1] > 1)
            cout << tens[num[k+1] - 2];

        if(num[k+1] == 1)
            cout << digits[10 * num[k+1] + num[k+2]];

        if(num[k+1]!=1 && num[k+2]!= 0)
            cout << digits[num[k+2]];

        if(k==0 && a)
        {
            cout << "Million ";
            if(b || c) cout << ",\n";
        }

        if(k==3 && b)
        {
            cout << "Thousand ";
            if(c) cout << ",\n";
        }
    }

    cout << "\n\n";
}

وفي الختام ، هناك موقع على النت ، يقوم بنفس وظيفة البرنامج الذي كتبناه ، يمكنك الرجوع إلى ذلك الموقع ومقارنة النتائج التى ستحصل عليها بالنتائج التي يعطيك اياها برنامجنا . اتبع هذا الرابط .

◄ للأمانة العلمية ، يرجى ذكر المصدر عند النقل

شبكة تكنولوجيا المعلومات والهندسة التقنية

www.psd-development.com

الموضوع الاصلي~

http://psd-development.com/vb/t519.html

banar.png

تم تعديل هذه المشاركة بواسطة احمد حجير في 19 يونيو 2010 في 15:03

5
#2

شكرااا جدا اخى الكريم

يوجد البرنامج بالجافا و لكن من دون شرح علما بأنى لم ادرس الخوارزميات

و لكن موضوعك جميييل اخى الكريم

جعلة الله فى مبزان حسناتك

00020309t.gif

1958_1963.gif
#3

شكرا لمرورك

الشرح مش الي

الشرح لطالب مبدع اسمه بالشبكه :: حمزه صبح::

اعجبت بشغله فنقلته

#4

نعم كما قالت إسراء, لقد قام الأخ Dr.Robert بكتابة برنامج شبيه في قسم الجافا

@إسراء

إزاي يعني لم تدرسي خوارزميات حتي الأن؟؟!!!

هل درستي تراكيب بيانات (data structure) ?

#5

انا اخدت فعلا data structure

و لكن لسه هدرس حوارزميات فى سنة تالتة ان شاء الله

نظامنا مختلف شوية

جامعة بنها مثل جامعة عين شمس فى ترتيب المناهج و كدة

:)

00020309t.gif

1958_1963.gif
#6

مم

نصيحة غاليه جدا لا تضيعها أبد :

إياك ثم إياك ثم إياك أن تضيعي هذه الماده منك

فقد ندم من ضيعها 001.gif

#7

ههههههه

تقريبا عرفت من اللى ندم...... :lol:

بس الحمد لله المواد اللى بعيدة عن الرياضة و الفيزياء بتثبت فى الجمجمة

هو كورس ال oop بس اللى مش اخدناه فى الكلية صح بس الاعتماد على النفس كان شغال

اخدت مثلا oop ,file structure and data structure و لسه بقى فى السنتين اللى هيجوا هاخد اكيد حاجات مفيدة ان شاء الله

بس بسمع ان مادى الخوارزميات صعبة.... :mad:

00020309t.gif

1958_1963.gif
#8

الرياضه مهمه جدا (التحليل الإحصائي, التفاضل و التكامل , إلخ)

أخدتو file structure , طب كويس إحنا أخدناها في سنه رابع :D

أنا بنصحك نصيحتين أخريتين:

إدخلى قسم CS و إقري عن الخوارزميات من دلوقتي , القناه دي على يوتيوب فيها شرح جميييل و مبسط للخوارزميات إبحثي عن دروس ال sorting و إبدئي بيها

تم تعديل هذه المشاركة بواسطة هويدي في 20 يونيو 2010 في 03:16

#9

اكيد ان شاء الله قسم سى اس بس

فيه حاجة بقى محيرانى

انا اخدت رياضية اربع ترمات من سنة اولى و انا بدرسها

و كل واحد يقول دى اساس البرمجة

نفسى اعرف ازاى

انا بدرس معادلات و حاجات صعبة جدااااا

و كمان التحليل الاحصائى نظريات و حاجات شايفة انه صعب استعملها يعنى

او ممكن تفكيرى لسه مش وصل لدرجة دى يعنى بحس نفسى غبية ساعات :mad:

شكراا على اللينك بس انا كنت عايزة اتعلم jee بدلا من السى شارب؟؟ فى الاجازة يعنى

00020309t.gif

1958_1963.gif
#10

المعادلات دي بتتحول لخوازميات اللي في النهاية بتتحول لبرامج :D

إتعلمي EE طبعا

و إقري و لو يوم في الإسبوع عن الخوارزميات

دول دروس لل sorting :

أنا برضه رايح دلوقتي أنمي ذكائي و ألعب NFS:D

تم تعديل هذه المشاركة بواسطة هويدي في 20 يونيو 2010 في 03:39

#11

اها

على فكرة الدروس دى انا اخدتها فعلا بس Concepts لن نتطرق الى اى كود نهائيا

بس بجد متشكرة على اللينكات

و انا هروح انمى ذكائى انا كمان و العب سوليتير :lol:

00020309t.gif

1958_1963.gif
#12

من غير اللائق الخروج عن السياق الدخول في كلام شخصي

صاحب الموضوع جابلكم اياه حتى تستفيدو منه

وأنا أسمي هذا " تطفيش " من المنتدى

عامل الناس كما تحب ان يعاملوك

تم تعديل هذه المشاركة بواسطة هويدي في 21 يونيو 2010 في 16:37

البرمجة = الرياضيات

#13
اقتباس
منه وانتم ما شاء الله عاملينها chatting

وهذا قلة احترام لصاحب الموضوع التي مشاركته هي أول مشاركة

تعرف انا مش هرد عليك

لانك اصلا مش احترمت ان دى اول مشاركة ليك

لا تعليق

00020309t.gif

1958_1963.gif
#14

رويدك يا أخي, ربما أنت ترى أننا خرجنا من الموضوع, بينما أنا لا أري ذلك..

هذا رأيك الشخصي, فيجب عليك عرضه بطريقة أحسن من تلك التي إستخدمتها

فقط أنصحك أن تختار ألفاظك جيدا قبل أن تتسرع و تكتبها

شكرا لك..

ومرحبا بك في هذا المنتدي العريق

ملحوظه: قمت بحذف العبارات الخادشه للحياء

#15
هويدي كتب:

رويدك يا أخي, ربما أنت ترى أننا خرجنا من الموضوع, بينما أنا لا أري ذلك..

هذا رأيك الشخصي, فيجب عليك عرضه بطريقة أحسن من تلك التي إستخدمتها

فقط أنصحك أن تختار ألفاظك جيدا قبل أن تتسرع و تكتبها

شكرا لك..

ومرحبا بك في هذا المنتدي العريق

ملحوظه: قمت بحذف العبارات الخادشه للحياء

له يا أخي

العبارات ممكن تكون خادشة للمشاعر في أسوأ الأحوال

على اية حال : ( إن الحسنات يذهبن السيئات )

قد أكون فعلاً تسرعت

البرمجة = الرياضيات

#16

طيب مش مشكله~

انا راضي ~ الله يرضى عنكم جميعا~يارب~

ان شالله الموضوع يكون عجبكم بس~

أخي نام سبيس شكرا لتفهمك وتراجعك

#17
اقتباس
طيب مش مشكله~

انا راضي ~ الله يرضى عنكم جميعا~يارب~

36_11_16[1].gif

أنا بهزر معاك أخي namespace طبعا :D

ومرحبا بكم في منتداكم منتدي الفريق العربي للبرمجه و أنا بالمناسبة دي عازمكم على كوباتين شاي عندنا في قسم الجافا :D

#18

namespace بصراحة ردك كان نرفزنى و مش عرفت ارد عليك

كويس

اقصد افهمك ان الموضوع لم يخرج عن السياق

على الاقل اللى هيقراه هيعرف ان الموضوع له علاقة بالخوارزميات

و كمان الاخ هويدى وضع لينكات كويسة مشكور عليها

و كمان هنستخدم الرياضيات و الاحصاء هنستخدم فى ايه فى البرمجة على الاقل

واحدة مثلى فهمها بسيط عرفت الاجابة على الاسئلة

و كمان انا اللى هعملكوا الشاى و لا تزعلوا نفسكم :lol:

00020309t.gif

1958_1963.gif

مواضيع مشابهة