منتدى طلاب جامعة الحديدة

أخي الزائر إن لم تكن عضواً في المنتدى فنحن ندعوك لكي تنظم إلينا وشكراً تحيات مدير المنتدى طارق البغوي
منتدى طلاب جامعة الحديدة


    المختصر فى لغه البرمجه باستخدام لغه ال(c)الجزء(3)

    شاطر

    طارق البغوي
    المدير العام للمنتدى
    المدير العام للمنتدى

    ذكر
    عدد الرسائل : 2833
    العمر : 29
    البلد : الجهورية اليمنية
    القسم والمستوى : خريج قسم الرياضيات 2010م
    المزاج : متقلب ( مزاج شاعر )
    أختر علم دولتك :
      :
    السٌّمعَة : 14
    نقاط : 985
    تاريخ التسجيل : 28/09/2007

    بطاقة الشخصية
    تخصصي: رياضيات
    المحافظة: الحديدة

    المختصر فى لغه البرمجه باستخدام لغه ال(c)الجزء(3)

    مُساهمة من طرف طارق البغوي في الأربعاء أكتوبر 24, 2007 5:16 am

    بسم الله الرحمن الرحيم

    الجلسة الثالثة: وهي عن الـ Array (المصفوفات)

    سوف نتكلم في جلسة اليوم عن عصب البرمجة ... أو كما يطلقون عليها .. العامود الفقري ..

    ما رأيك قبل ذلك أن نرجع إلى الجلسه الأولى حيث تكلمنا عن الـ Datatype ... وطرحنا بآخر الجلسة ما هو المتغير ... أعتقد أنه آن الآوان لنعرف المتغير ...

    قلنا سابقاً أن كل Datatype يخزن في الذاكرة وبحسب حجمة, لنفرض بأن لدي إثنان من الـ Datatype ومن نفس النوع وهو Int.
    وهم كالتالي:
    الرقم الأول = 3
    الرقم الثاني = 5

    أتعلم كيف سيكون توضعهم في الذاكرة ... سيكون كالتالي




    الأرقام التي بالأسفل تمثل عناوين الذاكرة في الـ RAM والتي تتوضع عليها الأرقام ويكون بنظام الـ Hexadecimal.

    أعتقد بأن الآن أصبح من السهل التميز بين الرقمين ... حيث نستطيع إستدعاء أي رقم منهما بإستخدام عنوانه في الذاكرة...

    ولأكن كيف لي أن أعلم العنوان ... من هنا جائت فكرة المتغيرات (Variables), إذن المتغيرات هي أسماء مستعارة نطلقها على عناوين الذاكرة.

    لتصبح كالتالي:



    نمثل الشكل بالأعلا برمجياً كالتالي:
    Int A = 3
    Int F = 5

    أي أنني إستبدلت أرقام الذاكرة بي الحرفين A و F والذي يقوم بعملية الإستبدال هذا هو المترجم (Compiler)

    أرجوا أن تكون فكرة المتغيرات وضحت الآن ..

    حسناً .. ألا يراودك الفضول لتسأل ... لماذا قمت بجعل خانتان خاليتان بين الرقمين 3 و 5 .. هل يوجد هدف لذلك أم أنها محق مصادفة ..

    في الحقيقة عندما نريد أن نخزن الرقم 5 كما في الشكل بالأعلا يقوم الـ Compiler بعدة خطوات:
    أولاً: ما هو الحجم الذي يجب على المترجم أن يحجزة وبالطبع سيعتمد ذلك على الـ Datatype
    ثانياً: إيجاد مكان خالي بداخل الـ RAM مساوي لحجم الـ Datatype (كما قلنا في أول جلسه ... مثال البحث عن شقة).
    ثالثاً: طريقة البحث تكون بشكل عشوائي لذلك سميت بي RAM أي Random Access Memory.
    أي أنه على سبيل المثال سيقوم بالبحث عن المربع الأول في الذاكرة فإذا كان مشغول (يوجد به بيانات) سيذهب إلى التالي .. وهكذا إلى أن يصل إلى مربع خالي ليضع فيع معطياته.
    لذلك من الممكن أن نرى بأن الرقم 3 قد توضع في الأول والرقم 5 قد توضع في الآخر
    رابعاً: أعطي لعنوان الذاكرة الإسم المستعار وهو F
    خامساً: ضع في الـ F القيمة 5

    أعتقد بأن الأمور إلى الآن واضحة ....


    جميل .. الآن إذا طلبت منك جمع الرقمين 5 و 3 ... كيف سيتعامل الـ Compiler مع هذا الأمر ...

    سيقوم بالبحث عن الإسم المستعار للـ A والتي تمثل عنوان للرقم 3
    ومن ثم سيقوم بالبحث عن الإسم المستعار للـ F والتي تمثل عنوان للرقم 5
    ومن ثم يقوم بجمعهما...

    تكمن المشكلة في المثال السابق بأن المترجم سيستغرق وقت أثناء البحث عن العناوين ومن ثم إستخلاص النتائج ... وأيضاً تظهر المشكلة في صعوبة التحكم بهذه المعطيات لأنها بعيده عن بعضها البعض.. وأيضاً عند الرغبة بعمل عمليات مثل ترتيب تصاعدي أو تنازلي أو التريتب الفقاعي ... الخ

    ومن هنا طرح السؤال التالي: ألا توجد طريقة لجعل جميع البيانات المراد تخزينها في الـ RAM تأخذ عنوان واحد وتكون بجانب بعضها البعض.. جاء الجواب على يد الـ Array


    لنبدأ على بركة الله...

    إذن مما سبق نقول بأن الـ Array هي مجموعة من العناصر تترتب بجانب بعضها البعض في الذاكرة.

    ما رأيك بأن نلقي نظرة على تمثيل الـ Array في الذاكرة قبل الخوض في تفاصيله:





    لنحلل الشكل بالأعلا:

    إسم الـ Array وهو RAAD والذي بدورة يمثل الإسم المستعار لثلاثة عناوين في الذاكرة, أي وكأني دمجت الثلاثة عناوين بالأسم المستعار RAAD
    وأسفل منه وهي الأرقام المخزنه في الذاكرة وهم 3,5,9
    وأسفل منه عناوين هذه الأرقام في الذاكرة.
    وآخر صف يمثل الـ Index لكل متغير أو قل الإزاحة.


    ما رأيك الآن أن نمثل الشكل الذي بالأعلا برمجياً:

    Int RAAD[2]= {3,5,9}

    لنحلل الكود ...

    Int هي الـ datatype
    RAAD إسم الـ Array
    [2] يمثل حجم المنطقة المراد حجزها, وهذا يعني بأنها تتسع لثلاثة أرقام من نوع Int حيث ان العد يبدأ من صفر.
    {3,5,9} يمثل القيم المراد طباعتها


    حسناً الآن لو أردت طباعة الأرقام بداخل هذه الـ Array فكل ما علي فعله هو تحديد الـ Index للقيمة التي أريد طباعتها ... أي كالتالي

    إطبع RAAD[0]
    إطبع RAAD[1]
    إطبع RAAD[2]


    لتظهر النتيجة
    3
    5
    9

    هذه هي الـ Array بكل بساطة ... طبعاً هناك أمور أخري فرعية لم نذكرها مثل
    Multidimensional Arrays أو Array with Pointer

    &غريب الروح&
    طالب لا يضاها
    طالب لا يضاها

    ذكر
    عدد الرسائل : 304
    العمر : 24
    البلد : هــ ــ ذا أ نـ ـا ( غـ ــريـ ـب الـ ـروح )
    القسم والمستوى : طالب
    المزاج : رائع
      :
    السٌّمعَة : 4
    نقاط : 233
    تاريخ التسجيل : 21/12/2008

    بطاقة الشخصية
    تخصصي: شريعة وقانون
    المحافظة: الحديدة

    رد: المختصر فى لغه البرمجه باستخدام لغه ال(c)الجزء(3)

    مُساهمة من طرف &غريب الروح& في السبت أبريل 04, 2009 11:12 am

    يسلموا يالغلا على الموضوع الجميل والروعه
    لا عدمناك ولا عدمنا تواجدك ومواضيعك
    تقبل مروري المتواضع
    ومنتظرين جديدك

    تحياتي

      الوقت/التاريخ الآن هو السبت ديسمبر 10, 2016 7:26 am