فصل دهم : آرایه ها

مرور متغیرها

تا به حال باید به خوبی با نحوه عملکرد متغیرها آشنا شده باشید.

بیایید اولین برنامه ای که با متغیرها نوشتیم را دوباره مرور کنیم:

TextWindow.Write(“Enter your Name: “)

()name = TextWindow.Read

TextWindow.WriteLine(“Hello ” + name)

 

در این برنامه نام کاربر را در متغیری به نام name دریافت و ذخیره کردیم. سپس به کاربر «سلام» گفتیم.

اکنون، فرض کنید بیش از یک کاربر وجود دارد ، مثلاً ۵ کاربر وجود دارد. چگونه نام همه آنها را ذخیره کنیم؟

یکی از راه های انجام این کار این است:

TextWindow.Write(“User1, enter name: “)

()name1 = TextWindow.Read

TextWindow.Write(“User2, enter name: “)

()name2 = TextWindow.Read

TextWindow.Write(“User3, enter name: “)

()name3 = TextWindow.Read

TextWindow.Write(“User4, enter name: “)

()name4 = TextWindow.Read

TextWindow.Write(“User5, enter name: “)

()name5 = TextWindow.Read

TextWindow.Write(“Hello “)

TextWindow.Write(name1 + “, “)

TextWindow.Write(name2 + “, “)

TextWindow.Write(name3 + “, “)

TextWindow.Write(name4 + “, “)

TextWindow.WriteLine(name5)

 

وقتی برنامه فوق را اجرا کنیم به خروجی زیر می رسیم:

شکل 1-10 – بدون استفاده از آرایه

شکل ۱-۱۰ : بدون استفاده از آرایه

 

واضح است که باید راه بهتری برای نوشتن چنین برنامه ساده ای وجود داشته باشد تا مجبور نشویم که برای هر کاربر جدید مکرراً یک کد را بنویسیم.

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

اینجاست که آرایه ها به کمک ما می آیند.

 

آرایه چیست؟

آرایه نوع خاصی از متغیر است که می تواند بیش از یک مقدار را در یک زمان نگه دارد.

اساساً منظور این است که به‌جای ایجاد name1، name2، name3، name4 و name5 برای ذخیره پنج نام کاربری، می‌توانیم فقط از name برای ذخیره نام هر پنج کاربر استفاده کنیم.

روشی که ما چندین مقدار را ذخیره می کنیم با استفاده از چیزی است که “شاخص” (ایندکس) نامیده می شود.

برای مثال، name[1]، name[2]، name[3]، name[4] و name[5] همگی می‌توانند یک مقدار را ذخیره کنند. اعداد ۱، ۲، ۳، ۴ و ۵ را شاخص های آرایه می نامند.

 

اگرچه name[1]، name[2]، name[3]، name[4] و name[5] همه به نظر متغیرهای متفاوتی هستند، اما در واقع همه آنها فقط یک متغیر هستند.

ممکن است بپرسید مزیت این کار چیست؟

بهترین مزیت ذخیره سازی مقادیر در یک آرایه این است که می توانید شاخص را با استفاده از متغیر دیگری مشخص نمایید که به ما این امکان را می دهد که به راحتی توسط حلقه ها به مقادیر داخل آرایه ها دسترسی داشته باشیم.

 

حال، بیایید ببینیم چگونه می‌توانیم دانش جدید خود را با بازنویسی برنامه قبلی با آرایه‌ها به کار ببریم:

For i = 1 To 5

TextWindow.Write(“User” + i + “, enter name: “)

()name[i] = TextWindow.Read

EndFor

TextWindow.Write(“Hello “)

 

For i = 1 To 5

TextWindow.Write(name[i] + “, “)

EndFor

(“”)TextWindow.WriteLine

به دو خط پررنگ توجه کنید. اولی مقداری را در آرایه ذخیره می کند و دومی آن را از آرایه می خواند.

مقداری که در name[1] ذخیره می‌کنید تحت تأثیر آنچه در name[2] ذخیره می‌کنید قرار نمی‌گیرد.

از این رو برای اکثر اهداف می توانید name[1] و name[2] را به عنوان دو متغیر متفاوت با هویت یکسان در نظر بگیرید.

 

شکل 2-10 – استفاده از آرایه

شکل ۲-۱۰ : استفاده از آرایه

 

برنامه فوق تقریباً همان نتیجه برنامه قبلی (بدون استفاده از آرایه) را می دهد با این تفاوت که در اینجا در انتهای Mantis کاما گذاشته شده است.

ما می توانیم با بازنویسی حلقه چاپ به صورت زیر این مشکل را نیز برطرف کنیم:

TextWindow.Write(“Hello “)

For i = 1 To 5

TextWindow.Write(name[i])

If i < 5 Then

(“,”)TextWindow.Write

EndIf

EndFor

(“”)TextWindow.WriteLine

در اینجا یک نمایش تصویری از آرایه []name، و نحوه ذخیره نام‌های مختلف در آن نشان داده شده است.

همانطور که ملاحظه می کنید، در این فضای ذخیره‌سازی، زمانی که به name[1]  دسترسی پیدا شود، نام Shifu در خروجی ظاهر می شود و…

 

شکل 3-10 – نمایش تصویری از آرایه

شکل ۳-۱۰ : نمایش تصویری از آرایه

 

استفاده از شاخص غیر عددی در آرایه

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

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

به عنوان مثال، در برنامه زیر، اطلاعات مختلفی را درباره یک کاربر می‌پرسیم و ذخیره می‌کنیم و سپس اطلاعاتی را که کاربر درخواست می‌کند چاپ می‌کنیم:

TextWindow.Write(“Enter name: “)

()user[“name”] = TextWindow.Read

TextWindow.Write(“Enter age: “)

()user[“age”] = TextWindow.Read

TextWindow.Write(“Enter city: “)

()user[“city”] = TextWindow.Read

TextWindow.Write(“Enter zip: “)

()user[“zip”] = TextWindow.Read

 TextWindow.Write(“What info do you want? “)

()index = TextWindow.Read

TextWindow.WriteLine(index + ” = ” + user[index])

 

شکل 4-10 – استفاده از شاخص غیر عددی در آرایه

شکل ۴-۱۰ : استفاده از شاخص غیر عددی در آرایه

 

آرایه دوبعدی

فرض کنید می خواهید نام و شماره تلفن همه دوستان خود را ذخیره کنید تا بتوانید هر زمان که نیاز داشتید شماره تلفن آنها را جستجو کنید. (تقریباً مانند یک دفترچه تلفن)

چگونه می خواهیم چنین برنامه ای بنویسیم؟

در این مورد، دو مجموعه (بعد) از شاخص ها درگیر می شوند.

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

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

 

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

 

نحوه ذخیره این داده ها به این صورت خواهد بود:

“friends[“Rob”][“Name”] = “Robert

“friends[“Rob”][“Phone”] = “555-6789

“friends[“VJ”][“Name”] = “Vijaye

“friends[“VJ”][“Phone”] = “555-4567

“friends[“Ash”][“Name”] = “Ashley

“friends[“Ash”][“Phone”] = “555-2345

 

از آنجایی که در این آرایه (friends) دو شاخص داریم، این نوع آرایه را، آرایه دو بعدی می نامند.

 

هنگامی که این برنامه را راه اندازی کردیم، خواهیم توانست که نام مستعار یک دوست را به عنوان ورودی انتخاب کرده و سپس اطلاعاتی را که در مورد آن ذخیره کرده ایم، چاپ کنیم.

در اینجا برنامه کاملی است که این کار را انجام می دهد:

“friends[“Rob”][“Name”] = “Robert

“friends[“Rob”][“Phone”] = “555-6789

“friends[“VJ”][“Name”] = “Vijaye

“friends[“VJ”][“Phone”] = “555-4567

“friends[“Ash”][“Name”] = “Ashley

“friends[“Ash”][“Phone”] = “555-2345

TextWindow.Write(“Enter the nickname: “)

()nickname = TextWindow.Read

TextWindow.WriteLine(“Name: ” + friends[nickname][“Name”])

TextWindow.WriteLine(“Phone: ” + friends[nickname][“Phone”])

شکل 5-10 – یک دفترچه تلفن ساده

شکل ۵-۱۰ : یک دفترچه تلفن ساده

 

در اینجا یک نمایش تصویری از آرایه friends وجود دارد.

داده ها به گونه ای ذخیره می شوند که وقتی به friends[“Rob”][“Phone”]  دسترسی پیدا کردیم، ۵۵۵-۶۷۸۹ برگردانده می شود.

استفاده از آرایه برای نمایش جدول ها (شبکه ها)

استفاده بسیار رایج از آرایه های چند بعدی، نمایش شبکه ها/جدول ها است.

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

یک برنامه ساده که جعبه ها را در یک شبکه قرار می دهد در زیر آورده شده است:

rows = 8

columns = 8

size = 40

 For r = 1 To rows

For c = 1 To columns

()GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor

boxes[r][c] = Shapes.AddRectangle(size, size)

Shapes.Move(boxes[r][c], c * size, r * size)

EndFor

EndFor

این برنامه جعبه های مربع شکل را طوری  می چیند که یک شبکه ۸ در ۸ را تشکیل دهند.

علاوه بر چیدن این جعبه ها، این جعبه ها را نیز در یک آرایه ذخیره می کند.

انجام این کار باعث می‌شود که بتوانیم این جعبه‌ها را پیگیری کنیم و در صورت نیاز دوباره از آنها استفاده کنیم.

شکل 7-10 – قرار دادن جعبه ها در یک شبکه

شکل ۷-۱۰ : قرار دادن جعبه ها در یک شبکه

 

به عنوان مثال، افزودن کد زیر به انتهای برنامه قبلی باعث می شود این کادرها در گوشه سمت چپ بالا متحرک شوند:

For r = 1 To rows

For c = 1 To columns

Shapes.Animate(boxes[r][c], 0, 0, 1000)

Program.Delay(300)

EndFor

EndFor

شکل 8-10 – پیگیری جعبه ها در شبکه

شکل ۸-۱۰ : پیگیری جعبه ها در شبکه

 

ترجمه و تألیف : کامبیز حسامی

تهیه شده در : تیناسافت

 

 

بازگشت به صفحه اصلی آموزش اسمال بیسیک

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *