به نام خدا
سلام
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
در این تاپیک ، آموزش های متنی AMS گذاشته میشه
لطفا برای دانلود فیلم آموزش یا سئوال و پرسش درباره ی این نرم افزار ، در این تاپیک (اینجا کلیک کنید) بحث کنید
آخرین ویرایش توسط SajjadKhati در تاریخ 24-10-16 انجام شده است
برای نام گزاری متغییرها ، هیچ وقت از تیکه ای از کد استفاده نکنین.
مثلا تو کد Page.StartTimer ، اگه تو خط های قبل اش یا تو رویداد های دیگه (بسته به رویداد داره که اجرا شده باشه کداش یا نه) ، متغییری بنام Page تریف کنین که دقیقا هم نام یه تیکه ی اول از کدمون که Page.StartTimer بود بدیم و فرضا اگه این متغییر Page رو برابر یه عدد یا رشته که مثلا اینجا میخام بگیرم برابر رشته ی علی ینی ali"=Page بگیرم و تو خط بدش کد Page.StartTimer رو بزارم ، همونطور که میدونین هر جا اسم Page بیاد ، بجاش مقدارش که تو اینجا ali بود رو میزاره و چون اون کد هست و اگه کوچیکترین دستگاری ای بشه ، قات میزنه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید پس ارور میده . ینی تو اینجا اگه اینجوری بنویسیم کد رو :
کد:Page = "ali" Page.StartTimer(1000, 10);
کدمون اینجوری جایگزین میشه و بجای تیکه ی اولش که Page بود ، مقدار متغییر مون که ali بود جایگزین میشه :
کد:ali.StartTimer(1000, 10);
. چون کد ali.StartTimer واسه نرم افزار نامفهومه پس موقه اجرا ، ارور میده
یادتون باشه من گفتم اگه دقیق مثل اون یه تیکه ی کدها (حالا قسمت چپ کد که Page بود یا راستش که StartTimer بود) اما همونطور که میدونین که این نرم افزار برای تریف متغییر ، به حروف بزرگ و کوچیک حساسه پس اگه اون متغییر Page رو بصورت page اسم گزاری کنین ، ارور نمیده چون این دو تا رو به عنوان دو تا متغییر جداگانه میشناسه نرم افزار
AMD>INTEL (04-08-14), M3RS4D 50062 (02-04-15), mohammad- (29-07-16), تاج (13-05-15)
Registery :
برای قسمت registery ، هر جا کلمه ی key رو دیدی ، منظورش پوشه های سمت چپ تو رجیستری هه و هر جا کلمه ی value Name رو دیدی منظورش همون اسم value یا همون اولین ردیف تو ستون سمت چپ هست بنام Name هه و هر جا کلمه ی value خالی یا data رو دیدی ، منظورش مقدار value که همون آخرین ردیف تو ستون سمت راست بنام data هه ، هست
تذکر : نوع value اگه از نوع REG_SZ باشه ، به عنوان رشته ذخیره میکنه و اگه از نوع REG_DWORD باشه از نوع عدد اما موقع خوندن و برگردوندن ، همه رو از نوع رشته میخونه و برمیگردونه
M3RS4D 50062 (02-04-15), mohammad- (29-07-16), تاج (13-05-15)
قضیه ی return (کلمه ی کلیدی return) :
return معمولا تو تابع استفاده میشه و اگه برابر یه مقدار شد ، اگه تابع فراخونی بشه ، اون مقداری که تو return دادیم رو برمیگردونه . مثلا :
کد:n=0 function num(n) if n==0 then return 1 end Dialog.Message("Notice", num(n), MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
در اینجا تو خروجی ، num(n) همون مقدار return ای هست که برابر 1 بود ینی تو خروجی نوشته میشه 1
مثلا فاکتوریل رو میخایم با این روش حساب کنیم :
کد:n = Input.GetText("Input1"); n = String.ToNumber(n); function factorial(n) if n == 0 then return 1 else return n * factorial(n - 1) end end Dialog.Message("Notice", factorial(n), MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
تو این دستور از ورودی اینپوت مقداری که وارد شدش رو میگیره و اگه برابر 0 بود (تو ورودی اینپوت عدد 0 نوشته شده بود ) ، تو خروجی factorial(n) ، 1 میشه ینی مینویسه تو خروجی 1
و اگه هر عدد دیگه ای بود ، مثلا اگه بود 3 ، خود اون عدد ضربدر factorial یکی از خودش کمتر حساب میشه ینی اینجوری میشه :
3*factorial(2)
چون تابع factorial دوباره فراخونی شد پس دوباره این تابع اجرا میشه اما این بار با پارامتر یکی کمتر از خودش ینی n=2 ینی در واقع خودش از داخل خودش ، فراخونی میکنه و صدا میزنه تابع خودش رو ینی در واقع همون کار تابع بازگشتی رو میکنه
باز چون n=2 هه ، باز هم این قسمت else اجرامیشه ینی
n * factorial(n -1)
این بار که n=2 هه پس میشه :
3*factorial(2)
خود factorial(2) که مقدار باز گشتی بود دوباره فراخونی میشه و میشه :
2* factorial(1)
ینی در واقع تا حالا شد :
3*(2* factorial(1))
دوباره تابع factorial(1) که اینبار مقدار n برابر 1 هه اجرا میشه و همه ی قبلی ها مثل بالا ضرب میشن در factorial(1) :
factorial(3*(2*(1)))
در اینجا ، تا factorial(1) محاسبه میشه که میشه : factorial(0)*1 و چون factorial(0) مخالف شرط اول تابع هه ، پس فقط تا 1 ضرب میشه و factorial(0) که میشد factorial(-1)*-1 اجرا نمیشه
پس :
3*2*1=6
پس فاکتوریل 3 که میشه 6 بدست اومد
M3RS4D 50062 (02-04-15), mohammad- (29-07-16), تاج (13-05-15)
دستور حلقه ی تکرار while :
اگه ما مثلا بنویسیم :
کد:i=1 while i==5 do Dialog.Message("Notice", "Your message here.", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); End
خوب این ملومه که چون i برابر 5 نیست پس دستور شرط اجرا نمیشه (مثلا اگه تو خط دوم میزاشتیم i==1 چون قبلش تو خط اول برابر 1 بود پس شرط دستور اجرا میشد)
اما وقتی بجای خط بالا بنویسیم :
کد:i=1 while i do Dialog.Message("Notice", "Your message here.", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); end
این بار چون تو خط دوم ، شرط و مقدارخاصی برای متغییر i تعریف نکردیم (ینی نگفتیم که هر وقت i برابر فلان مقدار بود ، شرط رو اجرا کن) ، پس اگه i برابر هر مقداری بود ، اون شرط حلقه ی while اجرا میشه . فقط کافیه که متغییر i قبل حلقه ، تعریف شده باشه (با هر مقداری)
AMD>INTEL (04-08-14), M3RS4D 50062 (02-04-15), mohammad- (29-07-16), nima_hl (05-08-14), تاج (13-05-15)
فرا آرایه (MetaTable) :
همون آرایه ی معمولی خودمونه اما میشه عنصرها یا همون عضوهاش رو برابر یه متغییر گرفت یا حتی برابر یه متغییر نگرفت . مثلا آرایه ی معمولی که این جوریه :
کد:Array={10,7,3,"ali"}
فرا آرایه ای که متغییر داره ، این جوری میشه :
کد:Array={x=10,y=7,z=3,w="ali"}
یا فرا آرایه ای که متغییر نداره ، این جوری میشه :
کد:Array = {{10,7,3},"Ali"}
که به این نوع آخر ، آرایه ی چند بعدی هم میگن که یکی از پرکاربردترین و مهم ترین و کارآسون کننده ترین هاست برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید درباره ی این نوع آرایه یا بهتره بگم فراآرایه ی چند بعدی ، تو صفه ی 2 بحث میکنیم (حتما اگه طالب فراآرایه این ، اون مبحث را پی گیری کنین که خیلی مهمه)
ینی خود عضوهاش رو میشه تو یه متغییر دیگه ریخت و نام گزاری کرد متغییر هاش رو اما تو آرایه ی معمولی ، فقط میشه مقدار داد (نه اینکه متغییر همراش نام برد)
مهم ترین ویژگی فرا آرایه اینه که چون حالت چند بعدی (هر تعداد مثل 3 یا 4 بعدی و ...) هستن ، میشه کار چندین آرایه رو تو یه آرایه انجام داد . منظور از چند بعدی اینه که چندین اندیس (عدد داخل پرانتز آرایه ها) که همون نوعی متغییر هستن میشه براش تعریف کرد پس بجا اینکه چندین آرایه تعریف کرد ، میشه همه ی اون آرایه ها رو (هر چند تا میخان باشن) فقط تو یه فرا آرایه ی چند بعدی خلاصه کرد که کار رو فوق العاده آسون و سریعتر میکنه و علاوه بر اون ویژگی دیگه شم اینه که میشه دو تا فرا آرایه ی مختلف و حتی عضوهای مختلف یه فرا آرایه رو میتونیم روش عملیات ریاضی (جمع و کم و ...) و ... انجام بدیم.
تو فرا آرایه ، حتی میشه بجای یه عضو ، یه آرایه ی دیگه نام گذاری تعریف کرد. (خود اون آرایه هم باز میتونه یه آرایه ی معمولی ( بدون متغییر داخلی ) باشه یا یه فرا آرایه باشه که متغییر داشته باشه)
مثلا اگه آرایه ی معمولی (بدون متغییر) باشه :
کد:a={v={ 7, 1, 30},y=20,z=30}
یا مثلا اگه خودش دارای یه فرا آرایه باشه :
کد:a={v={x=7,y=1,z=30},y=20,z=30}
این جوری ای که گفتم ، دقیق باید همین جوری نام گذاری کرد . ینی مثل حالت عادی باید تعریف کرد دیگه. ینی وقتی حتی میخایم داخل خود یه فرا آرایه ،آرایه یا فرا آرایه ی دیگه ای رو تعریف کنیم ، مثل حالت عادی ای که تعریف میکنیم ، اون آرایه یا فرا آرایه ی داخلی رو هم باید بهش یه نام بدیم . (که در بالا برابر v گرفتیم)
حالا در اینجا فقط اولین عضو فرا آرایه ی a رو براش آرایه و فرا آرایه ی دیگه ای تعریف کردیم . میتونیم عضوهای دیگه رو هم این جوری کنیم
حالا فراخونی فرا آرایه که مهمترین قسمته :
همونطور که میدونیم برای فراخونی عضوهای یه آرایه ، تو لوا ، 2 روش هست . اگه آرایه فقط مقدار داشت (آرایه معمولی بود) ، عضوها رو با اندیس شماره فراخونی میکنیم که در این صورت برای فراخونی عضو خاصی از آرایه ، اول اسم آرایه ی اصلی رو نام میبریم و بعد دو تا کلوشه باز و بسته میکنیم و اندیسی که بصورت شماره هست رو ، شماره شو تو کلوشه میزاریم ولی اگه اون عضوهای اون آرایه ، خودش متغییر داشت (مثل همین فرا آرایه) ، عضوها رو با اندیس اسم متغییر اش فراخونی میکنیم که در این صورت برای فراخونی عضو خاصی از آرایه ، اول اسم آرایه ی اصلی رو نام میبریم و بعد یه نقطه میزاریم و بعد اسم متغییر اون عضو خاص رو مینویسیم
مثلا دو تا فرا آرایه داریم که فرا آرایه ی اول اسمش a هست و فرا آرایه ی دوم اسمش b :
کد:a={x=10,y=20,z=30} b={x=2,y=7,z=5}
خوب حالا مثلا میخایم بگیم که x امین عضو از فرا آرایه ی a که 10 هست رو با x امین عضو از فرا آرایه ی b که 2 هست رو جمع کن ، این جوری فراخونی میکنیم که چون خود عضو های آرایه ، متغییر دارن ، پس باید اسم متغییر هاشون رو برد ینی فراخونی آرایه با روش دوم که تو بالا گفتم پس a.x ینی x امین عضو از فرا آرایه ی a که 10 بود و b.x هم همون x امین عضو از فرا آرایه ی b رو که 2 بود برمیگردونه پس مینویسم :
c=a.x+b.x
ینی 10+2 که میشه 12 رو تو متغییر c ذخیره میکنه و تو کد پایین نمایش میده
کد:Dialog.Message("Notice", c, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
ما میتونیم هر عضو از یه فرا آرایه رو با هر عضوی که دلمون خاست ، عملیات ریاضی انجام بدیم تو مثال بالا مثلا :
C=a.z+b.x
که z امین عضو از آرایه ی a رو که 30 بود با x امین عضو از آرایه ی b که 2 بود رو جمع میکنه که میشه 32 و تو متغییر c ذخیره میکنه
و حتی فقط عضوهای یه آرایه رو عملیات ریاضی انجام بدیم که خوب ملوم بود و لازم به گفتن نبود.
همینطور میتونیم عضوهای یه فرا آرایه رو با عضوهای یه آرایه ی معمولی با هم ، عملیات ریاضی انجام بدیم مثلا :
کد:a={x=10,y=20,z=30} b={ 2, 7, 5}
a که یه فرا آرایه هست و b هم یه آرایه ی معمولی . طرز فراخونی هر دو تا شونو تو همون اول گفتم . اونی که متغییر نداره ، ینی عضوهای آرایه ی معمولی رو با شماره (ای که داخل کلوشه هه) فراخونی میکنیم و عضوهای فرا آرایه رو چون متغییر داره ، با اسم متغییرش (با نقطه قبل اش) فراخونی میکنیم پس اگه میخایم بگیم اولین عضو فرا آرایه ی a رو که 10 هست میشه a.x و اگه میخایم بگیم اولین عضو آرایه ی b که 2 هست میشه b[1] ینی :
کد:c=a.x+b[1]
که همون 10 رو با 2 جمع میکنه و 12 رو تو c ذخیره میکنه و .. :
کد:Dialog.Message("Notice", c, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
همین طور که همون اول گفتم ، میتونیم داخل یه فرا آرایه ، یه فرا آرایه ی دیگه ای رو به عنوان عضواش تعریف کنیم و با یکی دیگه عملیات ریاضی انجام بدیم مثلا :
کد:a={x={x=7,y=1,z=30},y=20,z=30} b={x=2,y=7,z=5}
در اینجا ما میخایم بگیم اولین عضو از فرا آرایه ی a که خودش هم یه فرا آرایه ای هه بنام x بگیم که اولین عضو از این فرا آرایه ی x رو که متغییری هست بنام x که مقدارش 7 هست رو با اولین عضو از فرا آرایه ی b که متغییر اش x با مقدار 2 هست رو جمع کنه.
همیشه مقدار بعد از آخرین نقطه تو فراخونی ، اندیس یا همون عضو آرایه هست و قبل از اون آخرین نقطه همه شون میشن اسم آرایه پس ینی فقط کافیه برای فراخونی اولین عضو فرا آرایه x که خودش تو فرا آرایه ی a هست ، کلا به ترتیب اسم هر آرایه و هر متغییری رو که میخای ، بزاری و بین شون نقطه بزاری ینی :
a.x.x
ینی همون مقدار 7 که اولین عضو فرا آرایه ی x هه. ینی x امین عضو از فرا آرایه ی x که خودش تو فرا آرایه ی a هه
یا مثلا a.x.y ینی y امین عضو از فرا آرایه ی x که تو فرا آرایه ی a هه که تو مقدار بالا میشه همون 1
خوب حالا بریم سر اصل مطلب که میخاستیم اون 7 رو با 2 که گفته شد جمع کنیم .2 هم که منظورمون همون اولین عضو فرا آرایه ی b بود میشه b.x
پس میشه :
کد:c = a.x.x + b.x Dialog.Message("Notice", c, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1
یادتون نره که تو صفه ی 2 پست 14 ، فراآرایه ی چند بعدی رو هم دنبال کنین چون مبحث کاربردی ایه
135713571357 (08-02-15), amjad-i (17-12-14), M3RS4D 50062 (02-04-15), mohammad- (29-07-16), nima_hl (05-08-14), تاج (13-05-15)
نوشتن فراآرایه به روش دیگر و کاربردی تر :
خسته کیه؟
نشنیدم؟
شنیدم بابا ، آروم تر ، کر شدم
خوب گلپسران اساتید ، نگا کنین ، همونطور که میدونین ، آرایه رو به دو روش میشه نوشت . یکی مثل روش بالا که تو پایین هم مینویسم و بلدین :
کد:Array={10,7,3,"ali"}
یه نمونه ی دیگه که بیشتر از همه کاربرد داره ، بخاطر اینکه میتونیم برا ساختش از حلقه ی for استفاده کنیم ، این جوریه که بازم بلدین :
کد:Array = {} Array[1] = 10 Array[2] = 7 Array[3] = 3
خوب اِسا (حالا) داستان این جِه ی جا شرو بونِه که (داستان از اینجا شرو میشه که) فرا آرایه رو بصورت روش دوم بنویسیم . مازندرانی رو فول شدین عایا؟ نشدین ، تمرین میکنیم همونطور که بلدین و میدونین ، زیاد سخت نیست . دقیق مثل نام گزاری آرایه های معمولی هه . میدونین این قد رو که و همونطور هم که تو بالا اشاره ای شد ، اگه آرایه ای که زیر آرایه اش (عضو اش) اسم داشته باشه (ینی سمت چپ اش مساوی باشه) ، خوب اول باید اسم آرایه ی کل رو بنویسین و بعد یه نقطه بزارین و اسم اون آرایه یا همون عضو یا همون متغییر رو بنویسین . یا اینکه اسم نداره و فقط متغییر و عضو اش مقدار دارن که در این صورت باید شماره ی اون عضو رو تو اندیس بنویسین. مثلا تو مثال :
کد:a={v={ 7, 1, 30},y=20,z=30}
برا نامگزاری و فراخونی y امین عضو آرایه ی a که 20 هست (**یادتون باشه که تا وقتی که یه عضو را برابر یه متغییر گرفتیم ، مثل همین y ، دیگه گفتن شماره و اندیس برا اون عضو بی معنی هه ینی اینجا نمیششه گفت دومین عضو آرایه ی a برابر 20 هست . باید بگین y امین عضو از آرایه ی a) باید بنویسین a.y که میدونین و اوستایین دیگه ، ینی y امین عضو از آرایه ی a که چن بود؟ 20 بود دیگه. خوب پس فراخونی اش چجوری هه؟ ینی هر جا نقطه اومد ، سمت راست اون نقطه (در اینجا y) زیر مجموعه ی هر چی که سمت چپ نقطه نوشته هه هست (در اینجا a) و ممکنه حتی این زیر مجموعه (در اینجا y ) ، خودش یه آرایه ی دیگه ای باشه (که فلا تو این مثال نیست )
**یادتون باشه که تو فرا آرایه ، اگه عضوی نامگزاری نشه (متغییر براش تعریف نشه و مثل حالت عادی باشه)، به عنوان اولین عضو اون آرایه حساب میشه . مثلا تو مثال :
کد:a={v={ 7, 1, 30},y=20,30}
تو اینجا ، از زیر مجموعه های آرایه ی a ، آرایه ی v که خودش زیرآرایه ی a هسست (ینی واسه خودش یل ای هه و ازدواج کرد و تشکیل خانواده داد ) ینی هر چی که آرایه بود رو کار نداریم . y که براش نام انتخاب شد و عضو نامداری هه (ینی آدم معروف و نامداری هه) تنها بی نام و نشون میمونه اون آخری هه که 30 هست و برخلاف تصور ، اولین بی نام و نشون میشه ، اولین عضو آرایه که a بودش . ینی :
کد:a[1] = 30
میباشد.
مثالای دیگه هم که تو پست بالا کار کردیم و نامگزاری رو بلدین دیگه؟ مثل :
کد:a.v[2] = 1
ینی اینکه دومین عضو از آرایه (یا زیر آرایه) ی v از آرایه ی a که میبینین میشه 1
حالا بریم سر خر ماجرا (نه اسب) ینی که میخایم همون آرایه ی a ی بالا رو یه جور دیگه بنویسیم (که اصل ماجرا گفته شد) :
اول اینو پایین دوباره بنویسم تا تو چش بیاد قشنگ :
کد:a={v={ 7, 1, 30},y=20,30}
دونه دونه از اول انگار میخایم فراخونی کنیم و مثل مثال ساده ای که همون اول همین پست (چند خط اول) گفتم ، هر جا آرایه یا زیر آرایه (منظورم از زیر آرایه عضو های عادی نیستا . مثل v تو مثال بالا هه که زیر آرایه هه) و کلا هر جا علامت آرایه که میدونین {} دیدین ، مثل مثال اول ، قبلش باید تعریف کنین پس من برا نوشتن آرایه ی بالا ، اول آرایه ی a رو دیدم .پس تو خط اول مینویسم:
کد:a = {}
بعد آرایه یا همون زیر آرایه ی v دیدم پس تو خط بعدش باید عضو شو ملوم کنم . مثل همون قضیه ی بالا ینی جایگاه v اینجوری میشه که v امین عضو از آرایه ی a هست و چون خودش آرایه هست باید یه آرایه براش تریف کنم :
کد:a.v = {}
حالا نوبت میرسه به اولین عضو زیر آرایه ی v که 7 هست و چون اولین عضو آرایه ی v هست و عضو اش هم نامگزاری نشدش پس باید با اندیس نامگزاری کنم پس تو خط بعد مینویسم :
کد:a.v[1] = 7
همینطور خط بعد :
کد:a.v[2] = 1
همینطور خط بعد :
کد:a.v[3] = 30
خط بعدش هم که عضو y میشه و دیگه زیر مجموعه ی آرایه ی v نیست پس دیگه v رو لازم نیست بنویسیم و میشه y امین عضو از آرایه ی a ینی :
کد:a.y = 20
خط بعدش هم همونطور که گفته شد ، چون عضوش نام نداره و اولین عضو بدون نام هست ، پس اولین عضو آرایه ی ماقبل خودش که a هست میشه ینی :
کد:a[1] = 30
پس در کل نوشتن اش تو خط های پشت سر هم میشه :
کد:a = {} a.v = {} a.v[1] = 7 a.v[2] = 1 a.v[3] = 30 a.y = 20 a[1] = 30
حالا یه مثال دیگه :
کد:Array = {Madrese={5,"Tafrih"},"Ali",Khone={12,Bazar={1,2,3,4,5,6,7,8}}}
جان من اسم متغییرها رو حال کردین؟
اینو توضیح بدم؟ مینویسم ، مثل قضیه ی بالاهه هر کی سئوال داشت ، بگه (کسی نمیاد اینورا که بخونه که سئوال داشته باشه )
کد:Array = {} Array.Madrese = {} Array.Madrese[1] = 5 Array.Madrese[2] = "Tafrih" Array[1] = "Ali" Array.Khone = {} Array.Khone[1] = 12 Array.Khone.Bazar = {} Array.Khone.Bazar[1] = 1 Array.Khone.Bazar[2] = 2 Array.Khone.Bazar[3] = 3 Array.Khone.Bazar[4] = 4 Array.Khone.Bazar[5] = 5 Array.Khone.Bazar[6] = 6 Array.Khone.Bazar[7] = 7 Array.Khone.Bazar[8] = 8
همونطور که میدونین ، 8 تا خط آخر هم میتونین با حلقه ی for تریف کنین :
کد:Array = {} Array.Madrese = {} Array.Madrese[1] = 5 Array.Madrese[2] = "Tafrih" Array[1] = "Ali" Array.Khone = {} Array.Khone[1] = 12 Array.Khone.Bazar = {} for i=1,8 do Array.Khone.Bazar[i] = i end
دیدین که همه چی آسون بود
یادتون نره که تو صفه ی 2 پست 14 ، فراآرایه ی چند بعدی رو هم دنبال کنین چون مبحث کاربردی ایه
4199 (23-05-15), AMD>INTEL (04-08-14), M3RS4D 50062 (02-04-15), nima_hl (05-08-14)
فرا آرایه یا آرایه ی چند بعدی :
قبل از همه جا داره یه تشکر حسابی از آقا محمد (سید اهل انجمن ) کنم که واقعا تا آخرین سئوالات من جواب داد. فعلا که جز تشکر خشک و خالی نمیتونم کنم . ان شاء ا... جبران کنم (نمیتونم )
بعد بگم که حتما باید پست فرا آرایه رو که تو صفحات قبل هه بخونین تا این مطالب براتون نا آشنا نباشه و راحت تر یاد بگیرین
همونطور که تو همون پست گفته شد ، مهم ترین ویژگی فرا آرایه اینه که چون حالت چند بعدی (هر تعداد مثل 3 یا 4 بعدی و ...) هستن ، میشه کار چندین آرایه رو تو یه آرایه انجام داد . منظور از چند بعدی اینه که چندین اندیس (عدد داخل پرانتز آرایه ها) که همون نوعی متغییر هستن میشه براش تعریف کرد پس بجا اینکه چندین آرایه تعریف کرد ، میشه همه ی اون آرایه ها رو (هر چند تا میخان باشن) فقط تو یه فرا آرایه ی چند بعدی خلاصه کرد که کار رو فوق العاده آسون و سریعتر میکنه و علاوه بر اون ویژگی دیگه شم اینه که میشه دو تا فرا آرایه ی مختلف و حتی عضوهای مختلف یه فرا آرایه رو میتونیم روش عملیات ریاضی (جمع و کم و ...) و ... انجام بدیم.
تعریف فرا آرایه ی چند بعدی :
همون دقیق مثل فرا آرایه ی قبلی هه اما هر جا داخل فرا آرایه ، متغییر دیدین ، نزارین . همین یَندِک
مثلا تو همون پست قبلی که درباره ی فرا آرایه بود مثال زیر یکیش بود :
کد:Array={v={ 7, 1, 30},y=20,z=30}
برا تبدیل این به چند بعدی ، کافیه هر چی داخل فرا آرایه ی Array ، متغییر میبینین ، حذف کنین ینی کنینش :
کد:Array={{7,1,30},20,30}
فراخونی فرا آرایه ی چند بعدی :
همیشه یکی از مهم ترین مباحث فراخونی هه . قبل از این بزارین یه مثال بسیار ساده از فراخونی آرایه بگم که همه تون بلدین . تو آرایه ی
کد:کد:ABC = {54,65,3}کد:
وقتی میگین ABC[2] ینی چی؟ نخندین . بال بِنِه بَزِه بَمِرداشون (این تیکه مخصوص زبون خودمه . مازندرانی کی این دور و بره؟ ترجمه نکنه ) الان میگین خوب هر کی میدونه ینی دومین عضو آرایه ی ABC . آری اما این جوری معنی کنین . ینی دومین آرگومان یا ورودی یا همون بعد از دومین ویرگول از آرایه ی ماقبل خودشABC هست . آرگومان هم که ملومه دیگه چیه. هر جا ویرگول شد ، میشه آرگومان بعدی (البته ورودی نمیشه گفت چون باید متغییر دریافت بشه که روش الگوریتم پیاده شه که مخصوص توابع هست). الان تو بالا ، 54 میشه آرگومان اول و 65 که میشه بعد ویروگول میشه دومیش و 3 هم که بازم بعد ویرگوله میشه سومیش (آرگومان حالا میخاد یا عضو هست یا زیر آرایه)
بازم قبل از چیزای دیگه با چن تا دیگه از فرا آرایه ی چند بعدی آشنا شین . مثال ها :
کد:Array={{{"ali",54,"Salam"},{true,789,"Payam"}},{4,Moteghaeir,75},{985},"BedoneZirArrayeh",25}
حالا های مثال ها رو بردارین . همین یکی بسه و ملومه دیگه مثل فرا آرایه ای که قبلا گفته شد ، داخلشون به اندازه ی نا محدود میشه بازم آرایه تعریف کرد اما بدون متغییر
اول نحوه ی فراخونی رو بگم این جوریه که اول اسم فرا آرایه رو مینویسین و بعد یه اندیس میزارین و داخلش ، شماره ی آرگومان داخل اون آرایه ی قبلی رو مینویسین و بازم بعدش اندیس میزارین و شماره ی آرگومان داخل آرایه ی قبلی اش رو مینویسین و قص علی هذا (ینی و غیره عربی ام گل کرد) تا اینکه تو اندیس آخر ، شماره ی عضو اون آرایه یا زیر آرایه ای رو که میخاین ، بدین
حالا چند مثال از فراخونی (این بار جمع واقعیه ها . واقعا چن تا طوماره ) :
1) تو فرا آرایه ی
کد:Array={{7,1,30},20,30}
عدد 1 فراخونیش چجوریه؟
داخل فرا آرایه ی Array ، زیر آرایه ای که عدد 1 توش هستش تو آرگومان اول هه ینی اولین آرگومان آرایه ی ماقبل اش که Array هست رو مینویسیم که تا اینجای کار میشه :
کد:Array[1]
حالا دیگه داخل این زیر آرایه ، فقط اعضاش میمونه که چون 2 رو میخایم عدد 2 رو تو اندیس بعدی مینویسیم ینی کلا میشه :
کد:Array[1][2]
تا اینجا دید یو آندرستند (تود)؟ ندید یو؟ خاهید دید یو
مقدار این تو زیر چی میشه؟ :
کد:Array[3]
خوب این که دیگه ملومه فقط آرایه هست نه فرا آرایه یا چند بعدی . چون یه دونه اندیس فقط داره و آخرین اندیس هم شماره ی عضو رو ملوم میکرد. از این حالت هم متوجه نشین ، از همون حالت قبل میریم ینی داخل فرا آرایه ی Array ، سومین آرگومان اش چی میشه تو اینجا هم آرگومان منظورش چیه؟ منظورش همون سومین عضوه . اولین آرگومان اش که همون زیر آرایه میشه و دومیش که 20 و سومیش 30 هه که ملومه
من برم شام بخورم بیام
اگه گفتین چی داشتیم؟ دلتون خربزه
2) تو فرا آرایه ی
کد:Array={{{7,1,30},{780}},{20,45},50,80,95,{451,313}}
این فراخونی زیر برا کدوم عدده؟ :
کد:Array[1][2][1]
و همینطور به ترتیب عددهای 313 و 30 و 780 و 20 چجوری فراخونی میشن؟
اول قسمت الف ینی فراخونی برا کدوم عدده رو بگم . گفت Array[1] منی این چی بود؟ این بود که اولین آرگومان داخل آرایه ی ماقبل خودش ینی اولین آرگومان داخل آرایه ی Array . خوب . داخل آرایه ی Array اولین آرگومان اش کدومه؟ چون داخل آرگومان اول ، چند تا زیر آرایه هست ، خوب ملومه دیگه ینی منظورش کل زیر آرایه هایی هه که تو آرگومان اول تعریف و پرانتزش باز و بسته شد . پس منظورش تا اینجا میشه :
کد:{{7,1,30},{780}}
حالا اندیس بعدی که 2 هه . ینی چی ینی دومین آرگومان داخل آرایه ی قبلی خودش . آرایه ی قبلی چی بود؟ همین خط بالاییه دیگه . ینی دومین آرگومان داخل این خط بالاییه . اولین آرگومان اش که میشه
کد:{7,1,30}
این آرایه و دومیشم که میشه :
کد:{780}
پس منظورش اینه و آخری هم که شماره ی عضوه که ملومه تو این آرایه ، یه عضو بیشتر نیست پس جواب یا مقدار فراخونی :
کد:Array[1][2][1]
میشه 780
جواب سئوال قسمت ب برا عدد 313 :
عدد 313 داخل کدوم زیر آرایه هست؟ ینی شماره ی آرگومان اون زیر آرایه ، چنده؟ اولین آرگومان فرا آرایه ی Array که میشه
کد:{{7,1,30},{780}}
دومیشم که میشه
کد:{20,30}
سومیش میشه 50 و چارمیش 80 و پنجمیش 95 و شیشمیش که میشه همون زیر آرایه ی مورد نظر ما که
کد:{451,313}
هست . پس اولین اندیس اش میشه 6 . حالا 313 چندیمین عضو این زیر آرایه هه؟ دومی دیگه پس فراخونیش میشه :
کد:Array[6][2]
برای عدد 30 :
برا اینکار هم از داخل فرا آرایه ی اصلی شرو کنین و هر جا که به آرگومان مورد نظر رسیدین ، عدد اون رو داخل اندیس بنویسین و همینطور برا آرگومان بعدی ، دوباره تو اندیس کناریش و ... تا به شماره ی عضوش برسین
برا عدد 30 ابتدا، به اولین آرگومان برخورد میکنیم که
کد:{{7,1,30},{780}}
هست پس اینجا تو اولین اندیس عدد 1 را مینویسیم . برا اندیس بعدی ، بازم داخل این ، عدد 30 رو تو آرگومان اول میبینیم که بازم زیر آرایه هست . که میشه این آرایه :
کد:{7,1,30}
پس بازم اندیس 1 میدیم و برا اندیس بعدی هم میمونه شماره ی عضو عدد 30 که میشه 3 پس کلا میشه :
کد:Array[1][1][3]
عدد 780 که جوابش تو قسمت الف داده شد . میمونه عدد 20
این زیر آرایه
کد:{20,30}
چندمین آرگومان Array هه؟ خوب ملومه دومی. پس اولین اندیسش میشه 2 و اندیس بعدی هم که شماره ی عضو عدد 20 رو باید بنویسیم که اولین عضوش هست پس میشه :
کد:Array[3][1]
بازم دیدید؟ ینی دید یو آندرستودینگا؟ هاتی اینگا پاتی اینگا؟ منم هنگ کردنینگا والا . بده یه قرن نوشتن ، کروم قات زد ، اون وری هم تو انجمن ذخیره نشد ، مردم دارم دوباره مینویسم
تعریف فرا آرایه ی چند بعدی به روش کاربردی تر :
خوب گلپسران میدونین که تعریف آرایه دو روش داره که اون روش کاربردی تر که خیلی راحت تره و دقیق موقه فراخونی هم ازش استفاده کردیم گفته نشد که گفته میشه
قبل از توضیح ادامه ی این مطلب ، دقیق تو فرا آرایه ای که چن صفه پیش گفته شد و اگه میخاستین تعریف کنین ، همه ی اعضاشو (که اونجا اعضاشون میشه گفت متغییر بودن و با نقطه از هم جدا میشدن) باید به عنوان آرایه تعریف میکردین ینی علامت آرایه که {} هست میزاشتین ، اینجا هم همینطوره . مثلا تو اونجا برا تعریف Array.AddedSoftware.Patch باید اینجوری مینوشتین :
کد:Array={} Array.AddedSoftware={} Array.AddedSoftware.Patch={}
و حالا عضوهای زیر آرایه ی Array.AddedSoftware.Patch رو ملوم میکردین
تو اینجا هم خوب آخرین عضوه که لازم به این کار نیست براش ینی اندیس آخری رو کاری باهاش ندارین چون عضو آرایه هست ولی برای تمام اندیس های قبلیش به همراه فرا آرایه ی اصلی که اسمه ، دونه دونه آرایه تعریف میکنین ینی برابر علامت آرایه میگیرین مثل بالا . مثلا اگه مقداری فراخونی شد که 4 تا اندیس داره (بجز آخری) برا بقیه ، دونه دونه آرایه تعریف میکنین . مثلا برا فراخونی این:
کد:Array[4][1][4][2]
اون آخری اندیس که 2 هست که شماره ی عضوه که هیچ چی (ینی اون باید برابر مقدار که یا عدده یا رشته یا بولین حتما گرفته بشه وگرنه nil یا پوچ میشه مقدارش) و منظورم از هیچ چی اینه که برا اون علامت آرایه لازم نیست بزاری (چون صوبت فلا سر علامت آرایه گرفتنه) و برا دونه دونه اندیس های قبلیش باید آرایه تعریف کنین مثل مثال بالا ینی باید حتما قبلش اینو بنویسین :
کد:Array={} Array[4] = {} Array[1] = {} Array[4] = {}
حتما هم لازم نیست همه ی زیر آرایه ها تعریف بشن یا همه ی اعضاشون . مثلا میتونیم بدون اینکه زیر آرایه ی اول رو تعریف کنیم ، بپریم رو دومی و دومی رو تعریف کنیم ولی یادمون باشه هر کدوم رو که تعریف نکنیم ولی فراخونی کنیم (چه عضو یا چه زیر آرایه) ، مقدارش برابر nil میشه که ملومه مثلا :
کد:Array[13][1]=30
میتونیم مستقیم فقط همین رو تعریف کنیم بدون اینکه زیر آرایه یا عضوهای دیگه رو تعریف کنیم اما بقیه ی اعضا یا زیر آرایه تا تعریف نشن ، برابر nil میمونن که ملومه . منظورم اینه که تو بالا که Array[4] تعریف شد ، حتما نباید Array[1] و Array[2] و Array[3] قبل اش تعریف بشن و میتونیم فقط آرایه برا بالا رو تعریف کنیم بدون اینکه اروری داشته باشیم ینی برا تعریف و مقدار دادن فرا آرایه ی بالا ، قبلش فقط کافیه این رو تعریف کنیم که تو بالا هم گفته شد :
کد:Array={} Array[13] = {}
در این مثال بالا هم فقط سیزدهمین زیر آرایه از فرا آرایه ی Array تعریف شد که اولین عضوش برابر 30 هه
مِرِه خو گِج هاکرده (نکِردِه) مازندرانی ندارین بین تون ها . آ راستی اوستا محسن هستا . لو میرم
ادامه اش شد واسه امروز . اولین پستی هه که از روز قبل فرا رفت
خوب حالا بریم چندین مثال (چندین منو که میدونین . همون یه دونه منظورمه ) از ساخت آرایه ی چند بعدی توسط حلقه ی for بزنیم و دنده خلاص
فرض کنین میخایم آرایه ی زیر رو تعریف کنیم :
کد:Array[2][2][1] = "Ali" Array[1][1][1] = "hasan"
با استفاده از حلقه ی for ، چجوری قبلش آرایه براشون تعریف میکنیم؟ دیگه این قد که کاری نداره و توضیح دادن نمیخاد که . ها؟ هم نحوه ی ساخت آرایه گفته شد و هم این حلقه رو بلدین پس مستقیم میریم سر وقت جواب :
کد:Array={} for i=1,2 do Array[i] = {} Array[i][i] = {} end
دیگه توضیح لازم نیست دیگه . میدونین چرا 2 تا اندیس رو به عنوان آرایه تعریف شد دیگه. تو مثال بالا که گفته شد . به تعداد اندیس ها بجز آخری باید قبلش آرایه تعریف بشه دیگه که تو حلقه ی for شد
**یه نکته :
اگه تو حلقه ی بالا که آرایه تعریف کردین ، این جوری مقدار دهی کنین ، اشتباست و موقه فراخونی ارور میده :
کد:Array[1][1] = "Ali" Array[1][1][1] = "hasan"
همون واسه اولی ارور میده که اسم "Ali" هست . چرا؟
چون شما حلقه ی for رو که بررسی کنین ، میبینین این ساختار از آرایه رو تعریف کردین (رشته ی "SomeThing" فقط برا پر کردن عضو هست . تعداد عضو هم میتونه فرق داشته باشه اما من دلخواه ، یه دونه گرفتم برا هر کدوم) :
کد:Array = {{{"Somthing"},"Somthing"},{"Somthing",{"Somthing"}}}
خوب حالا اگه مقدار دهی ای که قبلا کرده بودین ینی :
کد:Array[1][1] = "Ali"
رو بررسی کنین ، میبینین که تو ساختار که تعریف کردین ، تو آرگومان ، بجای اون قرمزه ، یه زیر آرایه تعریف کردین اما موقه مقدار دهی ، اون رو زیر آرایه در نظر نگرفتین و مستقیم بهش یه مقدار دادین ینی این جوری گفتین (به پرانتز قسمتی که قرمزه تو بالا و پایین خوب دقت کنین) :
کد:Array = {{"Somthing","Somthing"},{"Somthing",{"Somthing"}}}
که حالا بجای SomeThing ، مقدار Ali رو تعریف کردین اما دومین تعریف تون درسته که Hasan هست . پس تو این جور تعریفات ، خوب دقت کنین که چی تعریف میکنین به عنوان زیر آرایه یا آرایه ی چند بعدی و چی مقدار دهی میکنین . حواستون به سازگاری اینا مثل بالا باشه
حالا اینم مثال آخر :
کد:Array = {} Number = 1 for i=1,3 do Array[i] = {} for x=1,3 do Array[i][x]=Number Number = Number + 1 end end
این الگوریتم هم ملومه دیگه . یه فرا آرایه ی 2 بعدی هه که 3 در 3 هست ینی 3 تا آرایه یا زیر آرایه داخلشه که هر کدومشون 3 عضو دارن و دقیق میشه این رو تعریف کردین :
کد:Array = {{1,2,3},{4,5,6},{7,8,9}}
مِردال شدیم رفتیم نشدیم رفتیم طومار غضنفر علی شاه شد
ان شاء ا.. که یاد گرفته باشین و بازم سر آخر کاری نمیتونم برا سید مون کنم جز یه تشکر خشک و خالی
به نیت اموات خودمون و خودتون و هر کسی که تو کلیه ی این آموزش ها سهیم اند هم یه صلوات بفرستین ، ممنون میشم
4199 (23-05-15), AMD>INTEL (04-08-14), M3RS4D 50062 (02-04-15), nima_hl (05-08-14)
دستورnext برای گرفتن عضو بعدی آرایه:
با این دستور (کلمه ی کلیدی نیست) ، میتونیم مقدار متغییر (یا همون عضو) بعدی یه آرایه رو بدست بیاریم. ساختارش دقیقا به این صورت هست (یه قسمت رو ننویسی ، نمیشه) :
باید برای ریختن متغییر بعدی با دستور next ، براش دو تا متغییر تعریف کنی (برابر دو متغییر دیگه بگیری) که هر کدوم با علامت ویرگول جدا میشن . و سر آخر ، اسم دومین متغییر که سمت راست ویرگول بود رو نام ببری . طرز استفاده شم اینجوریه که بعد از اینکه کلمه ی next رو نوشتی ، اون آرایه ای که مد نظرته و میخای متغییر یا عضو بعدی شو بدونی ، اسم شو مینویسی و بعد یه ویرگول میزاری و شماره ی اون آرایه ای که میخای عضو بعدی شو بدونی رو مینویسی مثلا اگه بنویسی 2 ، عضو بعدی اون آرایه رو میگه ینی سومین عضو اون آرایه رو میگه.
یه مثال :
کد:array = {"ahmad","hasan","rahmat","rahman",4} First,Secand=next(array,2) Dialog.Message("Notice", Secand, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
که آرایه ی بنام array مون تو اینجا ، 5 عضو داره که 4 تای اولی ، رشته و پنجمین عضوش ، عدد هست
همونطور که گفتم ، در خط دوم ، برای قضیه ی next که عضو بعدی اون آرایه ای رو که بهش بگیم ، بهمون برمیگردونه رو باید تو دو تا متغییر ریخت و با ویرگول جدا کرد و متغییر سمت راست رو فراخونی کرد تا دستور next کار کنه. پس اولین متغییر رو تو اینجا اسمشو گرفتم First و با یه ویرگول ، اسم دومین متغییر اش رو Secand گرفتم. ساختار next هم که گفتم بعد از نوشتن next ، یه پرانتز باید باز کرد که اولین قسمتش اسم آرایه ای رو که قبلا تعریف کرده بودیم و تو دومین قسمت اش (که با ویرگول جدا میشن) ، شماره ی اون عضوی از آرایه که عضو بعدی شو میخایم رو باید نوشت و چون اینجا نوشته شد 2 ، پس عضو بعدی آرایه ینی عضو سوم آرایه ی array که "rahmat" هست ، داخل دومین متغییری که بعد ویرگول نام برده شد (در اینجا متغییر Secand ذخیره و برگردونده میشه)
خط آخر هم که دیگه معلومه و متغییر Secand که سومین عضو آرایه ی array هست ، فراخونی شد که گفتم دیگه و "rahmat" رو برمیگردونه.
تذکر : اگر هم تو قسمت یا همون ورودی دوم دستور next ، کلمه ی nil رو بنویسیم ، اولین عضو اون آرایه که معلوم کردیم ، مقدارش برامون برگردونده میشه (نه اینکه یکی بعد از اولین عضو ینی دومین عضو آرایه برگردونده شه ها . تو این nil دیگه اینجوری نیست . خود اولین عضوش رو برمیگردونه. خود nil هم به منی هیچ و پوچ هست دیگه )
ینی اگه تو بالا خط دوم مینوشتیم :
کد:First,Secand=next(array,nil)
وقتی متغییر Secand فراخونی بشه ، اولین عضو از آرایه ی array که "ahmad" هست ، برگردونده میشه اما خوب ملومه که اگه بنویسیم :
کد:First,Secand=next(array,1)
یکی بعد از اولین عضو ینی دومین عضو اون آرایه برگردونده میشه
خوب اینا رو که گفتم ، واسه متغییر دوم ینی Secand (متغییری که بعد ویرگول نوشته شه) برگردونده و ذخیره میشه
اما داخل اولین متغییر (متغییر قبل ویرگول) ، اون عدد بعد از اون عددی که مشخص کردیم برگردونده میشه (فقط عددها. نه عضو بعدی اون آرایه) ینی الان تو مثال اولی که
کد:First,Secand=next(array,2)
بود ، داخل متغییر First ، عدد بعدی عدد 2 که عدد 3 هست ، ذخیره و برگردونده میشه. (نه سومین عضو آرایه ای که ملوم شد)
اما اگه فقط یه دونه متغییر برا دستور next تعریف شده باشه ، فقط مثل همین خط بالا که گفتم ، عدد بعدی اون عددی که نوشته شد رو برمیگردونه (نه عضو بعدی آرایه رو) . مثلا :
کد:abc =next(array,2)
الان دیگه متغییر abc ، مثل چن خط بالا که گفتم ، عدد بعدی 2 که همون 3 هست رو برمیگردونه (پس برا اینکه عضو بعدی آرایه برگردونده شه ، باید متغییر دوم (سمت راست ویرگول) رو فراخونی کرد.
این دستور معمولا توی تولید مثل (ریختن یه آرایه تو یه آرایه ی جدید دیگه) کاربرد داره
4199 (23-05-15), M3RS4D 50062 (02-04-15), nima_hl (05-08-14)
توضیح یه الگوریتم برای تکثیر یه آرایه (نیازمندی هاش اول تمرین و بعد دیدن فیلم ها + پست های آموزش قبلی هه) :
ینی میخایم یه آرایه رو کپی کنیم و علاوه بر اینکه خود اولیش باشه ، عضوهاشو تو یه آرایه ی دیگه بریزیم
خوب اول بگم که اساتیدای گل مهندسین که شاید مثلا یه مسئله به کارمون در ظاهر نیاد مثل همین تکثیر آرایه . اما در باطن و برای حل مسائل دیگه که مواجه میشین ، روش و الگوریتم یه مسئله خیلی به کار آدم میاد. ینی چیزی که مهمه الگوریتم و روش حل مسئله هست هر چند اون مسئله به درد تون نخوره در ظاهر . پس پیشنهادم اینه که اگه میخاین کد نویسی و حتی برنامه نویسی تون خوب شه ، تا میتونین الگوریتم هایی که هر کی به کار برد رو روش فکر کنین برا یاد گیری . هر چند اگه اون طرف از یه زیان دیگه استفاده میکنه و شما از یه زبان دیگه. تا اینجا را که داستان سرودم برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید بریم سر اسب مطلب برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
بازم لازمه قبل آموزش تکثیر آرایه ، یه چن تا نکات ابتدایی رو که تو فیلم هم گفته شد یاد آوری کنم:
نگا کنین همونطور که تو فیلم هم گفته شد ، طرف راست مساوی میشه مقدار متغییر (هر چند اسم متغییر برده شه) و طرف چپ مساوی میشه خود متغییر که اون مقدار توی همین (طرف چپ) ذخیره میشه. اگه بخام مثال همون فیلمه رو که گفتم بزنم ، طرف راست مساوی کار سیب و پرتغال رو میکنه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید و طرف چپ مساوی همون جعبه ای هست که این سیب و پرتغال رو میریزین توش . پس این سیب یه مقداری هست تو جعبه گزاشتیم . واسه این میگیم متغییر که میتونیم بجای سیب ، توش پرتغالم بزاریم برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید نارنگی هم بزاریم ، تامسون و این جور چیزا که الان کسی طرفش نمیره . این قد گرونن برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ینی توی اون جعبه هر چی که دوس داریم میتونیم بزاریم و چون هر چی که عشق مون کشید رو میتونیم تو اون جعبه بزاریم ، مثلا سیب ، پس محتوای و مقدار داخل جعبه ، دست خودمونه که تغییرش بدیم . واسه همین بهش میگن متغییر . اما تو یه جعبه ، انواع مقدارهای مختلف نمیشه گزاشت ینی نمیشه هم سیب گزاشت تو یه جعبه و هم پرتغال و ... . تو یه جعبه یا سیب باید باشه ، یا پرتغال و یا ... . میدونبار که تا حالا رفتین و دیدین دیگه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
یا مثلا لیوان میشه متغییر ما (سمت چپ مساوی) و چیزی که تو لیوان هست یا حالا آب هه یا شیر هه یا آب نباته برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید (سمت راست مساوی) میشه مقدار و محتوای متغییر ما
بعد هر کی از این به بعد این جعبه هه رو دست شما دید و گفت این چیه ، چی میگین؟ نمیگین جعبه هه که (خوب طرف کور که نیست میدونه این جعبه هه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) منظورش محتوای (یا همون مقدار) این جعبه هه که داخلش چیه؟ که مثلا شما میگین سیب هه ینی محتوای جعبه رو میگین (سمت راست مساوی) که در واقع همون قضیه ی فراخونی میشه
متغییر هم همین طوره. یه مقدار یا محتوا هست (که شیشصد بار گفتم سمت ... برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) و یکی هم جعبه که همون متغییر ماست (سمت ...)
اگه یه متغییر هم فراخونی بشه ینی طرف سمت راست مساوی یه متغییر دیگه اسمش برده بشه یا تو ورودی یه دستور اسمش برده شه ، مثل قضیه ی همون پرسیدن محتوای جعبه هه رو میمونه که محتوا و مقدار متغییر برگردونده میشه
الان مثلا اگه بگیم :
کد:var = 5
الان متغییر ما که اینجا سمت چپ مساویه اسمش var هست و (اسمش هر چی دلمون خاسته) مقدارش میشه سمت راستش ینی 5
این مقدار همون سیب و پرتغال بود که باید یکی توش باشه ینی از یه نوع مقدار باید باشه ینی مقدار ما باید با از نوع عددی باشه یا رشته ای که اینا ها تو فیلم گفته شد و اینجا از نوع عددیه که 5 هه اما اگه هر جا دیدین تو علامت دابل کوتیشن بود " " از نوع رشته ای میشه ینی الان اگه بود :
کد:var = "5"
از نوع رشته ای بود
یه مثال دیگه اینکه الان اگه بگیم :
کد:var = 5 Label.SetText("Label1", var);
تو خط دوم ، میگرده دنبال متغییر var ببینه تعریف شد یا نه اگه تعریف شده باشه ، تو شی لیبل ، مقدار متغییر var رو که 5 بود رو مینویسه. و چون قبل اش و تو خط بالاش ، متغییر var تعریف شد ، پس مقدارش رو مینویسه ینی تو شی لیبل نوشته میشه 5 (این خط دوم ، در واقع قضیه ی همون کسیه که گفت این جعبه هه چیه؟ برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) دستور Lable.SetText که یه چیزی رو تو شی لیبل ذخیره میکنه چ.م ما گفتیم var رو ذخیره کن ، گفتش بهمون که var چیه؟ (منظورش مقدار var بود دیگه) که ما تو خط بالاترش گفتیم var همون 5 هه پس 5 رو نوشت
حالا اگه من بنویسم :
کد:var = 5 unknown = var Label.SetText("Label1",unknown );
چی میشه؟ ینی بلد نیستین؟ برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید هستینا
خوب گفتم سمت راست مساوی ها مقدار متغییره (سیب و .. برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) و سمت چپ مساوی ها هم خود متغییر ان (جعبه) که سمت راست (مقدار و محتوای متغییر که همون سیب بود) تو سمت چپ (که خود متغییر بود ینی همون جعبه) انداخته میشه و ذخیره میشه پس الان تو خط اول مقدار عدد 5 تو متغییر سمت چپ مساوی که اسمش var بود ، ذخیره میشه پس از این به بعد در جاهای دیگه ، در سمت راست مساوی (نه سمت چپ مساوی ها) و یا ورودی دستورها و تابع ها (که تو فیلم گفته شد)، اسم متغییر var برده شه یا به اصلاح همون فراخونی شه، مقدارش بجاش گزاشته میشه یا همون مقدارش برگردونده میشه که در اینجا مقدارش 5 بود
پس تو خط دوم که unknown = var نوشته شد ، چون var تو سمت راست مساوی هست پس نرم افزار میبینه قبلا متغییر var تعریف شد یا نه و اگه تعریف شده باشه ، مقدارشو توی سمت چپ مساوی که unknown بود ذخیره میکنه و اگه تو خط های بالاتر یا رویدادهای دیگه ای که زودتر از این رویداد اجرا بشه ، متغییر var تعریف نشده باشه ، نرم افزار ارور میده و تو اینجا هم چون مقدار متغییر var برابر 5 هه پس 5 داخل متغییر unknown ذخیره میشه . ینی هر جا از این به بعد اسم unknown برده شد ، مقدارش که 5 هه برگردونده میشه
و تو خط سوم هم که متغییر unknown اسم برده شد که چاپ بشه پس ، مقدارش که 5 هه چاپ میشه .
خوب اینو گفتم که دیگه قاتی نکنین چی تو چی ریخته و ذخیره میشه . ینی الان متغییر unknown تو خط دوم تو متغییر var ذخیره نمیشه . چرا شو که توضیح دارم میدم تو کتاب بالا برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید پس تا این لحظه تو دستور بالا ، هر جا گفته شد var ، مقدارش که 5 هه برگردونده میشه و هر جا گفته شد unknown ، مقدارش که var که بازم مقدارش 5 هه برگردونده میشه
اما تو خط زیر قضیه فرق فوکوله برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
کد:var = 5 var = "ahmad" Label.SetText("Label1",var );
تو خط اول بالا ، اول مقدار 5 تو متغییر var ذخیره میشه و بعد تو خط دوم ، مقدار رشته ی ahmad تو متغییر var ذخیره میشه.ینی الان مقدار var کدومه به نظر شما؟ برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
آری درست گفتی (من که صدا تو نشنیدم . حالا بماند برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) آخرین مقدار var که خط دوم بود و مقدارش برابر رشته ی ahmad بود تو var ذخیره میشه . ینی تو خط های زیری هر جا گفته شد var ، آخرین مقدارش که تو خط دوم بود برگردونده میشه که ahmad بود ینی متغییرها قابلیت اور رایت شدن رو دارن. ینی متغییری که همنام قبلی باشه ، مقدار اولیه که تعریف شد براش پاک میشه و از این به بعد دیگه مقدار جدید جایگزینش میشه که تعریف شد
و خط سوم هم که گفت var رو بنویسه که همون آخرین مقدار var که ahmad بود رو مینویسه
یا مثلا اگه بگم :
کد:var = 5 var = var+5 Label.SetText("Label1",var );
تو خط اول که 5 رو تو var میریزه .
تو خط دوم ، طرف راست مساویرو توی طرف چپ مساوی میریزه دیگه . ها؟ خوب طرف راست مساوی چیه؟ var+5 هه دیگه . خوب تو خط های بالا گفتم دیگه میگرده دنبال مقدار var (اونی که طرف راست مساوی هستا) . مقدار var تو خط اول پیدا میکنه که 5 بود بعد +5 میکنه که میشه؟ 10 و این 10 رو تو متغییر سمت چپ مساوی که باز var بود ذخیره میکنه ینی الان تو خط دوم ، مقدار متغییر var میشه 10 (ینی باز هم مثل کد بالا ترش که گفتم ، این متغییر var ، اوررایت شد)
از این به بعد هر جا اسم var برده شه (فراخونی شه) ، که تو خط سوم شد ، آخرین مقدار var رو که 10 بود رو ذخیره میکنه
اینو گفتم تا قشنگ سمت راست و چپ تون رو (نه سمت راست و چپ متغییر( رو تشخیص بدین هر چند تو فیلم هم گفته شد) ، برا اسب قضیه که الگوریتم تکثیرهبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید بزارین من برم ناهار بخورم برگردم ، ادامه شو بنویسم )برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
از این زیر تازه داستان تکثیر آرایه ، شرو میشه (اون بالایی رو گفتم واسه کسایی که قضیه ی متغییرها رو باهاش مشکل دارن و البته ضروریه واسه درک این الگوریتم زیر. هر چند الگوریتم معمولی ایه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) :
اول بگم که این کد ، یه شی لیست بوکس نیاز داره (برا اینکه اعضای آرایه ی جدید (که همون مثل آرایه ی قبلیه رو ببینین و نوشته شه تو لیست بوکس))
دوم اینکه با هر روشی که میدونین ، میشه یه آرایه رو تکثیر کرد اما طبق آموزش دستور next که تو پست قبلی داده شد ، من از این دستور استفاده میکنم (البته نیازهاشو که گفتم چه آموزش هاییه تو همون خط اول این پست) . البته این الگوریتم تو سایت ویکی پدیا بود . من توضیحش میدم فقط
کد:o={10,20,30,40} function clone(o) new_o = {} i,v = next(o,nil) while i do new_o[i] = v i, v = next(o, i) end return new_o end ListBox.DeleteItem("ListBox1", -1); NewArrayCount = Table.Count(clone(o)); for a=1,NewArrayCount do ListBox.AddItem("ListBox1", clone(o)[a], ""); end
تو خط اول ، یه آرایه ای بنام o (او انگلیسی) تعریف شد که 4 تا عضو داره که میبینین. عضو اولش 10 و دومش 20 و سومش 30 و ... هه
خط دوم هم یه تابع هست که پارامتر ورودیش (داخل پرانتزش) ، همین آرایه ی o مون هست که اسم تابع ، clone هه
تو خط سوم ، یه آرایه ی دیگه که اسمش new_o هه تعریف شد (که قراره عضوهای اون آرایه ی o رو تو new_o ریخته شه)
تو خط چهارم که با دستور next آشنایی دارین (پست قبل) ، که
کد:i,v = next(o,nil)
هست ، nil که میشه هیچ و پوچ (شما مثلا nil رو صفر در نظر بگیرین که ینی صفر امین عضو از آرایه) .پس این دستور میشه آرایه ی بعد ضفر امین عضو آرایه ی o (که میشه همون مقدار اولین عضو آرایه ی o که 10 هست) و این مقدار رو تو متغییر سمت راست ویرگول که v هست ، ذخیره میکنه و شماره ی اون آرایه (ینی اولین عضو آرایه ی o (دقت کنین نه اینکه مقدار اولین عضو رو ) بلکه شماره ی اولین عضو رو که میشه همون 1 ) رو داخل متغییر سمت چپ ویرگول که i هست ، ذخیره میکنه که اینا رو قبلا تو پست قبلی گفتم. پس الان مقدار متغییر i میشه 1 و مقدار متغییر v میشه 10
در خط پنجم یه شرط while گزاشته شد و همونطور که تو پستای قبل گفتم ، چون i خالی اومد ، پس ینی هر وقت i مون برابر یه مقداری بود (هر مقدار حالا رشته یا عدد و ...) که در اینجا ، i مون فلا 1 هه پس مقدار داره پس دستور داخل while اجرا میشه
خط ششم که هستش
کد:new_o[i] = v
، 6 طللیارد (درسته؟ برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) بار گفتم که مقدار سمت راست تو متغییر سمت چپ ذخیره میشه پس مقدار v داخل i امین عضو از آرایه ی new_o ذخیره میشه. مقدار v چی بود؟ 10 بود دیگه. ها؟ ینی همون مقدار اولین عضو آرایه ی اولی مون که o بود.
خوب i مون الان چنده؟ 1 بود دیگه آخرین بار؟ ها؟ خوب پس میشه 10 رو تو اولین عضو آرایه ی new_o مون ذخیره میکنه. تا اینجا اگه دقت کرده باشین ، مقدار اولین مقدار آرایه ی قبلی (o) که 10 بود ، فلا همون برابر اولین مقدار آرایه ی جدید (new_o) شد. پس فلا ینی اولین مقدارش کپی شد.
تو خط هفتم که
کد:i, v = next(o, i)
هستش ، میگه چی؟ میگه عضو بعدی i رو تو آرایه ی o رو بریز تو متغییر v و شماره شو بریز تو متغییر i
خوب i مون تا حالا چی بود؟ 1 بود دیگه؟ ها؟ عضو بعدیش عضو 1 چی میشه؟ میشه عضو 2 . خوب مقدار دومین عضو آرایه ی o رو که 20 بود رو میریزه تو v و شماره شو که 2 بود رو میریزه تو i
پس مقدار v میشه 20 و مقدار i میشه 2
حالا چرا عضو بعدی رو گرفت؟ چون هم عضو بعدی آرایه ی قدیمی (o) رو گرفته باشه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید چون میخایم همه ی اعضاشو کپی کنیم دیگه و هم i هم یکی یکی جلو بره تا برسه به تعداد آرایه ی o که 4 تا بودن و بعد از اون ، بی مقدار بشه که شرط حلقه ی while (که مقدار دار برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید بودن متغییر i بود) نقض شه تا از این حلقه خارج شه . ینی در واقع تو اینجا ، i همون شمارنده هست که به اندازه ی تعداد آرایه ی o که 4 تا ان مقدار خواهد داشت ینی 4 بار دارای مقدار میشه و بعد از اون ، بی مقدار میشه
تو خط بعدی میرسه به end شرط while که چون حلقه هه ، شرطش بررسی میشه و اگه شرطش درس بود ، تکرار میشه. شرطش هم که این هست که آیا متغییر i مقدار داره یا نه؟ داره یا نه؟ برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
آره دیگه آخرین بار مقدارش 2 شد دیگه . پس شرط برقراره و حلقه تکرار میشه
پس دوباره میرسیم به خط 6 و دوباره هم مقدار v رو داخل i امین عضو از آرایه ی new_o ذخیره میکنه. آخرین بار v بود 20 و i هم بود 2 پس 20 رو تو دومین عضو از آرایه ی new_o ذخیره میکنه
و این روند ادامه پیدا میکنه و حلقه تکرار میشه تا جایی که i برابر 4 بشه که همون برابر تعداد آرایه ی قدیمی مون که همون آرایه ی o بود ، بشه و در این زمان (ینی زمانی که i مون برابر 4 بشه) وقتی دستور خط هفتم ینی
کد:i, v = next(o, i)
اجرا بشه ، چون مقدار عضو 4 ام آرایه ی o ینی پنجمین عضو آرایه ی o رو میخاد و چون آرایه ی o ، عضو پنجم نداره ، پس مقدارِ بی مقداری برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید تو i ذخیره میشه ینی i دیگه مقدار نداره چون پنجمین عضو o وجود نداره و چون i بی مقدار میشه پس شرط while نقض میشه و دیگه تکرار نمیشه و خط بعدی ینی خط 9 اجرا میشه
پس تا وقتی که شرط while برقرار بود ، وقتی تا آخر (ینی تا زمانی که i مون برابر 4 میشد) جلو برین با همینی که توضیح دادم ، میبینین که اولین عضو آرایه ی o توی اولین عضو آرایه ی new_o ریخته میشه ، دومین عضوش هم تو دومین عضو ، سومین عضوش هم تو سومین عضو و چهارمین عضوش هم تو چهارمین عضو
ینی کلا کپی شد اون آرایه ی قبلی مون که o بود
خط بعدی هم که میشه خط 9 ینی
کد:return new_o
که همونطور که تو پست قبل گفتم ، ینی new_o که آرایه ی کپی شده و جدید مون بود رو تو تابع مون که اسمش
کد:clone(o)
بود ذخیره کن ینی هر جا اسم تابع
کد:clone(o)
برده و فراخونی شد ، ینی مقدارش که همون آرایه ی new_o هستش ، برگردونده میشه
در ادامه ی کدها ، چون برای فراخونی مقدار و عضو متغییر ها باید شماره ی عضواش رو مشخص کنیم ، از حلقه ی for استفاده شد که از 1 تا تعداد تابع clon(o) که همون گفتم آرایه ی new_o ماست پس همون تعداد آرایه ی new_o ما میشه ، که در اینجا تعدادش 4 هست ، تکرار میشه ینی تو اینجا حلقه ی for ما هم 4 بار تکرار میشه تا هر 4 تا عضو آرایه ی new_o رو بگیره و تو لیست بوکس بنویسه پس همه ی عضوهای این متغییر که 10 و 20 و 30 و 40 ان ، تو شی لیست بوکس نوشته میشن (این تیکه رو ینی حلقه ی for رو زیاد توضیح ندادم چون به اندازه ی کافی تو فیلم بحث و تمرین شد)
فقط تو این حلقه درباره ی خط 14 ام که
کد:ListBox.AddItem("ListBox1", clone(o)[a], "");
هست بگم که وقتی گفته شد
کد:clone(o)[a]
رو چاپ کن تو لیست بوکس و بنویس ، خوب a که متغییر ینی در واقع شمارنده ی این حلقه هه و هر بار (تا 4) تغییر میکنه و بازم همونطور که گفتم ، وقتی اسم تابع
کد:clone(o)
برده شد ، ینی همون مقدار return ای که گفتیم ینی همون آرایه ی new_o . مثلا اگه a مون 1 باشه ، ینی اولین عضو از تابع
کد:clone(o)
مون رو بنویس و این تابع هم چون گفتیم که همون آرایه ی new_o رو برگردون ، پس ینی در واقع ، گفتیم اولین عضو از آرایه ی new_o مون رو بنویس که کلا این تیکه گفتن نداشت چون یه لیست تو بالا توضیح داده شد برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
میدونم الان همه تون هجوم میارین تا این آموزشو ببینین ، فقط یکی یکی تو صف ایس کنین که حق همدیگه ضایه نشه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
ان شاء ا... از هر 1000 نفرتون ، احیانا و خدای نکرده و زبونم لال برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید یه نفر به این آموزش علاقه مند بود و خوند و تمرین کرد ، متوجه شده باشه (الان بخونه ، 2000 سال دیگه احتمال داره تموم کنه . برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید )
M3RS4D 50062 (02-04-15), nima_hl (05-08-14)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks