ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

آرایه ها

 
Post new topic   Reply to topic    ParsX.com Forum Index -> ويژوال بيسيك .NET
View previous topic :: View next topic  
Author Message
unknown
مدير بخش ويژوال بيسيك
مدير بخش ويژوال بيسيك


Joined: 05 Dec 2004
Posts: 439
Location: Tehran

PostPosted: Sun Feb 27, 2005 7:12 pm    Post subject: آرایه ها Reply with quote

آرایه ها:
آرایه لیستی از عناصر (المان های) هم نام و هم نوع می باشد که با استفاده از اندیس می توان به عناصر آن دست پیدا کرد.
وقتی در ویژوال بیسیک یک آرایه را تعریف می کنید باید به سه نکته توجه کرد:

1. اسم آرایه که از آن برای دستیابی به آرایه در برنامه استفاده می کنید.
2. این آرایه از چند عنصر تشکیل شده است. که این قسمت درون پرانتز قرار می گیرد.
3. و در آخر نوع داده های آرایه می باشد (صحیح ، رشته و...)

روش تعریف آرایه در ویژوال بیسیک:

Dim ArrayName(LowerValue To HigherValue) [As DataType]


اگر آرایه را در یک فرم تعریف می کنید از Dim یا Private استفاده کنید ولی اگر آن را در یک ماجول تعریف می کنید و می خواهید که هر رویه ای به آن دسترسی داشته باشد آرایه را با Public تعریف کنید.
اگر آرایه را در یک رویه یا تابع تعریف می کنید از Dim استفاده کنید.
ArrayName اسم آرایه می باشد که از قوانین نام گزاری متغییر ها پیروی می کند.
LowerValue اولین عنصر آرایه
HigherValue آخرین عنصر آرایه می باشد.
مشخص کردن مقدار اولیه آرایه الزامی نیست. اگر شما این کار را نکنید ویژوال بیسیک به طور خود کار آن را از صفر شروع می کند.


Dim sTestArray(0 To 10) As String

برابر است با

Dim sTestArray(10) As String

اگر می خواهید ویژوال بیسیک مقدار اولیه آرایه ها را از یک شروع کند در قسمت اعلان برنامه (جای Option Explicit را به یاد دارید.) دستور زیر را بنویسید.

Option Base 1


مقدار دادن به آرایه همانند مقدار دهی به متغییر می باشد.

ArrayName(Index) = Value

مثال:

iArray(3) = iArray(7) 

به راحتی مقدار آرایه با اندیس 7 درون اندیس 3 قرار می گیرد.

گرفتن سایز آرایه:
منظورم از سایز حدود بالا و پایین عناصر آرایه می باشد.
به عبارت دیگر فهمیدن این که چه تعداد عنصر در آرایه ذخیره شده است.
این کار به سادگی با استفاده از توابع LBound و UBound انجام میشود.(کران بالا و پایین)
سوال:
برای چه به این توابع نیاز است؟ آنها چه کاری انجام می دهند؟
پاسخ:
اگر می خواهید یک جعبه لیست را با عناصر یک آرایه پر کنیدو نمی دانید چه تعداد از آن عناصر را دارید باید از این توابع استفاده کنید (یواش یواش داره سخت می شه ها...)

UBound(ArrayName, Dimension)
'ArrayName = the name of the array
LBound(ArrayName, Dimension)


قبل از همه چیز:
در ویژوال بیسیک برای نوشتن توضیح از کاما و کلمه Rem استفاده می شود
توضیحات در روند کامپایل برنامه تاثیر ندارند و فقط برای خوانایی برنامه می باشند.
Dimension یک عدد صحیح اختیاری می باشد که نشانگر تعداد ابعاد یک آرایه چند بعدی می باشد.
یک مثال ساده:

Dim Names(100) as string
LowerVal = LBound(Names) 'Get the lower boundary number.
UpperVal = UBound(Names) 'Get the upper boundary number.

For i = LowerVal To UpperVal
    List1.AddItem Names (i) 'Add each name from array according to how many stored in the Array
Next


آرایه های چند بعدی:
یک آرایه چند بعدی شبیه یک جدول می باشد. اگر حتی یک بار Microsoft Excel را دیده باشید می دونید چی می گم.
مثال:

Static iArray(1 To 2, 1 To 3) as integer


تمامی عناصر آرایه بالا:

iArray(1,1), iArray(1,2), iArray(1,3)
iArray(2,1), iArray(2,2), iArray(2,3)


اکثر اوقات از آرایه های یک بعدی استفاده می کنید ولی در مواقعی استفاده از آرایه های 2 یا 3 بعدی بهتر است. آرایه های بیش از 3 بعدی یک ایده خوب به حساب نمی آیند چون Debug کردن برنامه را به شدت سخت می کند.
آرایه های چند بعدی (منظور بیشتر 2 بعدی میباشد) به صورت خطی پر می شوند. برای مقدار دادن به عناصر آرایه های چند بعدی از حلقه های تو در تو استفاده می شود.
مثال جالب:


Option Explicit
Private Sub Form_Load()
Dim i, j As Integer
Dim TableArray(1 To 10, 1 To 10) As Integer

For i = 1 To 10
    For j = 1 To 10
        TableArray(i, j) = i * j
        Text1.Text = Text1.Text & TableArray(i, j) & vbTab
    Next j
    Text1.Text = Text1.Text & vbCrLf
Next i
End Sub

جدول ضربی ازاعداد را در آرایه دو بعدی قرار می دهیم.
قبل از اجرای این کد یک جعبه متن نسبتا بزرگ را در روی فرم قرار دهید و حتما در پنجره Properties جعبه متن خاصیت MultiLine رو برابر True کنید.
vbTab کلمه رزرو شده ای است که معادل 8 کاراکتر فضای خالی می باشد.
vbCrLf کلمه رزرو شده ای است که مکان نما را به خط بعد منتقل می کند.
البته باید این مثال را در برنامه نویسی شی گرا می آوردم ولی مهم نیست با توضیحات داده شده فکر نکنم مشکلی داشته باشید.

آرایه های پویا:
اگر از آرایه ها به طور صحیح استفاده نکنید مقدار زیادی از حافظه تان به هدر می رود.
مثال:

Dim MyArray (10000) As Long

این آرایه تقریبا 40,004 بایت از حافظه را اشغال می کند.یعنی 4 * 10,001 می باشد چون نوع Long چهار بایت حافظه اشغال می کند.
الان ممکن است این عدد بزرگی نباشد ولی اگر 10 تا از این آرایه را در برنامه استفاده کنید 4,000,400 بایت حافظه مصرف می شود.
عاقلانه تر این است در ابتدا مقدار کمی را به آرایه تخصیص دهیم و زمان اجرا آن را تغییر سایز دهیم.درRunTime .
بله شما به سادگی این کار را در ویژوال بیسیک با تابع ReDim انجام می دهید.
آرایه هایی را که در زمان اجرا تغییر سایز می دهیم آرایه های پویا می نامند.
هنگامی که آرایه های پویا را تعریف می کنید لازم نیست مثل آرایه های ثابت عمل کنید. یعنی لازم نیست سایز را مشخص کنید.

Dim ArrayName() As DataType


تمام قضایا مثل بالاست فقط به ReDim توجه کنید.

ReDim ArrayName(LowerValue To HigherValue)

توجه:
عمل ReDim همیشه در زمان اجرا اعمال می شود و حتما باید قبلا تعریف شده باشد.
مثال:

Dim Names() As String

Sub Form1_Load()
    ReDim Names(1 To 10)
End Sub

این کد آرایه را در زمان اجرا تغییر سایز می دهد. حتما قبل از استفاده از آرایه پویا باید سایز آن را تعیین کنید.
یک مشکل بزرگ:
وقتی از ReDim استفاده می کنید تمامی مقادیر درون آرایه (اگر قبلا تغییر سایز داده باشیم) پاک می شود. در اکثر اوقات این آن چیزی که شما می خواهید نیست.
برای جلوگیری از چنین کاری از جمله زیر استفاده کنید.

ReDim Preserve ArrayName(LowerValue To HigherValue)

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


مولف:
امیر مرادآبادی (amirmoradabadi@yahoo.com)
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> ويژوال بيسيك .NET All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum