مشاهده نسخه کامل
: براي آموزش آرايه ها
Iranian boy10
26-10-2009, 23:21
سلام لطفاً يه چندتا مثال درمورد مرتب سازي آزايه ها ، مرتب سازي دودويي بزنيد بهمراه توضيحات لطفاً :11:
فصل 2 برنامه سازي 2 ، آرايه ها هست كه من يكم در اين فصل مشكل دارم هفته بعد ميخواد استاد امتحان بگيره ممنون ميشم كمكم كنيد.:11::40::46:
M i L @ D
27-10-2009, 02:05
خب من مرتب سازی آرایه به روش صعودی که بهش حبابی و Bobble Sort هم میگن رو توضیح میدم که امیدوارم بدردتون بخوره :
5|10|2|14|12
اگه شما این اعداد بالا رو خانه های a(4) در نظر بگیرید , خانه ها ی آرایه a بصورت زیر هستند:
a(0) = 12
a(1) = 14
a(2) = 2
a(3) = 10
a(4) = 5
خب برای اینکه این آرایه رو بصورت صعودی ( حبابی ، Bobble Sort ) مرتب سازی کنید کارهای زیر رو انجام بدید :
مرحله 1- اولین خانه ی آرایه را با دومین خانه آن مقایسه میکنید ( ! )
الف ) اگر خانه ی آول آرایه از خانه ی دوم کوچکتر یا مساوی بود برنامه کاری انجام ندهد . ( یعنی اگه a(0) که برابر 12 هست رو با a(1) مقایسه کنیم نتیجه میگیریمa(0) < a(1) ... پس برنامه کاری انجام نمیده )
ب ) اگر خانه ی اول آرایه از خانه ی دوم بزرگتر بود جای آن ها را عوض می کنیم . ( حالا که ما فهمیدیم a(0( از a(1) کوچکتر هست پس دیگه برنامه این قسمت رو انجام نمیده و میره به مرحله دو)
مرحله 2- مرحله ی یک را برای خانه های دوم و سوم تکرار می کنیم .
(یعنی در این روش a(1) رو با a(2) مقایسه میکنیم که نتیجه میگیریم a(1) > a(2) هست ... پس قسمت ب انجام میشه ... یعنی a(1) جاش رو با a(2) عوض میکنه )
و برای سایر خانه ها هم به همین روش ( ! )
خب این از توضیح فارسی ...
اگه بخواید کد نویسی کنید ، باید یک Command Button ایجاد کنید و کدهای زیر رو داخلش بنویسید :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
امیدوارم بدردتون خورده باشه ( ! )
VBYOFSKI
27-10-2009, 13:49
سلام
دو روش برای جستجو داریم یکی ترتیبی و اون یکی دودویی.
ترتیبی:
این روش خیلی راحت و کنده. باید تمام عناصر آرایه رو از اول با متغیر کلید (مورد جستجو) مقایسه کنیم هر کدوم برابر بود اون جوابه. وای خیلی کنده، مثلا توی یه لیست 1000 نفری، داده مورد نظر ما تو خونه 800 هست اینجوری باید 800 بار تکرار بشه. حالا بستش بده تو 100 هزار نفری .....
این کدش:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دودویی:
این روش یکم پیچیدس ولی خیلی سریعتره و به درده آرایها و لیستهای مرتب شده میخوره. روش کلیش اینجوریه که اول باید عنصر وسط آرایه مرتب شده رو به دست بیاریم (مثلا توی یه آرایه 100 تایی میشه 50) اگه درست بود که هیچ ولی اگه نه باید ببینیم کوچیکتره یا بزرگتر. اگه بزرگتر از اون باشه باید نیمه دوم رو بگردیم (یعنی از 51 تا 100) ولی اگه کوچکتر باشه باید نیمه اول رو بگردیم (یعنی 1 تا 49). روش جستجو نیمه هاهم مثل اولیه یعنی باز باید وسطش رو به دست بیاریم ......
این توضیح کلی بود حالا کد نویسیش. ( به فرض اینکه آرایه ما مرتب شده)
اول به چندتا متغیر نیاز داریم:
Dim a(1 To 100) As Integer
Dim Low As Integer, High As Integer, Mid As Integer
Dim KEY As Integer, i As Integer
Dim CNT As Byte
Dim Find As Boolean
آرایهa که لیستیه که توش باید جستجوکنیم.
متغیر Low , High , Mid هم واسه اینه که بفهمی اول و آخر و وسط آرایه کجاست.
KEY متغیریه که مورد جستجو رو نگه میداره.
i اندیس حلقست.
CNTیه شمارندست واسه اینکه ببینیم چندبار حلقه تکرار شده تا جواب به دست اومده.
Find مشخص میکنه که به جواب رسیدیم یا نه.
For i = 1 To 100
a(i) = i
Next i
KEY = Val(InputBox("Enter Your KEY For Find:"))
تو اینجا اول با یه For آرایه رو پر کردیم.
بعد با Inputbox مورد جستجو رو گرفتیم.
Low = 1
High = 100
Find = False
تو این مرحله باید اول و آخر آرایه رو مشخص کنیم. چون اول و آخر آرایه اینجا مشخصه و تغییر نمیکنه اعداد رو دستی وارد کردیم ولی اگه مشخص نیست میتونی از دستور زیر استفاده کنی.
Low = LBound(a)
High = UBound(a)
Find = False
Lbound و Ubound توابعی هستن که به ترتیب کوچکترین عنصر و بزرگترین عنصر آرایه رو برمیگردونن.
Do While High >= Low And Find = False
Mid = (High + Low) \ 2
If a(Mid) = KEY Then
Find = True
ElseIf KEY > a(Mid) Then
Low = Mid + 1
Else
High = Mid - 1
End If
CNT = CNT + 1
Loop
تمام کار جستجو تو این حلقه اتفاق میوفته.
شرطی که گزاشتیم اینجوریه که اگه اوله آرایه (که ما مشخص میکنیم کجاست) ازآخر آرایه (اینم ما مشخص میکنیم) بزرگتر نبود و چیزی هم پیدا نشده بود (Find = False) به جستجو ادامه بده.
تو خط اول باید وسط آرایه رو مشخص کنیم. واسه پیدا کردن وسط یه لیست که اول و آخرشو داریم از این روش استفاده میکنیم. (اینجا حتما باید از تقسیم صحیح استفاده کنیم که عددمون اعشاری در نیاد)
دستور if برسی میکنه اگه داده درون عنصر وسط با KEY برابر بود که جواب پیدا شده در غیر اینصورت:
اگه KEY بزرگتر بود باید نیمه دوم رو بگردیم.
واسه اینکار کافیه اوله آرایه رو بیاریم جلو تر یعنی اوله آرایه باید بشه عدد 51. چون Mid وسط هست بهش یه دونه اضافه میکنیم میشه اوله آرایه.
اگه KEY کوچکتر بود باید نیمه اول رو بگردیم.
واسه اینکار کافیه آخر آرایه رو بیاریم عقب تر یعنی آخر آرایه باید بشه عدد 49. چون Mid وسط هست ازش یه دونه کم میکنیم میشه آخر آرایه.
به CNT یکی اضافه میشه یعنی یه بار جستجو شد.
حالا اگه دوباره شرط درسط بود جستجو ادامه پیدا میکنه.
If Find = True Then MsgBox a(Mid) & " ---- " & CNT
اینجا هم که باید نتیجه و تعدا جستجو رو اعلام کنیم اول باید ببینیم چیزی پیدا شده یا نه. چون Mid همون مکانی هست که
جواب اونجاست پس داده توی همون عنصر رو نشون میدیم.
تو این روش واسه پیدا کردن عدد 80 هفت بار جستجو انجام شده ولی تو روش ترتیبی باید 80 بار بگردیم و واسه 26 شش بار ولی توی ترتیبی 26 بار.
امیدوارم مفید باشه. ولی اگه بازم توش گیر داشتی کنار تمام خطها توی وی بی Brek Point بزار و برنامه رو خط به خط دنبال کن ببین متغیرها چه تغیراتی میکنن راحت همه چی دستت میاد.
VBYOFSKI
27-10-2009, 13:53
سلام لطفاً يه چندتا مثال درمورد مرتب سازي آزايه ها ، مرتب سازي دودويي بزنيد بهمراه توضيحات لطفاً :11:
فصل 2 برنامه سازي 2 ، آرايه ها هست كه من يكم در اين فصل مشكل دارم هفته بعد ميخواد استاد امتحان بگيره ممنون ميشم كمكم كنيد.:11::40::46:
شما مرتب سازی خواستی من جستجو گفتم. :31:
فکر کنم سوالتونو درست نخوندم. :5:
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.