Recent

Author Topic: إستفسار في المصفوفات ديناميكية  (Read 3879 times)

Al-Eid

  • New Member
  • *
  • Posts: 38
إستفسار في المصفوفات ديناميكية
« on: August 07, 2021, 06:55:15 am »

السلام عليكم
في لازاروس وحتى دلفي عند التصريح بالمصفوفات الديناميكية  من نوع Integer وبعد تحديد طولها بـ SetLength(i_arr,N) يكون عدد خانتها N+1 من 0 إلى N ولكن إذا كانت المصفوفة من نوع String في عدد خانتها يكون N أي من 0 إلى N-1 ممكن إستفسار لذلك
للتأكد يمكن تجريب المثالين التالينن
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. var i_arr: array of String ;
  3.     i : integer;
  4. begin
  5.  SetLength(i_arr,4);
  6.  for i :=0 to 4 do
  7.  Begin
  8.   i_arr[i]:=inttostr(i);
  9.   showmessage(i_arr[i]);
  10.  end;
  11. end;                                          
  12.  

Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var i_arr: array of Integer ;
  3.     i : integer;
  4. begin
  5.  SetLength(i_arr,4);
  6.  for i :=0 to 4 do
  7.  Begin
  8.   i_arr[i]:=i;
  9.   showmessage(inttostr(i_arr[i]));
  10.  end;
  11. end;                                          
  12.  

Zaher

  • Hero Member
  • *****
  • Posts: 648
    • parmaja.org
Re: إستفسار في المصفوفات ديناميكية
« Reply #1 on: August 07, 2021, 11:56:18 am »
إذا كانت المصفوفة ب N عنصر
فمجالها من 0 إلى N-1
وليس N+1
وليس ايضا N

Zaher

  • Hero Member
  • *****
  • Posts: 648
    • parmaja.org
Re: إستفسار في المصفوفات ديناميكية
« Reply #2 on: August 07, 2021, 12:07:21 pm »
جرب استعمل Low و High

Code: Pascal  [Select][+][-]
  1. var
  2.   a: array of string;
  3.   i: Integer;
  4. begin
  5.   SetLength(a, 2);
  6.   a[0] := 'text1';
  7.   a[1] := 'text2';
  8.   for i := Low(a) to High(a) do
  9.   begin
  10.     Memo1.Lines.Add(IntToStr(i) + ': ' + a[i]);
  11.   end;
  12. end;
  13.  


Al-Eid

  • New Member
  • *
  • Posts: 38
Re: إستفسار في المصفوفات ديناميكية
« Reply #3 on: August 07, 2021, 12:11:32 pm »
إذا كانت المصفوفة ب N عنصر
فمجالها من 0 إلى N-1
وليس N+1
وليس ايضا N

نعم يا أستاذ أعلم ذلك لكني جربت الكود السابق فالبنسبة للمصفوفة Integer يكون عدد حلافتها من0 إلى N وهذا بالنسبة لي غريب مع العلم أني جربت ذلك حتى في دلفي وأعطتني نفس النتيجة
 
« Last Edit: August 07, 2021, 12:25:50 pm by Al-Eid »

Zaher

  • Hero Member
  • *****
  • Posts: 648
    • parmaja.org
Re: إستفسار في المصفوفات ديناميكية
« Reply #4 on: August 07, 2021, 12:21:50 pm »
مافعلته انت انك استعملت العنصر ما بعد الاخير و لأجل الصدفة هذا العنصر ينتمي لنفس الكتلة الخاصة بالذاكرة فلم يعطيك اي خطأ لكن ممكن ان  يصدف ان يكون خارج كتلة الذاكرة المحجوزة للمصفوفة فيعطي خطأ و يفرقع معك البرنامج، جرب اضافة خيار في بداية الملف بعد اول سطر
{$RANGECHECKS ON}
سيختلف الوضع عندها

أما بالنسبة لما حدث مع ال string فلأن النص لكل عنصر يحجز مرة اخر بكتلة ذاكرة مستقلة عن كتلة ذاكرة المصفوفة، و ستحصل على نتائج تابعة للحظ فقط
التخبيص لا يعول عليه :)

Al-Eid

  • New Member
  • *
  • Posts: 38
Re: إستفسار في المصفوفات ديناميكية
« Reply #5 on: August 07, 2021, 12:40:41 pm »
مافعلته انت انك استعملت العنصر ما بعد الاخير و لأجل الصدفة هذا العنصر ينتمي لنفس الكتلة الخاصة بالذاكرة فلم يعطيك اي خطأ لكن ممكن ان  يصدف ان يكون خارج كتلة الذاكرة المحجوزة للمصفوفة فيعطي خطأ و يفرقع معك البرنامج، جرب اضافة خيار في بداية الملف بعد اول سطر
{$RANGECHECKS ON}
سيختلف الوضع عندها

أما بالنسبة لما حدث مع ال string فلأن النص لكل عنصر يحجز مرة اخر بكتلة ذاكرة مستقلة عن كتلة ذاكرة المصفوفة، و ستحصل على نتائج تابعة للحظ فقط
التخبيص لا يعول عليه :)
شكرا على التوضيح يبدو أنه يستحسن إستعمال Low(a) to High(a) دوما

pascal111

  • Moderator
  • Sr. Member
  • *****
  • Posts: 359
  • Un trabajo en equipo para programas serias.
Re: إستفسار في المصفوفات ديناميكية
« Reply #6 on: August 17, 2021, 01:14:14 pm »
شكرا على التوضيح يبدو أنه يستحسن إستعمال Low(a) to High(a) دوما
استخدام high وlow من وجهة نظري مثلما تتعامل مع المجاهيل في الرياضيات دون معرفة قيمها الحقيقيّة على وجه الدّقة ،وهي طريقة ذكيّة للتعامل مع القيم دون استحضارها دائماً في ذاكرتكـ وتخص التفكير الرياضي.

 

TinyPortal © 2005-2018