مجلس أوراق ملونة أوراقـ متساقطهـ على شغافـ قلوبكمـ .. [تم تحديث قوانين القسم نسعد بإطلاعكم]


عدد مرات النقر : 21,188
عدد  مرات الظهور : 35,258,027

موضوع مغلق
 
LinkBack أدوات الموضوع انواع عرض الموضوع
قديم 21-03-2005, 05:21 AM   #1

الصورة الرمزية عبد الله الساهر

 رقم العضوية :  1
 تاريخ التسجيل :  22-07-2004
 المشاركات :  70,195
 الدولة :  ムレ3乃乇乇尺
 الجـنـس :  ذكر
 العمر :  38
 عدد النقاط :  243859
 قوة التقييم :  عبد الله الساهر تم تعطيل التقييم
 SMS :

حتى لو اجتهدت و قطعت فؤادك.. ووضعته للناس في طبق فضي ليرضوا عنك لن تفلح وربما لن تصل لمستوى يرضيك أنت عن نفسك فاجتهد ليكون الله وحده راضياً عنك وأغمض عينيك عن ما سواه

 اخر مواضيع » عبد الله الساهر
 تفاصيل مشاركات » عبد الله الساهر
 أوسمة و جوائز » عبد الله الساهر
 معلومات الاتصال بـ عبد الله الساهر

افتراضي المصفوفات ..2



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


محتوى الدرس:

كيفية تعريف مصفوفة ذات حجم متغير Dynamic Array.
حفظ محتويات الـDynamic Arrays عند إعادة تعريفيها.
جملة ReDim.


المصفوفات متغيرة الحجم Dynamic Array:

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

ولصناعة Dynamic Array نتبع التالي:

نعلن عنها بأحد أوامر الإعلان الموضحة في الدرس السابق (Public or Private or Dim or Static) ونجعلها ديناميكية بعدم أي رقم في الأقواس كما يوضح المثال التالي:

Dim AnyArray( )

نعيد الإعلان عنها مع تحديد عدد العناصر باستخدام جملة ReDim كما في المثال التالي:

ReDim AnyArray( x+1 )

ملاحظات:

يمكن لجملة ReDim الظهور فقط في الـProcedure. وبعكس جملتي Dim, & Static فإن جملة ReDim قابلة للتنفيذ Executable.
تستخدم جملة ReDim نفس الصيغة Syntax المستخدم مع مصفوفات الحجم الثابت Fixed Array.
كل جملة من جمل ReDim يمكنها تغيير عدد العناصر بالإضافة إلى الحد الأعلى والحد الأدنى لكل بعد للمصفوفة، ومع ذلك فإن عدد الأبعاد في المصفوفة لا يمكن تغييره.
مثال:

لصناعة مصفوفة M كمصفوفة متغيرة الحجم، نعلن عنها أولاً في الـModule على النحو التالي:

Dim M( ) As Integer

ثم نعيد الإعلان عنها داخل الـProcedure على النحو التالي:

Sub ANY_NAME()



ReDim M(9, 15)

End Sub



حفظ محتويات المصفوفة متغيرة الحجم عند إعادة تعريفها:

لابد من التنويه إلى أنه تمحى جميع القيم المخزنة في المصفوفة كل مرة يعاد فيها تنفيذ جملة ReDim. ويجعل الفيجيوال بيسك القيم كالتالي:

Empty Value في حالة الــــ Variant Array
Zero في حالة الــــ Numeric Array
Zero-Length String في حالة الــــ String Array
Nothing في حالة الــــ Array of ******************s

وهذا مفيد عندما نريد تجهيز المصفوفة لبيانات جديدة أو عندما نريد اختزال حجم المصفوفة لتأخذ أقل مساحة ممكنة في الذاكرة. ولكن أحياناً نريد تغيير حجم المصفوفة دون فقد بياناتها!
يمكننا فعل ذلك باستخدام جملة ReDim مع كلمة Preserve وتعني "احفظ".

مثال:

الكود التالي يستخدم جملة ReDim لتخصيص، ثم إعادة تخصيص مساحة تخزينية لمصفوفة متغيرة الحجم، مع افتراض أن الـOption ************ يساوي 1:

Dim MyArray ( ) As Integer 'declare Dynamic Array

ReDim MyArray( 5 ) 'allocate 5 elements
For I = 0 To 5 'loop 5 times
MyArray(I) = I 'initialize array elements
Next I

ReDim MyArray( 10 ) 'allocate 10 elements
For I = 0 To 10 'loop 10 times
MyArray(I) = I 'initialize array elements
Next I

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

ReDim Preserve MyArray( 10 )

والآن يمكننا كتابة ملخص متكامل لجملة ReDim.



جملة ReDim:

تستخدم في مستوى الـProcedure لإعادة تخصيص allocates مساحة تخزينية storage space لمصفوفة متغيرة الحجم Dynamic array.

صيغتها Syntax:

ReDim [Preserve] varname(sub******************s) [As type] [, varname (sub******************s) [As type]]

حيث أن:

Preserve اختيارية، وتستخدم لحفظ البيانات الموجودة في المصفوفة عند تغيير حجم آخر بعد فيها.
varname اسم المتغير (اسم المصفوفة).
sub******************s أبعاد المصفوفة (عددهم على الأكثر 60) وتستخدم الشكل التالي:
[lower To] upper [, [lower To] upper]

والقيمة الأدنى تحددها جملة Option ************ وإذا لم توجد، يكون الحد الأدنى هو الافتراضي (صفر).

type اختيارية، وتحدد نوع بيان عناصر المصفوفة. وقد تكون أي من الأنواع التالية:
Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, ******************, String, Variant, User-defined.

[, varname (sub******************s) [As type]] اختيارية، لإعادة تحجيم مصفوفة أخرى.

ملاحظات هامة:

جميع ما ذكر في الصيغة داخل قوسين مربعين [] يعتبر اختياري يمكن الاستغناء عنه حين عدم الحاجة إليه.
تستخدم جملة ReDim لتحجيم أو إعادة تحجيم مصفوفة متغيرة الحجم Dynamic Array والتي بالفعل قد أعلن عنها مسبقاً باستخدام أي من الجمل Dim, Private, Public مع أقواس فارغة (أي بدون ذكر الأبعاد).
يمكن تكرار استخدام جملة ReDim لتغيير عدد العناصر والأبعاد لمصفوفة، ومع ذلك لا يمكن الإعلان عن مصفوفة بنوع معين من البيانات ثم إعادة تعريفها لاحقاً مع تغيير نوع البيان لنوع آخر إلا إذا كانت المصفوفة محتواه في variant.
إذا كانت المصفوفة محتواه في variant فإن نوع بيان العناصر يمكن أن يتغير باستخدام المقطع As Type إلا إذا استخدمنا كلمة Preserve ففي هذه الحالة لا يسمح بتغييرات.
إذا استخدمنا كلمة Preserve يمكن فقط تحجيم البعد الأخير للمصفوفة ولا يمكن تغيير عدد الأبعاد على الإطلاق.
إذا كان للمصفوفة بعد واحد فيمكن إعادة تحجيم هذا البعد لأنه البعد الأخير والوحيد بالمصفوفة.
وإذا كان للمصفوفة بعدين أو أكثر فيمكن فقط تغيير حجم البعد الأخير مع الاحتفاظ بمحتويات المصفوفة.
عندما نستخدم Preserve يمكن تغيير حجم المصفوفة بتغيير الحد الأعلى بينما ينتج لدينا خطأ حين تغيير الحد الأدنى.
إذا صنعنا مصفوفة أصغر مما كانت فإن بيانات العناصر المخزنة سوف تفقد.
إذا مررنا pass مصفوفة إلى Procedure بالـRefrence فإنه لا يمكن تغيير أبعادها من داخل الـProcedure.
تحذير:

جملة ReDim ستعمل وكأنها جملة إعلان إذا كان المتغير (المصفوفة) التي تعلن عنه غير موجود على مستوى الـProcedure أو الـModule. وإذا كان هناك متغير آخر بنفس الاسم قد أنشئ بعد ذلك وحتى لو كان في النطاق ككل Scope؛ فإن ReDim سوف ترجع للمتغير الأخير ولن يتسبب عن ذلك خطأ في الترجمة Compilation error حتى ولو كانت جملة Option Explicit فعّالة. وبذلك لن يدرك المبرمج أنه هناك خطأ بالشيفرة code.
ولتفادي هذا التعارض لا ينبغي استخدام جملة ReDim كجملة إعلان بدلاً من Dim مثلاً، ولكن نستخدمها فقط لإعادة تعريف حجم المصفوفة.



مثال(1):

يبين المثال التالي كيف يمكن زيادة حجم البعد الأخير للمصفوفة متغيرة الحجم بدون محو البيانات الموجودة فيها:

ReDim X(10,10,10)
ReDim Preserve X(10,10,15)

مثال(2):

لإدخال قائمة من الأعداد غير معلومة العدد مسبقاً (أي وقت كتابة الشيفرة code) ويسأل عن عددها عند تشغيل الـcode:

Dim X() As Integer
N = InputBox("أدخل عدد العناصر من فضلك")
ReDim X(N)
For I = 1 To N
X(I) = InputBox("أدخل عنصر من القائمة")
Next I

مثال(3):

لإدخال قائمة من الأعداد غير معلومة العدد مسبقاً (أي وقت كتابة الشيفرة code)، ولا يسأل عن عددها عند تشغيل الـcode ولكن يقوم المستخدم بإدخال صفر (أو أي قيمة متقف عليها) عند الانتهاء من ادخال عناصر المصفوفة:

Dim X()
Do
prompt=" أدخل عنصراً من القائمة وفي النهاية أدخل صفر"
DummyVariable = InputBox(prompt)
IF DummyVariable <> 0 Then
UpperLimit = UpperLimit + 1
ReDim Preserve X(UpperLimit)
X(UpperLimit) = DummyVariable
Else
Exit Do
End IF
Loop




وإلى هنا نكون قد انتهينا من دروس المصفوفات وجميع ما يتعلق بها في الفيجيوال بيسك، أرجو من الله أخي الكريم أن تفيدك :)




توقيع :





رحمك الله يا أنس
وجعل الفردوس دارك ومستقرك



عبد الله الساهر غير متواجد حالياً
رسالة لكل زوار منتديات العبير

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

قديم 28-03-2005, 03:22 AM   #2

الصورة الرمزية صمت الجمال

 رقم العضوية :  35
 تاريخ التسجيل :  06-09-2004
 المشاركات :  1,120
 العمر :  38
 عدد النقاط :  10
 قوة التقييم :  صمت الجمال is on a distinguished road
 اخر مواضيع » صمت الجمال
 تفاصيل مشاركات » صمت الجمال
 أوسمة و جوائز » صمت الجمال
 معلومات الاتصال بـ صمت الجمال

افتراضي


شكرا لك عبد الله الساهر


وموضوع جدا مهم في الفيجوال

توقيع :




أنا رحاله صغير أحمل في جيبي بذور ( بذور محبه ) كلما التقيت بإنسان زرعة معه بذوري إن سقاها كبرت وأينعت وإن لم يسقها ماتت واندثرت
وما همني إن سقاها أو ماتت ما يهمني هو عندما أصعد قمت الجبل وأنظر خلفي وأرى بساتين المحبة أشعر حينها بالإنسانيه


صمت الجمال غير متواجد حالياً
قديم 02-05-2005, 03:41 AM   #3

الصورة الرمزية عبد الله الساهر

 رقم العضوية :  1
 تاريخ التسجيل :  22-07-2004
 المشاركات :  70,195
 الدولة :  ムレ3乃乇乇尺
 الجـنـس :  ذكر
 العمر :  38
 عدد النقاط :  243859
 قوة التقييم :  عبد الله الساهر تم تعطيل التقييم
 SMS :

حتى لو اجتهدت و قطعت فؤادك.. ووضعته للناس في طبق فضي ليرضوا عنك لن تفلح وربما لن تصل لمستوى يرضيك أنت عن نفسك فاجتهد ليكون الله وحده راضياً عنك وأغمض عينيك عن ما سواه

 اخر مواضيع » عبد الله الساهر
 تفاصيل مشاركات » عبد الله الساهر
 أوسمة و جوائز » عبد الله الساهر
 معلومات الاتصال بـ عبد الله الساهر

افتراضي


شكرا لكي صمت وتواصلك الجميل

وان شاء الله يكون اقوى قسم في المنتدى

عبد الله الساهر غير متواجد حالياً
قديم 10-05-2005, 11:21 PM   #4

الصورة الرمزية أمـ جود ـ

 رقم العضوية :  4
 تاريخ التسجيل :  22-07-2004
 المشاركات :  6,182
 العمر :  36
 عدد النقاط :  32
 قوة التقييم :  أمـ جود ـ is on a distinguished road
 اخر مواضيع » أمـ جود ـ
 تفاصيل مشاركات » أمـ جود ـ
 أوسمة و جوائز » أمـ جود ـ
 معلومات الاتصال بـ أمـ جود ـ

افتراضي


والله احسن من الدروس اللي تعلمتها في دراستي

يسلموا حبيب قلبي

توقيع :



مٍَآعُآدُ يًرٍضَيًنٍيً وَفٍآ...و لآيًزٍعُلنٍيً جََفٍآ..
مٍَتِسِآويًهُـ َفٍيً خٍآطَرٍيً ..ظِلمٍَـ آلبُشُرٍ وآنٍصِآَفٍهُمٍَـ..
ولو تِوَقٍَِفٍ آلدُنٍيًآ عُلىٍ شُمٍَعُ آلغٌَرٍآمٍَـ آلليً طََفٍآ..
بُعُضَ آلشُمٍَوعُ..أنٍآ أتِعُمٍَدُ گسِرٍهُآ وآتِلآَفٍهُآ..

أمـ جود ـ غير متواجد حالياً
قديم 18-05-2005, 05:48 PM   #5

الصورة الرمزية عبد الله الساهر

 رقم العضوية :  1
 تاريخ التسجيل :  22-07-2004
 المشاركات :  70,195
 الدولة :  ムレ3乃乇乇尺
 الجـنـس :  ذكر
 العمر :  38
 عدد النقاط :  243859
 قوة التقييم :  عبد الله الساهر تم تعطيل التقييم
 SMS :

حتى لو اجتهدت و قطعت فؤادك.. ووضعته للناس في طبق فضي ليرضوا عنك لن تفلح وربما لن تصل لمستوى يرضيك أنت عن نفسك فاجتهد ليكون الله وحده راضياً عنك وأغمض عينيك عن ما سواه

 اخر مواضيع » عبد الله الساهر
 تفاصيل مشاركات » عبد الله الساهر
 أوسمة و جوائز » عبد الله الساهر
 معلومات الاتصال بـ عبد الله الساهر

افتراضي


شكرا لك وان شاء الله تكون الفائدة اكبر من خلال العبير

عبد الله الساهر غير متواجد حالياً
موضوع مغلق

مواقع النشر (المفضلة)


أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة



الساعة الآن 04:14 PM


Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0 TranZ By Almuhajir
Ads Organizer 3.0.3 by Analytics - Distance Education
جميع الحقوق محفوظة لـ : منتديات العبير
المحتوى المنشور فى موقع العبير لايعبر بالضرورة عن وجهة نظر الإدارة وإنما يعبر عن وجهة نظر كاتبها