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

نام تاپیک: کار با آرایه ای که سایزش از قبل مشخص نیست

  1. #1
    کاربر دائمی آواتار amirtofighi
    تاریخ عضویت
    دی 1388
    محل زندگی
    ساری
    سن
    36
    پست
    109

    کار با آرایه ای که سایزش از قبل مشخص نیست

    با سلام
    من به یک نوع آرایه تک بعدی نیاز دارم که تعداد عناصرش از قبل مشخص نیست و کاربر موقع کار میتونه تعدادشو افزایش بده برا همین نمیتونم مثلا از دستور


    array1: Array of integer;
    SetLength(array1, 5);

    استفاده کنم چون طول آرایه مشخص نیست از قبل.
    میشه راهنماییم کنید آرایه رو چطوری تعریف کنم و برای وارد کردن اطلاعات چه کدی رو استفاده کنم
    مرسی

  2. #2

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    الان مشکلتون با آرایه پویا بالا چیه ؟! خوب جای اون عدد 5 ، عددی رو که کاربر وارد میکنه رو بزار !

  3. #3
    کاربر دائمی آواتار amirtofighi
    تاریخ عضویت
    دی 1388
    محل زندگی
    ساری
    سن
    36
    پست
    109

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    خوب مشکل اینه که کاربر که نمیدونه برنامه نویسی یعنی چی!
    من میخوام نمودار میله ای بکشم و میخوام بسته به تعداد متغییر x و y که کاربر وارد میکنه، هر کدوم رو تو یه آرایه بریزم ولی هر دفعه تعداد xها و yها ممکنه متفاوت باشه
    یه بار ممکنه کاربر بخواد نموداری بکشه که فقط 2تا میله داره یه بار 10 تا.
    وچون نمودار میله ایه تومحور x بجای عدد ،کلمه مینویسن مثلا (فروردین ،اردیبهشت،...) و تو قمستy مقدار هرکدوم برا همین 2تا آرایه باید تعریف کنم که بشه نمودار رو تکمیل کرد ولی همونطور که گفتم مشکل اینجاست که مثلا نمیدونم کاربر میخواد تا شهریور نمودار بکشه یا تا اسفند

  4. #4
    کاربر دائمی آواتار سعید صابری
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    برازجان
    پست
    1,431

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    وقتی کاربر X مشخص کرد یعنی بالاخره باید مشخص کنه تا کجا(تا چه ماهی) میخواد بکشه.انوقت طول آرایه را مشخص کن. اگه میتونی یک نمونه بزار بشه بهتر کمکت کرد

  5. #5
    کاربر دائمی آواتار MohsenB
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایرانم
    پست
    601

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    سلام

    خوب شما جای همون 5 متغییری رو قرار بده که میخوای ، مثلا :

    اینجوری تصور کن که اندیس آرایه ماهها هستن و مقدار آرایه اندازه میله ،

    خوب اگر تعداد ماهها رو توی Edit1 و اعداد رو توی EditVar1 تا ... داشته باشی ، میتونی اینجوری بنویسی :

    var
    a :array of integer;
    n,i :Integer
    begin
    n:= StrToInt(Edit1.Text);
    SetLength(a, n);
    for i := 0 to n-1 do
    a[i]:= StrToInt(TEdit(FindComponent('EditVar' + IntToStr(i))).Text));
    end;



    موفق باشید

  6. #6
    کاربر دائمی آواتار amirtofighi
    تاریخ عضویت
    دی 1388
    محل زندگی
    ساری
    سن
    36
    پست
    109

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    و یه سوال دیگه اینکه میشه یه آرایه که مثلا بهش طول 5
     SetLength(a, 5);
    دادیم رو دوباره افزایش طول بدیم و مثلا بکنیمش 6
     SetLength(a, 6);
    ؟
    آیا با این کار اطلاعاتی که تو این 5تا خونه ذخیره شده بود پاک میشه؟

  7. #7
    کاربر دائمی آواتار MohsenB
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایرانم
    پست
    601

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    نقل قول نوشته شده توسط amirtofighi مشاهده تاپیک
    و یه سوال دیگه اینکه میشه یه آرایه که مثلا بهش طول 5
     SetLength(a, 5);
    دادیم رو دوباره افزایش طول بدیم و مثلا بکنیمش 6
     SetLength(a, 6);
    ؟
    آیا با این کار اطلاعاتی که تو این 5تا خونه ذخیره شده بود پاک میشه؟

    سلام

    خیر ، پاک نمی شود . حتی میتوانید یکی یکی اطلاعات رو اضافه کنید و در هر بار طول آرایه را بستگی به نیازتان اضافه کنید تا طول آرایه همیشه به اندازه اطلاعاتتان باشد .


    موفق باشید

  8. #8

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    آیا با این کار اطلاعاتی که تو این 5تا خونه ذخیره شده بود پاک میشه؟
    نه پاک نمیشه، ولی هیچ وقت سعی نکنید اندازه یک آرایه را یک واحد یک واحد افزایش بدید؛ این کار باعث افزایش سر بار میشه؛ به جای این کار، اندازه آرایه را به صورت Chunk افزایش بدید، یعنی هر زمان آرایه شما پر شد و نیاز به عناصر بیشتر داشتید، چند خانه جدید به آرایه اضافه کنید؛ مثلا هر وقت نیاز به فضای بیشتری داشتید، به اندازه نصف فضای فعلی به اندازه حافظه اضافه کنید. این کار باعث میشه که درخواست های کمتری برای اختصاص حافظه ارسال بشه، و آرایه شما هم کمتر توسط مدیر حافظه relocate بشه.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  9. #9
    کاربر دائمی آواتار amirtofighi
    تاریخ عضویت
    دی 1388
    محل زندگی
    ساری
    سن
    36
    پست
    109

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    من دقیقا کاری که میخوام بکم اینه:
    یه بانک اطلاعاتی دارم که مربوط به مزاجعه کننده ها به اورژانسه
    تو یه فیلدش که از نوع memo هست علت مراجعه رو نوشتم
    این قابلیت رو تو برنامه گذاشتم که کاربر بتونه از تعداد مراجعه به دلایل مختلف آمار بگیره یعنی مثلا چند نفر بخاطر مسمومیت، چند نفر بخاطر بریدگی و ...
    و اینطور برنامه نوشتم که کاربر هر عبارتی رو تو اون بانک از فیلد دلیل مراجعه جستجو کنه که توش عبارت مثلا مسمومیت باشه،recodcount بانک رو بده به عنوان y و عبارت "مسمومیت" بشه به عنوان x و هرکدوم رو تو یه آرایه میریزم که بعد بدمش به chart
    خب من نمیدونم کاربر میخواد از چند تا علت نمودار میله ای بکشه و اندازه آرایه چقدر باید باشه؟ و نمیتونم مثلا از قبل بگم آرایه 10 تا خونه داشته باشه چون اینجوری نمودارم دارای 10 تا میله میشه که شاید نصفش بدون استفاده بمونه
    اگرم بگم هر وقت مقدار هر عنصر آرایه 0 بود اون میله رو نکش بازم نمیشه چون ممکنه علت مراجعه برای یه دلیل خاص واقعا 0 باشه
    شما پیشنهاد میکنین بهترین روش برای این کار چیه و آرایه رو چطور افزایش بدم؟

  10. #10
    کاربر دائمی آواتار SAASTN
    تاریخ عضویت
    خرداد 1385
    محل زندگی
    تهران
    سن
    39
    پست
    730

    نقل قول: کار با آرایه ای که سایزش از قبل مشخص نیست

    من نمی دونم چرا اینقدر قضیه رو سختش می کنی؟ از قبل کدومه؟ شما بالاخره یه Query داری که Runش می کنی دیگه؟ بعد قراره این Query چندبار اجرا بشه، یعنی به ازای هر عبارتی که کاربر تعیین کرده یه بار اجرا بشه و RecordCount بدست بیاد، درسته؟ خوب چطوری متوجه می شی که اون Query چندبار باید اجرا بشه؟ درست قبل از اون حلقه ای که Query رو اجرا می کنه SetLength کن. اصلا آرایه داینامیک ایجاد شده که ما از قبل تصمیم نگیریم، هر لحظه ای که متوجه شدیم تعداد درایه ها چندتا باید باشه، همونجا بتونیم طولش رو تعیین کنیم.
    بعدا هم باید از تابع Length برای بدست آوردن طول آرایه داینامیکت استفاده کنی، یا اگه زیاد قراره Length رو فراخونیش کنی، به جاش یه متغیر برای نگهداری طول آرایه تعریف کنی.

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

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