اثر پروانه ای

برنامه نویسی حرفه ای کامپیوتر به زبان سی شارپ - لیست کامل کلمات کلیدی در ʚĭɞ - ßữʈʨɾflỵ ⓔⓕⓕⓔⓒⓣ

اثر پروانه ای

برنامه نویسی حرفه ای کامپیوتر به زبان سی شارپ - لیست کامل کلمات کلیدی در ʚĭɞ - ßữʈʨɾflỵ ⓔⓕⓕⓔⓒⓣ

اثر پروانه ای

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

ایده‌ٔ این‌که پروانه‌ای می‌تواند باعث تغییری آشوبی شود نخستین بار در ۱۹۵۲ در داستان کوتاهی به نام آوای تندر اثر ری بردبری مطرح شد. عبارت «اثر پروانه ای» هم در ۱۹۶۱ در پی مقاله‌ای از ادوارد لورنتس به وجود آمد. وی در صد و سی و نهمین اجلاس ای‌ای‌ای‌اس در سال ۱۹۷۲ مقاله‌ای با این عنوان ارائه داد که «آیا بال‌زدن پروانه‌ای در برزیل می‌تواند باعث ایجاد تندباد در تکزاس شود؟»

آخرین نظرات
  • ۱۳ بهمن ۰۱، ۱۵:۳۱ - حسنا سادات و سما سادات
    عالی

۱۰۷ مطلب با کلمه‌ی کلیدی «programming» ثبت شده است

  • ۱
  • ۰

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

همونطور که احتمالا می دونید، اندروید یک سیستم عامل متن باز بر پایه لینوکس هست. سیستم عامل هم نرم افزاری هست که مابین کاربر و سخت افزار کامپیوتر (یا هر وسیله کامپیوتری دیگه ای) قرار می‌گیره و باعث میشه تا برنامه نویس ها با سختی های برنامه نویسی برای سخت افزارها مختلف مواجهه کمتری داشته باشند و کاربران عادی از وسیله کامپیوتری خودشون لذت فوق العاده بیشتری ببرند. در کامپیوترهای PC مهمترین سیستم عامل ها، ویندوز و لینوکس هست. اما در میان تلفن های همراه می توان به سیستم عامل های اپل iOS برای گوشی ها اپل (این شرکت همیشه دوست داشته سخت افزار و نرم افزارش متعلق به خودش باشه!!) ، سیمبین که معمولا روی گوشی های نوکیا دیده می شد. (سیستم عامل های دیگه ای هم هست که بیخیال)

اما بحث ما بر روی سیستم عامل اندروید (Android) هست. این سیستم عامل از اول مال شرکت گوگل نبوده، گوگل اونو خریده! امروزه اکثر دستگاه های الکترونیکی درحال مجهز شدن به این سیستم عامل قدرتمند هستند. پس این سیستم عامل نه تنها روی تلفن های هوشمند که حتی بر روی تبلت و تلویزیون های هوشمند و حتی بنا به نقل هایی روی برخی لباسشویی‌ها هم نصب میشه.

ما در این سلسله تاپیک ها بر روی برنامه نویسی این سیستم عامل با استفاده از زبان برنامه نویسی جاوا تمرکز می کنیم. هرچند می توان با زبان های دیگری از جمله خانواده C هم برای این سیستم عامل برنامه نویسی کرد.

برای دانلود ابزار مورد نیاز برای برنامه نویسی اندروید به ادامه مطلب بروید...

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

سلام خدمت همه دوستان و همراهان عزیز باترفلای...

مدتی هست که برنامه نویسی اندروید رو شروع کرده بودم، ولی متأسفانه با درگیری‌هایی که بر سر پروژه پایانی پیدا کردم، مجال ادامه ی این کار به من نداد. البته اول قصد داشتم موضوع پروژه ام رو در همین مسیر (اندروید) انتخاب کنم که به علت یکسری بی برنامگی ها، نتونستم این کارو انجام بدم. بگذریم...

از اول که این بلاگ تأسیس شد، تصمیم بر این بود که برنامه نویسی #C رو آموزش بدم. بحمدالله برنامه نویسی #C تا جاهای بسیار خوبی پیش رفت. هرچند نمی تونم بگم که بصورت کامل به برنامه نویسی سی‌شارپ پرداخته شده، اما در بخش کلمات کلیدی سی‌شارپ به نظر میرسه کامل ترین مرجع فارسی باشیم (اگه اینطور نیست لطفا با ذکر اون منبع آنلاین به من هم بگید) که این رو سراسر لطف خدا میدونم. برنامه نویسی #C متوقف نشده و ان شاء الله باز هم شاهد مقاله های آموزشی در زمینه #C در باترفلای خواهید بود.

اما همونطوری که گفتم تازگی ها دوباره سراغ اندروید اومدم و در کمال ناباوری مشاهده کردم که همه اون چیزایی که یاد گرفته بودم به باد رفته و تقریبا در حد صفر هستم. این شد که تصمیم گرفتم دوباره مروری بر این مبحث جذاب برنامه نویسی داشه باشم و چیزهایی رو که دوره می کنم رو برای شما دوستان هم منتشر کنم. تا به این روش به قول امام معصوم (علیه‌السلام) علم رو به بند بکشم و هم اینکه بحول و قوه الهی در بخش اندروید هم به یکی از مراجع خوب برنامه نویسی تبدیل شویم.

تمام سعی من در این بلاگ ساده گویی مطالب هست. و اینکه تا جایی که ممکنه به تمامی سوالات شما دوستان در زمینه برنامه نویسی پاسخ دهم.

از این پس شما می توانید تمام مباحث مربوط به اندروید رو در موضوع اندروید مطالعه بفرمایید.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

عبارت های لامبدا (Lambda Expressions)

سی شارپ 2.0 متدهای بی‌نام را معرفی کرد، که تا اینجا این گونه از متدها را بررسی کردیم. هرچند املاء متدهای بی‌نام تا حدودی طولانی بوده و نیاز به اطلاعاتی دارد که خود کامپایلر از آنها مطلع است. بجای اینکه مجبور باشید این اطلاعات تکراری را الحاق کنید، سی شارپ 3.0 عبارت های لامبدا را معرفی کرده که املاء و نگارش متدهای بی‌نام را کاهش داده است. شاید بخواهید بجای استفاده از متدهای بی‌نام از عبارت های لامبدا استفاده کنید. در حقیقت، اگر عبارت های لامبدا زودتر معرفی شده بودند، دیگر هرگز متدهای بی‌نام وجود نداشتند.

در نگارش متدهای بی‌نام، کلمه کلیدی delegate مازاد بر احتیاج است؛ به این علت که خود کامپایلر می بیند که شما درحال انتساب متد به delegate هستید. شما می توانید با انجام کارهای زیر، بسادگی، یک متد بی‌نام را به یک عبارت لامبدا تبدیل کنید:

  • کلیدواژه delegate را حذف کنید.
  • عملگر لامبدا ( <= ) را مابین لیست پارامترها و بدنه متد بی نام قرار دهید. عملگر لامبدا بصورت "می رود به" (goes to) خوانده می‌شود.

تکه کد زیر این تبدیل را نشان می دهد. خط اول یک متد بی نام را که به متغیر del انتساب داده شده را نشان می دهد. خط دوم همان متد بی نام را بعد از آنکه به عبارت لامبدا تبدیل شده را نشان می دهد که به متغیر le1 منتسب شده است.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

متدهای بی‌نام

تا اینجا، شما دیده اید که می‌توانید از متدهای نمونه یا متدهای استاتیک برای نمونه سازی delegate استفاده کنید. در هرصورت، متد بخودی خود می‌تواند از قسمت های دیگر کد بصورت صریح فراخوانی شود و البته باید عضوی از یک کلاس یا ساختار باشد.

اگر متد تنها برای نمونه سازی delegate استفاده شده باشد چطور؟ در چنین شرایطی، بجز اینکه به نیازمندی های نحوی و املائی برای ساختن delegate احتیاج داریم، در واقع نیازی به ساختن یک متد با نام جداگانه وجود ندارد. متدهای بی نام به شما اجازه می‌دهند که از ساختن متدهای نامدار بیهوده جلوگیری کنید.

  • یک متد بی نام، متدی است که در محل نمونه سازی delegate ، اعلان می‌شود.

برای نمونه، شکل زیر دو نسخه از یک کلاس یکسان را نشان می‌دهد. نسخه سمت چپ یک متد به نام Add20 را اعلان و استفاده می‌کند. نسخه سمت راست بجای آن از متد بی نام استفاده می‌کند. قسمت هایی از کد که سایه گذاری نشده، کاملا برابر هستند.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

احضار delegate هایی که دارای مقدار برگشتی هستند

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

  • مقداری که از آخرین متد موجود در لیست احضار برگشت داده می‌شود همان مقدار برگشتی وکیل است.
  • مقدار برگشتی همه متدهای دیگر نادیده گرفته می‌شود.

برای مثال کد زیر یک delegate اعلان می‌کند که دارای مقدار برگشتی از نوع int است. تابع Main یک شیئ از آن delegate ساخته، سپس 2 متد به آن اضافه می‌کند، بعد از آن delegate را در بیان WriteLine فراخوانی کرده و مقدار برگشتی آن را چاپ می‌کند. شکل زیر یک ارائه گرافیکی از کد را نشان می‌دهد.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

حذف متدها از delegate

شما همچنین می توانید یک متد را با استفاده از عملگر =- از delegate حذف کنید. تکه کد زیر طرز استفاده از این عملگر را نشان می دهد. شکل زیر نتیجه اجرای کد را نشان می دهد.

delVar -= SCl.m3; // Remove the method from the delegate.

پس از حذف متد از delegate شکل بصورت زیر در می آید.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

انتساب delegate ها

به این دلیل که delegate ها نوع های مرجع هستند، شما می توانید ارجاع گنجانده شده در یک  متغیر وکالتی را با انتساب یک ارجاع به آن متغیر وکالتی تغییر دهید. شیئ وکالتی قدیمی توسط زباله روب (Garbage Collector) عزل خواهد شد.

برای مثال، کد زیر مقدار delVar را تنظیم کرده سپس آنرا تغییر می دهد. شکل زیر این موضوع را نشان می دهد.

MyDel delVar;
delVar = myInstObj.MyM1; // Create and assign the delegate object.
...
delVar = SClass.OtherM2; // Create and assign the new delegate object.


  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

اعلان نوع وکالتی (delegate)

همونطوری که در ابتدای بخش قبل گفتم، delegate ها "نوع" هستند، درست مثل کلاس ها که نوع هستند. و مشابه کلاس ها باید قبل از اینکه بتوانید از delegate ها استفاده کنید متغیرها و اشیاء از همان نوع را بسازید. مثال زیر طرز اعلان نوع وکالتی را نشان می دهد:

delegate void MyDel(int x);

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

در مثال قبل مشخص شده که شیئ وکالتی از نوع MyDel فقط متدهایی که دارای تنها یک پارامتر از نوع int بوده و نوع برگشتی ندارند را قبول می کند. شکل زیر در سمت چپ نوع وکالتی، و در سمت راست شیئ وکالتی را نشان می دهد.

نوع وکالتی

اعلان نوع وکالتی با اعلان متد، از دو جهت تفاوت دارد. اعلان نوع وکالتی

  • با کلمه کلیدی delegate شروع می شود
  • دارای بدنه متد نمی باشد

نکته

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

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

delegate (وکیل) چیست؟
شما می توانید فکر کنید یک delegate یک شیئ است که یک یا چند متد را در خود نگهداری می کند. البته درحالت نرمال، اشیائ خاصیت اجرایی ندارند، اما یک delegate با اشیاء معمولی تفاوت دارد. شما می توانید یک delegate را اجرا کنید و هنگامی که شما چنین کاری انجام دهید، آن delegate تمام متد یا متدهایی را که در خود نگهداری می کند را اجرا خواهد کرد.
دراین فصل املاء (syntax) و معناشناسی ساخت و استفاده از delegate را توضیح خواهیم داد. در فصول آینده خواهیم دید که چگونه می توانیم با استفاده از delegate ها کدهای اجرایی را از یک متد به متد دیگر پاس دهیم و اینکه چرا اینکار سودمند است.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

PC/UVa IDs: 110101/100

Popularity: A

Success rate: low

Level: 1

الگوریتم زیر را برای تولید دنباله ای از اعداد در نظر بگیرید. از یک عدد صحیح n شروع کنید. اگر n زوج است آنرا بر 2 تقسیم کنید. اگر n فرد است آنرا در 3 ضرب کرده سپس یکی به آن اضافه کنید. این عمل را بر روی مقادیر جدید n تکرار کنید و درصورتی که n برابر با یک شد، این عمل را متوقف کنید. برای مثال دنباله ی زیر برای n=22 تولید شده است.

22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

خوب من برنامه مربوط به این چالش برنامه نویسی رو با استفاده از زبان قدرتمند #C نوشته ام و شما می تونید اونو از لینک زیر دانلود کنید. (دانلود در ادامه مطلب)

  • غلامعلی حسینی بهجانی