بسم الله الرحمن الرحيم
المصفوفات 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
