واضح آرشیو وب فارسی:سایت ریسک: View Full Version : براي آموزش آرايه ها Iranian boy1026-10-2009, 11:21 PMسلام لطفاً يه چندتا مثال درمورد مرتب سازي آزايه ها ، مرتب سازي دودويي بزنيد بهمراه توضيحات لطفاً :11: فصل 2 برنامه سازي 2 ، آرايه ها هست كه من يكم در اين فصل مشكل دارم هفته بعد ميخواد استاد امتحان بگيره ممنون ميشم كمكم كنيد.:11::40::46: M i L @ D27-10-2009, 02:05 AMخب من مرتب سازی آرایه به روش صعودی که بهش حبابی و 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 ایجاد کنید و کدهای زیر رو داخلش بنویسید : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! امیدوارم بدردتون خورده باشه ( ! ) VBYOFSKI27-10-2009, 01:49 PMسلام دو روش برای جستجو داریم یکی ترتیبی و اون یکی دودویی. ترتیبی: این روش خیلی راحت و کنده. باید تمام عناصر آرایه رو از اول با متغیر کلید (مورد جستجو) مقایسه کنیم هر کدوم برابر بود اون جوابه. وای خیلی کنده، مثلا توی یه لیست 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 بزار و برنامه رو خط به خط دنبال کن ببین متغیرها چه تغیراتی میکنن راحت همه چی دستت میاد. VBYOFSKI27-10-2009, 01:53 PMسلام لطفاً يه چندتا مثال درمورد مرتب سازي آزايه ها ، مرتب سازي دودويي بزنيد بهمراه توضيحات لطفاً :11: فصل 2 برنامه سازي 2 ، آرايه ها هست كه من يكم در اين فصل مشكل دارم هفته بعد ميخواد استاد امتحان بگيره ممنون ميشم كمكم كنيد.:11::40::46: شما مرتب سازی خواستی من جستجو گفتم. :31: فکر کنم سوالتونو درست نخوندم. :5: سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1047]