سلام
چطوری میشود متغیر و آرایه ای را در زمان اجرا درست کرد
با تشکر
رامین
:oops:
سلام
چطوری میشود متغیر و آرایه ای را در زمان اجرا درست کرد
با تشکر
رامین
:oops:
چرا راه طبیعی اش را نمیری . بجای آرایه از یک لینک لیست استفاده کن . والا من تعریف آرایه رو به صورت پویا بلد نیستم و تا جایی که میدونم توی دلفی نمیتونیم آرایه رو به صورت پویا تعریف کرد . فقط در بعضی زبانها تعریف متغیر به صورت زمان اجرا است . مثل زبان (لیست )
اگه اشتباه نکرده باشم .
.................................................. ........
به امید روزی که ایران از نظر کامپیوتر به خدایی برسد . با تلاش مهم برنامه نویسان و علاقه مندان به کامپیوتر .
شما میتونید از TList استفاده کنید.
همچنین در دلفی شما قادر به مشخص کردن تعداد عناصر آرایه نیز هستید (Dynamic Array)
Var ary : Array[1..10] of integer;
begin
//change the array size
SetLength(ary,20);
end;
توسط پراسیجر GetMem میتونید یک میزان مشخص از حافظه رو بر حسب تعداد بایت مورد نیاز تخصیص بدید. توسط پراسیجر FreeMem هم قادرید که حافظه تخصیص یافته رو آزاد کنید.
رامین جان،
بسته به کاری که قراره انجام بشه دلفی راه کارهای مختلفی برای تخصیص حافظه در اختیار میگذاره. اگر موردی که درش نیاز به تخصیص حافظه در زمان اجرا داری رو بگی میشه یک روش مناسب برای اون گفت وگرنه همه جوابهایی که تا حالا تو اینجا گفته شده میتونند اشتباه یا درست باشند.
روشهای زیادی برای حافظه گرفتن داره!!
واسه اینکه درگیری زیادی با پارامترهای عجیب غریب نداشته باشی یکی strings است که میوتنی از نوع اون با استفاده از stringlist ایجاد کنی
البته بستگی به کاربری داره!!
سلام
در برنامه اگر شرطی برگرار شد 10 عدد تولید میشود که با ید در ارایه یا متغیر ذخیره شود تا در جایه دیگه استفاده بشه!
:oops:
بهترین انتخاب ساده ترین راه است
Var:wink:
arr : Array[1..10] of integer
سلام
منمی خواهم اگر شرط بر قرار نبود آرایه ایجاد نشه !
type
TMyArray = array [1..10]of integer;
var
MyArray: ^TMyArray;
سپس برای تعریف و استفاده:
GetMem(MyArray,sizeof(MyArray^));
MyArray^[1] := 12;
...
FreeMem(MyArray);
وقتی که کل تعداد عناصر آرایه رو میدونی و تعداد اونها هم زیاد نیست دیگه نیازی به تخصیص حافظه در زمان اجرا نیست٬ چون تنها باعث پیچیدگی کد میشه و هیچ فایدهای نداره.
در هر حال Delphi نوعی از آرایه به نام Dynamic Array داره که به عنوان مثال برای آرایهای از اعداد صحیح اینجوری تعریف میشه:
var
A: array of integer;
برای تخصیص حافظه از تابع SetLength استفاده میکنیم. برای مثال برای 10 عنصر به این صورت هست:
SetLength(A, 10);
برای آزاد کردن حافظه به دوصورت زیر میشه اینکار رو کرد:
SetLength(A, 0);
یا
َA := nil;
با استفاده از تابع SetLength هم چنین میشه اندازه آرایه رو کم یا زیاد کرد بدون اینکه مقادیر خانههای قبلی دست بخوره (خونههایی که حذف میشن منظورم نیست). اندیس خونهها هم از صفر شروع میشن تا یکی کمتر از اندازه آرایه و اندازه آرایه رو هم میشه با تابع Length فهمید. برای مثال:
for I := 0 to Length(A) - 1 do
A[I] := Random(100);
اگر آرایه از نوع String یا یک Dynamic Array دیگه باشه٬ بعد از تعیین طول آرایه باید یک بار به تابع Initialize پاس بشه مثل زیر.
var
S: array of String;
. . .
SetLength(S, 1000);
Initialize(S[0], 1000);
و قبل از آزاد کردن حافظه اون هم باید به تابع Finalize پاس داده بشه:
Finalize(S[0], 1000);
S := nil;
با سلام
در مورد Initialize و Finalize میشه بیشتر توضیح بدین از بس وقتی با Tstrings کار کردم این رو دیدم خسته شدم.
با تشکر