مقدمة إلى المصفوفات في دلفي

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

المصفوفات Arrays , تعتبر من أهم بنى البيانات (Data structures) , و تعتبر أيضاً البنية الأساسية لبقية بنى البيانات (مثل Stack و Queue ..) .

والمصفوفة هي مجموعة من العناصر (البيانات أو المتغيرات) من نفس النوع (مصفوفة متغيرات integer , مصفوفة متغيرات char ..) .

أنواع المصفوفات في دلفي :

هناك نوعان أساسيان من المصفوفات في دلفي :

1- مصفوفات ساكنة Static arrays : وهي التي يكون عددها معروفاً ومحدداً عند تصميم البرنامج أو كتابته , وهذا النوع من المصفوفات لا يمكن تغيير عدد عناصره أثناء تنفيذ البرنامج .

مثلاً مصفوفة تحتوي على درجات 5 طلاب , فهي من النوع الساكن لأن عناصرها محددة مسبقاً ومعروفة .

ويمكن تعريف المصفوفة الساكنة على الشكل التالي :

var ArrayName : array [ElementsNumber] of DataType ;

فمثلاً المصفوفة التالية :

var Marks : array [0..4] of integer

هي مصفوفة اسمها Marks , وعدد عناصرها 5 (من 0 إلى 4) , وعناصرها من النوع الرقمي Integer .

وبعد تعريف المصفوفة , يمكن تعيين قيم عناصرها بالترتيب أو على نحو منفصل

فيمكن مثلاً تعيين درجات الطلاب بالكود التالي :

var i : integer ;
begin
for i := 0 to 4 do
Marks[i] := i ;

في السطر الأول بدأنا حلقة for..do والتي تبدأ من 0 إلى 4 وقيمتها تكون في المتغير i .

في السطر الثاني نعين قيمة الدورة (i) إلى العنصر ذو الترتيب i من المصفوفة Marks .

هنا سيحصل كل عنصر على قيمة = ترتيبه في المصفوفة , فالعنصر الأول (ترتيبه 0) يحصل على القيمة 0 , والعنصر الثاني (ترتيبه 1) يحصل على القيمة 1 وهكذا ..

ملاحظة : يفضل استعمال الدالتين Low و High لتعيين رقم بداية ونهاية حلقة for..do عند التعامل مع المصفوفات , فيصبح الكود :

for i := Low(Marks) to High(Marks) do

حيث تقوم الدالة Low بإرجاع أدنى ترتيب داخل لمصفوفة الممررة إليها , وترجع الدالة High أقصى ترتيب داخل لمصفوفة الممررة إليها .

ومن خلال الكود التالي , يمكن عرض عناصر المصفوفة (في تطبيق Console) :

for i := Low(Marks) to High(Marks) do
WriteLn(Marks[i]) ;
ReadLn ;

من خلال حلقة for..do السابقة , سيتم عرض عناصر المصفوفة بالترتيب في نافذة Console .

يمكن أيضا تعيين قيم عناصر المصفوفة بشكل منفصل على النحو التالي :

Marks[0] := 0 ;
Marks[1] := 1 ;
Marks[2] := 2 ;
...

لكن يلاحظ على هذه الطريقة أنها طويلة (في المصفوفات التي تزيد عناصرها عن 100 عنصر مثلاً) , وأنها متعبة وتستغرق وقتاً طويلاً .

ويصبح الكود النهائي لتطبيق المصفوفات الساكنة :

var
Marks : array[0..4] of integer ;
i : integer ;
begin
try
for i := Low(Marks) to High(Marks) do
Marks[i] := i ;
for i := Low(Marks) to High(Marks) do
WriteLn(Marks[i]) ;
ReadLn ;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.

———————————————-

2- المصفوفات الديناميكة Dynamic Arrays : وهي المصفوفات التي يكون عدد عناصرها مجهولاً عند تصميم أو كتابة البرنامج , ويمكن تعيين عدد عناصرها أثناء تنفيذ البرنامج .

فمثلاً مصفوفة مخصصة لتخزين درجات الطلاب , لكن عدد الطلاب مجهول عند كتابة البرنامج (بالنسبة للمبرمج) , ولكنه معروف للمستخدم عندها يجب استخدام مصفوفة ديناميكية لتمكين المستخدم من تعيين عناصرها أثناء استخدامه للبرنامج .

وتعريف المصفوفة الديناميكية مشابه لتعريف المصفوفة الساكنة , باستثناء تعيين عدد العناصر (لأنه مجهول أصلاً !!) , ويكون على الشكل التالي :

var Marks : array of integer ;

ويمكن تعيين عناصرها من خلال دالة SetLength على النحو التالي :

SetLength(Array, NewLength) ;

فمن خلال الأمر التالي (في تطبيق Console) يمكن تعيين عناصر المصفوفة الديناميكية Marks من خلال إدخال المستخدم :

var
L: Integer ;
begin
ReadLn(L) ;
SetLength(Marks, L) ;

ويمكن تعيين عناصر المصفوفة أيضاً من خلال حلقة (for..do مثلاً) أو بطريقة مفصلة

فيصبح الكود النهائي لتطبيق المصفوفات الديناميكية على الشكل التالي :

var
Marks : array of integer ;
i, L : integer ;
begin
try
WriteLn('Insert the new length :') ;
ReadLn(L) ;
SetLength(Marks, L) ;
for i := Low(Marks) to High(Marks) do
Marks[i] := i ;
for i := Low(Marks) to High(Marks) do
WriteLn(Marks[i]) ;
ReadLn ;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.

ملاحظة : يبدأ ترتيب المصفوفة الديناميكية من الصفر .

الأمثلة :

يمكنك تحميل المثالين المشروحين في هذا الدرس من خلال الرابط التالي :

http://www.4shared.com/file/118918028/dfed408d/Arrays_lesson.html

8 responses to “مقدمة إلى المصفوفات في دلفي

  1. السلام عليكم ,,

    شكرا أخي دلفاوي درس جميل وخفيف ,,

    أنا مبتدئ جدا بدلفي ,, وكنت دائما أتسائل : ما فائدة المصفوفات ؟

    ومتى نستخدمها ؟

    أرجو أن تجيبني بــ طريقة برمجة برنامج مثلا يعتمد على المصفوفات . . أو مثال أو شي . .

    وجزاك الله كل خير

    • فائدتها تخزين البيانات , ويمكن استخدامها مثلاً في تخزين عناصر List أو مجموعة قيم
      فمثلاً , يمكن ملأ عناصر مصفوفة بالأرقام من 1 إلى 250 مثلاً بطريقة أسهل من القيام بتعريف 250 متغير لكل منهم قيمة معينة

  2. السلام عليكم
    بارك الله فيك ولكن لديا استفسار عند تطبيق دلفي هل يمكن ألا نكتب WriteLn ReadLn

    • WriteLn تستخدم لطباعة نص أو قيمة ما في نافذة التطبيق
      ReadLn استخدمتها حتى لا يغلق التطبيق بمجرد تشغيله فلن يكون هناك وقت كافي لرؤية النتائج (جربي إزالة ReadLn لتعرفي ما أقصد)

      لكن يمكنكي إزالتهما إذا لم تكن نتائج التطبيق مهمة (كان يؤدي وظيفة معينة ثم يغلق تلقائياً دون عرض أي نتائج مثلاً)

    • عذراً على التأخير
      WriteLn لكتابة جملة أو رقم في شاشة البرنامج (Console)
      ReadLn هي أصلاً تستخدم لاستقبال المعطيات من المستخدم وتخزينها في متغير يمرر لهذه الدالة , لكن استخدامها بدون معطيات في نهاية الكود يؤدي إلى جعل البرنامج ينتظر أي معطى من المستخدم ولا يغلق إلا عندما يضغط المستخدم زر Enter , بدونها ستظهر نافذة البرنامج للحظة وعند انتهاء تنفيذ الكود سيغلق البرنامج مباشرة دون ترك فرصة للمستخدم لرؤية النتائج .

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s