Forum > Arabic

إستفسار في المصفوفات ديناميكية

(1/2) > >>

Al-Eid:

السلام عليكم
في لازاروس وحتى دلفي عند التصريح بالمصفوفات الديناميكية  من نوع Integer وبعد تحديد طولها بـ SetLength(i_arr,N) يكون عدد خانتها N+1 من 0 إلى N ولكن إذا كانت المصفوفة من نوع String في عدد خانتها يكون N أي من 0 إلى N-1 ممكن إستفسار لذلك
للتأكد يمكن تجريب المثالين التالينن

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.Button2Click(Sender: TObject);var i_arr: array of String ;    i : integer;begin SetLength(i_arr,4); for i :=0 to 4 do Begin  i_arr[i]:=inttostr(i);  showmessage(i_arr[i]); end;end;                                            

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.Button1Click(Sender: TObject);var i_arr: array of Integer ;    i : integer;begin SetLength(i_arr,4); for i :=0 to 4 do Begin  i_arr[i]:=i;  showmessage(inttostr(i_arr[i])); end;end;                                            

Zaher:
إذا كانت المصفوفة ب N عنصر
فمجالها من 0 إلى N-1
وليس N+1
وليس ايضا N

Zaher:
جرب استعمل Low و High


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---var  a: array of string;  i: Integer;begin  SetLength(a, 2);  a[0] := 'text1';  a[1] := 'text2';  for i := Low(a) to High(a) do  begin    Memo1.Lines.Add(IntToStr(i) + ': ' + a[i]);  end;end;  

Al-Eid:

--- Quote from: Zaher on August 07, 2021, 11:56:18 am ---إذا كانت المصفوفة ب N عنصر
فمجالها من 0 إلى N-1
وليس N+1
وليس ايضا N

--- End quote ---

نعم يا أستاذ أعلم ذلك لكني جربت الكود السابق فالبنسبة للمصفوفة Integer يكون عدد حلافتها من0 إلى N وهذا بالنسبة لي غريب مع العلم أني جربت ذلك حتى في دلفي وأعطتني نفس النتيجة
 

Zaher:
مافعلته انت انك استعملت العنصر ما بعد الاخير و لأجل الصدفة هذا العنصر ينتمي لنفس الكتلة الخاصة بالذاكرة فلم يعطيك اي خطأ لكن ممكن ان  يصدف ان يكون خارج كتلة الذاكرة المحجوزة للمصفوفة فيعطي خطأ و يفرقع معك البرنامج، جرب اضافة خيار في بداية الملف بعد اول سطر
{$RANGECHECKS ON}
سيختلف الوضع عندها

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

Navigation

[0] Message Index

[#] Next page

Go to full version