نمایش نتایج 1 تا 13 از 13

نام تاپیک: تعریف آرایه و متغیر در زمان اجرا

  1. #1

    تعریف آرایه و متغیر در زمان اجرا

    سلام
    چطوری میشود متغیر و آرایه ای را در زمان اجرا درست کرد
    با تشکر
    رامین
    :oops:

  2. #2
    مهمان
    چرا راه طبیعی اش را نمیری . بجای آرایه از یک لینک لیست استفاده کن . والا من تعریف آرایه رو به صورت پویا بلد نیستم و تا جایی که میدونم توی دلفی نمیتونیم آرایه رو به صورت پویا تعریف کرد . فقط در بعضی زبانها تعریف متغیر به صورت زمان اجرا است . مثل زبان (لیست )
    اگه اشتباه نکرده باشم .
    .................................................. ........
    به امید روزی که ایران از نظر کامپیوتر به خدایی برسد . با تلاش مهم برنامه نویسان و علاقه مندان به کامپیوتر .

  3. #3
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799
    شما میتونید از TList استفاده کنید.
    همچنین در دلفی شما قادر به مشخص کردن تعداد عناصر آرایه نیز هستید (Dynamic Array)


    Var ary : Array[1..10] of integer;
    begin
    //change the array size
    SetLength(ary,20);
    end;

  4. #4
    توسط پراسیجر GetMem میتونید یک میزان مشخص از حافظه رو بر حسب تعداد بایت مورد نیاز تخصیص بدید. توسط پراسیجر FreeMem هم قادرید که حافظه تخصیص یافته رو آزاد کنید.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    تهران
    پست
    484
    رامین جان،

    بسته به کاری که قراره انجام بشه دلفی راه کارهای مختلفی برای تخصیص حافظه در اختیار می‌گذاره. اگر موردی که درش نیاز به تخصیص حافظه در زمان اجرا داری رو بگی میشه یک روش مناسب برای اون گفت وگرنه همه جوابهایی که تا حالا تو اینجا گفته شده می‌تونند اشتباه یا درست باشند.

  6. #6
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702
    روشهای زیادی برای حافظه گرفتن داره!!
    واسه اینکه درگیری زیادی با پارامترهای عجیب غریب نداشته باشی یکی strings است که میوتنی از نوع اون با استفاده از stringlist ایجاد کنی
    البته بستگی به کاربری داره!!

  7. #7
    سلام
    در برنامه اگر شرطی برگرار شد 10 عدد تولید میشود که با ید در ارایه یا متغیر ذخیره شود تا در جایه دیگه استفاده بشه!
    :oops:

  8. #8
    بهترین انتخاب ساده ترین راه است
    Var
    arr : Array[1..10] of integer
    :wink:

  9. #9
    سلام
    منمی خواهم اگر شرط بر قرار نبود آرایه ایجاد نشه !

  10. #10

    type
    TMyArray = array [1..10]of integer;
    var
    MyArray: ^TMyArray;


    سپس برای تعریف و استفاده:

    GetMem(MyArray,sizeof(MyArray^));
    MyArray^[1] := 12;
    ...
    FreeMem(MyArray);

  11. #11
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    تهران
    پست
    484
    وقتی که کل تعداد عناصر آرایه رو می‌دونی و تعداد اونها هم زیاد نیست دیگه نیازی به تخصیص حافظه در زمان اجرا نیست٬ چون تنها باعث پیچیدگی کد میشه و هیچ فایده‌ای نداره.

    در هر حال 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;

  12. #12
    سلام
    دوستان از هم تشکر میکنم

  13. #13
    کاربر دائمی
    تاریخ عضویت
    خرداد 1382
    محل زندگی
    l8026070@yahoo.com
    پست
    282
    با سلام
    در مورد Initialize و Finalize میشه بیشتر توضیح بدین از بس وقتی با Tstrings کار کردم این رو دیدم خسته شدم.
    با تشکر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •