View Full Version : تعریف آرایه و متغیر در زمان اجرا
ramin_rp
شنبه 08 آذر 1382, 12:57 عصر
سلام
چطوری میشود متغیر و آرایه ای را در زمان اجرا درست کرد
با تشکر
رامین
:oops:
شنبه 08 آذر 1382, 17:26 عصر
چرا راه طبیعی اش را نمیری . بجای آرایه از یک لینک لیست استفاده کن . والا من تعریف آرایه رو به صورت پویا بلد نیستم و تا جایی که میدونم توی دلفی نمیتونیم آرایه رو به صورت پویا تعریف کرد . فقط در بعضی زبانها تعریف متغیر به صورت زمان اجرا است . مثل زبان (لیست )
اگه اشتباه نکرده باشم .
.................................................. ........
به امید روزی که ایران از نظر کامپیوتر به خدایی برسد . با تلاش مهم برنامه نویسان و علاقه مندان به کامپیوتر .
Farhad.B.S
شنبه 08 آذر 1382, 17:44 عصر
شما میتونید از TList استفاده کنید.
همچنین در دلفی شما قادر به مشخص کردن تعداد عناصر آرایه نیز هستید (Dynamic Array)
Var ary : Array[1..10] of integer;
begin
//change the array size
SetLength(ary,20);
end;
SyntaxCheck
یک شنبه 09 آذر 1382, 02:24 صبح
توسط پراسیجر GetMem میتونید یک میزان مشخص از حافظه رو بر حسب تعداد بایت مورد نیاز تخصیص بدید. توسط پراسیجر FreeMem هم قادرید که حافظه تخصیص یافته رو آزاد کنید.
Kambiz
یک شنبه 09 آذر 1382, 03:11 صبح
رامین جان،
بسته به کاری که قراره انجام بشه دلفی راه کارهای مختلفی برای تخصیص حافظه در اختیار میگذاره. اگر موردی که درش نیاز به تخصیص حافظه در زمان اجرا داری رو بگی میشه یک روش مناسب برای اون گفت وگرنه همه جوابهایی که تا حالا تو اینجا گفته شده میتونند اشتباه یا درست باشند.
SReza1
دوشنبه 10 آذر 1382, 22:08 عصر
روشهای زیادی برای حافظه گرفتن داره!!
واسه اینکه درگیری زیادی با پارامترهای عجیب غریب نداشته باشی یکی strings است که میوتنی از نوع اون با استفاده از stringlist ایجاد کنی
البته بستگی به کاربری داره!!
ramin_rp
سه شنبه 11 آذر 1382, 13:19 عصر
سلام
در برنامه اگر شرطی برگرار شد 10 عدد تولید میشود که با ید در ارایه یا متغیر ذخیره شود تا در جایه دیگه استفاده بشه!
:oops:
houshmand
سه شنبه 11 آذر 1382, 13:38 عصر
بهترین انتخاب ساده ترین راه است
Var
arr : Array[1..10] of integer :wink:
ramin_rp
سه شنبه 11 آذر 1382, 19:04 عصر
سلام
منمی خواهم اگر شرط بر قرار نبود آرایه ایجاد نشه !
SyntaxCheck
چهارشنبه 12 آذر 1382, 00:31 صبح
type
TMyArray = array [1..10]of integer;
var
MyArray: ^TMyArray;
سپس برای تعریف و استفاده:
GetMem(MyArray,sizeof(MyArray^));
MyArray^[1] := 12;
...
FreeMem(MyArray);
Kambiz
چهارشنبه 12 آذر 1382, 02:47 صبح
وقتی که کل تعداد عناصر آرایه رو میدونی و تعداد اونها هم زیاد نیست دیگه نیازی به تخصیص حافظه در زمان اجرا نیست٬ چون تنها باعث پیچیدگی کد میشه و هیچ فایدهای نداره.
در هر حال 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;
ramin_rp
چهارشنبه 12 آذر 1382, 12:53 عصر
سلام
دوستان از هم تشکر میکنم
said ali
چهارشنبه 12 آذر 1382, 12:58 عصر
با سلام
در مورد Initialize و Finalize میشه بیشتر توضیح بدین از بس وقتی با Tstrings کار کردم این رو دیدم خسته شدم.
با تشکر
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.