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

نام تاپیک: آرایه‌ها در دلفی

  1. #1

    آرایه‌ها در دلفی

    دلفی به ما امکان می دهد آرایه‌هایی از هر نوع متغییری را ایجاد کنیم. برای تعریف آرایه به صورت زیر عمل میکنیم:
    var
    array[indexType1, ..., indexTypen] of baseType;

    در این تعریف برای نامگذاری آرایه، از قانون نامگذاری متغییرها استفاده میکنیم و مقدار اولیه را نیز درون یک جفت کروشه قرار می دهیم.

    نکته: شما می توانید به جای استفاده از کروشه [] از ترکیب پرانتز نقطه استفاده کنید:
    d(.i.):= 3 + i; // Equivalent d:= 3 + i;

    نکته: وقتی که شما یک آرایه را تعریف می کنید احتیاجی ندارید که به آن مقدار کمترین یا بیشترین بدهید:
    var
    A : array [Boolean] of integer;
    begin
    A[True] := 50;
    A[False] := 100;
    end;

    نکته: توابع Low و High کران‌های پایین وبالای یک متغییر آرایه‌ای یا نوعی یا ترتیبی را بر میگردانند:
    for I := 0 to High(X) do S := S + X;


    آرایه‌های ثابت:
    آرایه های ثابت می توانند توسط ساختار ثابت نوع دلفی تعریف شود. نوع ثابت که همیشه با عبارت Const تعریف می شود، نه تنها مانع تغییر مقدار پارامتر می شود، بلکه کدهای بهینه بیشتری برای رشته‌ها و رکوردهای رد شده به توابع تولید می کند. ما هنگامی از این نوع استفاده می کنیم که نخواهیم مقدار رد شده به یک تابع تغییر کند.
    type
    TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);

    const
    DayNames : array [TDay] of String[9] = ('Sunday', 'Monday', 'Tuesday',
    'Wednesday', 'Thursday',
    'Friday', 'Saturday');
    var
    Today : TDay;

    begin
    Today := TDay(DayOfWeek(Date) - 1);
    ShowMessage('Today is ' + DayNames[Today] + '!');
    end;


    آرایه‌های دینامیکی:
    آرایه‌های دینامیکی، آرایه‌های تحلیلی پویایی هستند که ابعاد آنها موقع کامپایل شدن شناخته شده نیست. برای اعلان آنها کافی است یک آرایه بدون بعد تعریف کنید:
    var MyFlexibleArray: array of Real;

    قبل از به کار گیری آرایه‌های دینامیکی، ابتدا باید از رویه SetLength برای تخصیص حافظه آرایه استفاده کرد:
    SetLength (MyFlexibleArray, 2; (

    نکته: آرایه‌های دینامیکی همیشه مبتنی بر صفر می باشند.

    نکته: شما می‌توانید آرایه‌های دینامیکی را قبل از رسیدن به ترک قلمرو از حافظه خارج کنید:
    MyFlexibleArray := nil;

    نکته: مقدار حافظه‌ای که در اختیار آرایه قرار میگیرد، به طول آرایه ونوع عناصر آن بستگی دارد. به عنوان مثال اگر آرایه‌ای از نوع صحیح به طول 10 داشته باشیم 4*10 بایت حافظه به آن اختصاص می‌یابد.


    فشرده‌سازی آرایه‌ها:
    در دلفی شما هنگامی که ساختار خود را تعیین کردید می‌توانید با استفاده از کلمه کلیدی packed اطلاعات ذخیره شده خود را متراکم کنید:
    type TNumbers = packed array[1..100] of Real;

    نکته: استفاده از packed سرعت دسترسی به اطلاعات را کند میکند. در مورد آرایه‌ای از کاراکترها این مورد سازگارتر می‌باشد.


    آرایه‌های چند بعدی دینامیکی:
    برای تعریف آرایه‌های چند بعدی دینامیکی، تنها کافی است ...array of را در ساختار خود تکرار کنید. به طور مثال:
    type
    TMessageGrid = array of array of string;

    var
    Msgs: TMessageGrid;

    این تعریف یک آرایه دو بعدی از رشته‌ها می باشد. سپس باید به آرایه خود فضا نسبت داد:
    SetLength(Msgs, I, J);


    شما می‌توانید آرایه‌های چند بعدی دینامیکی خود را به صورت غیر مستطیلی (Not Rectangular) ایجاد کنید. ابتدا رویه SetLength را صدا زده و پارامتر بعد اول را بدهید:
    var
    Ints: array of array of Integer;

    SetLength(Ints, 10);

    ما 10 سطر به آرایه خود اختصاص دادیم. از این پس، شما می توانید ستونهای خود را در هر زمان (با اندازه‌های مختلف) تخصیص دهید:
    SetLength(Ints[2], 5);

  2. #2
    کاربر دائمی آواتار Ehsansh
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    127.0.0.1
    سن
    39
    پست
    278
    سلام. کد های خودتون رو در بین تگ های
    [c o d e]

    [/ c o d e]
    قرار بدین (بدون در نظر گرفتن فاصله ها).
    خوانا تر میشه.
    مثل این:

    var
    A : array [Boolean] of integer;
    begin
    A[True] := 50;
    A[False] := 100;
    end;

  3. #3
    کاربر دائمی آواتار jafari1
    تاریخ عضویت
    بهمن 1382
    محل زندگی
    ايران
    پست
    367
    با سلام خدمت خانم سعادتی
    حال که زحمت کشیدید در رابطه با آرایه مطلب نوشتید آیا میتوانید راه حلی برای مسئله زیر بفرمایید
    میخواهم حدودا 15 رکورد از بانک اطلاعاتی را با dbEdit هم زمان در یک فرم نمایش دهم که این اطلاهات این رکورد ها در این فرم قابل ثبت و تغییر نیز باشد همانند Dbgrid اگر لطف بفرمایید متشکر میشوم

  4. #4

  5. #5
    میخواهم حدودا 15 رکورد از بانک اطلاعاتی را با dbEdit هم زمان در یک فرم نمایش دهم که این اطلاهات این رکورد ها در این فرم قابل ثبت و تغییر نیز باشد همانند Dbgrid اگر لطف بفرمایید متشکر میشوم
    lمیتونید از DBCtrl Grid استفاده کنید که از کامپوننتهای خود دلفی هم هست.
    You never know what you can do until you try

  6. #6
    کاربر دائمی آواتار jafari1
    تاریخ عضویت
    بهمن 1382
    محل زندگی
    ايران
    پست
    367
    دوست عزیز آن راه که فرمودید زیاد جالب نیست و بعضا نیز درست نیز عمل نمیکند

  7. #7
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    چطور می توان این نوع آرایه را تعریف و مقادیر ثابت به آن مقدار دهی کرد ؟؟؟
    type
    TBArray = array of array Byte;

    const
    variable: TBArray = ( ???? );


    من نیاز دارم که در یک آرایه چندین آیتم داشته باشد که هر کدام از این آیتم ها که آرایه هستند حاوی یکسری Byte باشند ...

    با تشکر ، یا حق ...

  8. #8
    کاربر دائمی آواتار Mahyaa
    تاریخ عضویت
    آذر 1384
    محل زندگی
    UAE
    سن
    45
    پست
    517
    type
    TBArray = array [0..2 , 0..3] of Byte;
    const
    MyVar : TBArray = ((3,4,11,45) , (4,8,5,14) , (6,12,9,33));

  9. #9
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    شرمندم دوست عزیز مثال در help هم موجود است ...
    ولی شما با این نوع ثبات نمی توانید در هر یک از موارد طول متغیر داشته باشید !!!

    من چنین چیزی لازم دارم ...

    const
    MyVar : TBArray = ((3,4,11,45,60,80) , (4,8) , (6,12,9,33));


    با تشکر ، با حق ...

  10. #10
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    کسی از دوستان نظری نداره ؟؟؟

  11. #11
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    نوشته شده توسط ghabil
    این کد به درخواست ناشر حذف شده است ...

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

    به این کد نگاهی بیاندازید ...

    type
    TByteValue = array of array of Byte;

    procedure SetArrayValue(var ByteValue: TByteValue; value: array of Byte);
    var
    len, idx, i: DWORD;
    begin
    idx := High( ByteValue ) +1;
    len := Length( value ) -1;
    //ShowMsg(Format('%d %d', [idx, len]), 0);
    SetLength( ByteValue, idx +1 );
    SetLength( ByteValue[ idx ], len +1 );
    for i := 0 to len do
    ByteValue[ idx][i ] := value[i];
    end;

    //***************************** usage example

    var
    bb: TByteValue;
    begin
    SetArrayValue(bb, [50, 10, 0, 60, 70]);
    SetArrayValue(bb, [6, 10, 5]);
    SetArrayValue(bb, [50, 10, 0, 60, 70, 90, 10, 20]);
    end;


    دوستان نظری ندارند ؟؟؟
    با تشکر ، یا حق ...

  12. #12
    نقل قول نوشته شده توسط Hamid_PaK مشاهده تاپیک
    دوستان نظری ندارند ؟؟؟
    با تشکر ، یا حق ...
    ببین چیزی که تو میخوای استفاده از VarArray هست که باید حافظه لازم براش بصورت داینامیکی در نظر گرفته بشه ، در غیر اینصورت فکر نمیکنم کامپایلر بتونه برای یک آرایه داینامیک حافظه ذخیره بکنه !! اون کدی رو که از طرف من از یک فروم دیگه گذاشتی هم طرز تعریف یک آرایه متغییر بود.
    همونطوری که بهت گفتم تنها چیزی که مشابه اونچه که تو میخوای دیدم پیاده سازی IDictionary در دات نت بوده.

    ولی بازم اگه چیز بهتری پیدا کردی به منم خبر بده.

برچسب های این تاپیک

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

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