اثر پروانه ای

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

مشخصات بلاگ
اثر پروانه ای

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

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

آخرین نظرات
  • ۱۱ بهمن ۹۵، ۱۷:۱۸ - فاروق کریمی زاده
    خوب بود.
اثر پروانه ای

برنامه نویسی نیمه حرفه ای سی شارپ / درس سیزدهم

يكشنبه, ۲۰ بهمن ۱۳۹۲، ۰۷:۵۷ ب.ظ

بسم الله الرحمن الرحیم

سلام...

در این درس می خواهیم بصورت عملی یک "کلاس" در سی شارپ بسازیم و از آن در بر نامه خود استفاده کنیم. اما قبل از آن اجازه دهید تا کمی بیشتر با کلاس آشنایی پیدا کنیم. قصد ندارم در این مورد زیاد بحث کنم. اما هرگونه سوالی دارید رو مطرح بفرمایید. الساعه پاسخگو خواهم بود. ان شاءالله...

قبلا تا حدودی با "کلاس" و "شئ" آشنایی پیدا کردید. اما لازم هست که چند نکته رو در این مورد گوشزد کنم.

یکی از نکات مهمی که باید همیشه مد نظر داشته باشید این است که "کلاس" به تنهایی کاری برای ما انجام نمی دهد. همانطور که قبلا هم گفته بودم، کلاس مانند یک قالب و طرح کلی (به اصطلاح blueprint) است. همانطور که قالب یک آچار نمی تواند یک پیچ و مهره را باز کند، از کلاس هم کاری ساخته نیست. ما باید با استفاده از کلاس، یک شئ بسازیم، سپس آن شئ برایمان کارها را انجام خواهد داد.

باید توجه داشته باشید که کارهای مربوط به هم را با استفاده از کلاس ها دسته بندی کنید و به کلاس مربوطه، نام مناسبی اختصاص دهید.

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

  1. ویژوال استودیو را باز کرده و یک پروژه جدید بسازید.
  2. در بخش Solution Explorer روی نام پروژه راست کلیک کرده و از لیست Add ، گزینه Class را برگزینید.
  3. در پنجره باز شده، نامی مناسب برای Class انتخاب کرده و روی دکمه Add کلیک کنید.

تا اینجا یک کلاس جدید ساختیم. من اسم کلاس را Math گذاشتم. این کلاس جدید در بخش Solution Explorer قابل مشاهده هست. در ضمن بلافاصله بعد از کلیک کردن روی دکمه Add با کدی شبیه شکل زیر مواجه خواهید شد.

یک کلاس جدید

حالا که با موفقیت Class مورد نظرتون رو ساختید، وقتشه که ازش استفاده کنیم. اما این کلاس فعلا یک کلاس خالی و بی محتوا هست و طبیعتا هیچ کاری ازش ساخته نیست. بنابراین من یک تابع جدید داخل این کلاس می سازم تا هم مختصری در مورد نحوه ساختن توابع (متدها) آشنایی پیدا کنید و هم اینکه کلاس نوساخته ما از بی محتوایی در بیاد.
قصد دارم تابعی به این کلاس اضافه کنم که فاکتوریل یک عدد را محاسبه کرده و به خروجی ارسال نماید. پس کد زیر را در داخل اسکوپ class Math وارد می کنم. شما هم همین کار را انجام دهید.

public int factorial(int n)
{
    int f = 1;
    for (int i = 2; i <= n; i++)
    {
        f = f * i;
    }
    return f;
}

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

  1. از قسمت Solution Explorer روی Form1.cs دابل کلیک کنید تا باز شود.
  2. کنترل های زیر را روی فرم قرار دهید:
    1. دو عدد TextBox به نام های txtInput و txtOutput .
    2. دو عدد Label برای مشخص کردن کار کنترل های TextBox .
    3. یک Button
  3. روی دکمه دابل کلیک کرده و کد زیر را برای دکمه بنویسید:
int input = Convert.ToInt32(txtInput.Text);
Math myMathClass=new Math();
txtOutput.Text = myMathClass.factorial(input).ToString();

حالا برنامه را اجرا کنید.

درس 13 کار با کلاسها

باید اندکی در مورد نحوه تعریف متدها (از جمله همین متد factorial) توضیح بدهم. توابع یا متدها مانند یک کارخانه عمل می‌نمایند. یعنی با دریافت ورودی ها و انجام عملیاتی خاص روی آنها، خروجی خاصی را تولید می نمایند. در علم ریاضی با توابعی مثل sin ، cosine و... مواجه هستیم. این توابع زاوبه ای را به عنوان ورودی خود دریافت کرده، سپس با عبور این ورودی ها از فرمول های محاسباتی خاص، خروجی مورد نظر را تولید می کنند.

باید توجه داشته باشید که مجموعه نام و پارامترهای (در واقع آرگومان های) ورودی یک تابع در یک عبارت، با مقدار خروجی آن تابع جایگزین خواهد شد. برای مثال هر دو عبارت زیر با یکدیگر معادل هستند.

x= 2 + factorial(5);
x= 2 + 120;

متدها در زبان سی شارپ چهار بخش مهم می باشند:

  • نام متد که در این مثال factorial می باشد.
  • نوع خروجی متد؛ که قبل از نام متد نوشته می شود. در اینجا int هست.
  • لیست پارامترهای ورودی متد؛ که بعد از نام متد در داخل پرانتز قرار گرفته (اند). نوع و نام هر پارامتر ورودی را در اینجا می نویسیم. اگر چند پارامتر داشته باشیم، با علامت کاما (,) از یکدیگر جدا می کنیم.
  • بدنه متد؛ که با یک علامت آکولاد باز، شروع شده و با علامت آکولاد بسته، به پایان می رسد.
  • البته قبل از قسمت نوع خروجی، بخش اصلاحگرها وجود دارد که قلمرو تابع را مشخص می‌کند و فعلا باهاش کاری نداریم. در اینجا public . 
فعلا تنها نکته ناگفته (البته در حد توضیح خلاصه) در مورد متدها (توابع)، کلمه کلیدی return می‌باشد. این کلمه کلیدی علاوه بر کاربردهای دیگری که دارد (برای اطلاعات بیشتر به لیست کلمات کلیدی سی شارپ مراجعه فرمایید)، در اینجا متغیر f را به خروجی متد ارسال می کند.
از این پس هرگاه در هرجای برنامه، عبارت factorial استفاده شود، عدد موجود در پرانتز جلوی آنه به متد ارسال می شود (در واقع آن عدد جایگزین n می گردد - دقت کنید که در هنگام تعریف متد، n به عنوان پارامتر ورودی تعریف شد) و متد ما با همین آرگومان اجرا خواهد شد. بعد از اینکه تابع کار خود را به انجام رساند، با استفاده از کلمه کلیدی return ، خروجی خود را به همان مکانی که در ابتدا فراخوانی شده بود، ارسال می کند.
خوب حالا که این نکات رو فرا گرفتید، باید بریم به همونجایی که متد ما فراخوانی می شود؛ یعنی در رویداد کلیکِ دکمه ای که سابقا روی فرم قرار دادیم.
این همون کد دکمه هست که برای سهولت کار شما، دوباره در اینجا تکرار می کنیم:

int input = Convert.ToInt32(txtInput.Text);
Math myMathClass=new Math();
txtOutput.Text = myMathClass.factorial(input).ToString();

اما توضیح این تکه کد اینکه:

در خط اول، یک متغیر نوع صحیح به نام input تعریف کردیم و آن را با مقدار عددی جعبه متن ورودی (txtInput) ، مقداردهی اولیه کرده ایم. توجه دارید که خصوصیت Text مربوط به هر TextBox بصورت رشته ای هست و باید به یک عدد واقعی تبدیل شود، تا بتوان آن را در داخل متغیر input ذخیره کرد. در ضمن نمی توانیم بر روی رشته ها، عملیات ریاضی انجام دهیم. پس باید به عدد تبدیل شوند.

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

در خط سوم، از متدی که پیش از این در کلاس Math ساخته بودیم استفاده کرده ایم. طبیعتا این متد در داخل شیئ myMathClass وجود دارد؛ چون این شئ بر اساس کلاس Math ساخته شده است. دقت کنید که برای دسترسی به متد factorial ، بعد از myMathClass یک نقطه قرار داده ایم. متغیر input را به عنوان ورودی به متد factorial داده ایم.

همینکه نام متد را بنویسیم، به معنای فراخوانی متد است، پس متد اجرا شده، و در آخر خروجی متد، با نام و پارامتر ورودی آن، جایگزین می شود. در ضمن چون خروجی این متد از نوع عددی می باشد، برای اینکه بتوانیم آن را در جعبه متن خروجی (txtOutput) به نمایش در آوریم، باید آن را (خروجی را) به رشته تبدیل کنیم، پس از ToString استفاده کردیم.


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

در پناه خدا باشید...

نظرات  (۲)

سلام استاد خدا قوت ببخشید یه سوال دارم وقتی اسم شیء رو نوشتیم بعد نقطه گذاشتیم به جز factorial چیزهای دیگه ای هم مثلاEquals میاند اونا برا چیند؟
پاسخ:
سلام...
همه اشیاء در زبان برنامه نویسی #C ، بصورت ضمنی و غیر مستقیم، از شیئ Object ارث بری می کنند. این متدها از همون شئ به ارث رسیده. البته با یکسری روش ها (Override) می توان کار این متدها رو (فقط در کلاسی که خودمون ساخته ایم) تغییر داد.
برای مثال همین متد Equals کارش اینه که کلاس ما رو با یک کلاس دیگه مقایسه می کنه و نتیجه رو گزارش میده. من تا حالا پیش نیومده که ازش استفاده کنم. اما توی کاربردهایی مثل برنامه های شبکه ای مفید هست.
سلام..برنامه رو نوشتیم و اجرا شد..
این مقدمات نوشتن کد رو همینطوری باید یاد بگیریم؟
ینی من کدامو دارم از رو دست شما کپی میکنم..خودم نمیتونم یه کد ساده بنویسم..ایا خودم باید کاری بکنم یا چی؟
یه سوال دیگه..
این کد ینی چی؟؟
Convert.ToInt32
پاسخ:
سلام.
شما درست می فرمایید. این ایراد کاملا به من وارده و جای هیچگونه بحثی نیست. برنامه نویسی با کپی کردن کد، بدست نمیاد. باید سعی کنید مهارت های برنامه نویسی خودتون رو با حل مسایل مختلف به چالش بکشید. من سعی می کنم از حالا در آخر هر درس، یکی دوتا سوال هم برای تمرین مطرح کنم و جوابش رو هم در درس بعد قرار بدم.
همونطور که توی درس های اول هم گفتم، باید سعی کنید برنامه ای که من توی وبلاگ قرار داده‌ام رو دستکاری کنید. با این دستکاری هایی که انجام می دهید، دو حالت اتفاق می افته که هر دوحالت برای هنرآموزان و حتی حرفه ای ها مفید هست.
اول اینکه دستکاری شما باعث میشه که برنامه با خطا مواجه بشه. خوبی این نوع دستکاری، آشنایی با انواع خطاهاست و اینکه در مراحل بعد، به دلیل آشنایی با این خطاها و علت بروز آنها، راحت تر آنها را رفع خواهد کرد. اما دقت کنید که بی هدف، اقدام به دستکاری برنامه نکنید؛ منظورم اینه که اگر یک جایی از برنامه را تغییر دادید، دقیقا بدانید که چه چیزی را تغییر داده اید و با این تغییر چه اتفاقی رخ داده...
دوم اینکه دستکاری شما باعث تغییر در نتیجه برنامه خواهد شد و از این طریق بصورت ملموس‌تری متوجه طرز کار برنامه خواهید شد.

این قسمت از کد، یک رشته را به عنوان ورودی، دریافت کرده و به عدد معادل آن تبدیل می‌کند. برای مثال، در هر دو خط زیر، عدد 24 در متغیر x ذخیره خواهد شد. (با این فرض که کاربر، داخل txtInput ، عدد 24 را وارد کرده باشد)
x= 24;
x= Convert.ToInt32(txtInput.Text);
متد ToInt32 که در کلاس Convert قرار دارد، یک رشته را به عنوان ورودی، دریافت کرده، سپس به معادل عددی آن، تبدیل می کند و به خروجی می فرستد.
همانطور که گفتم، یک متد بعد از فراخوانی، معادل خروجی خود خواهد بود. یعنی هر دو مورد زیر با هم برابر هستند. چون خروجی (Math.factorial(5 عدد صحیح 120 است.
x= 2 + 120;
x= 2 + Math.factorial(5);
دقیقا مثل ساده کردن معادلات مثلثاتی که همیشه (Sin(90 را با عدد 1 جایگزین می کردیم.

ارسال نظر

لطفا اگر می خواهید در بخش نظرات، کد برنامه مورد نظر خود را بنویسید، قسمت زیر (Program Code) را کپی کرده، و در کادر "پیام" ، paste کنید. سپس برنامه مورد نظر خود را در کادری که ایجاد می شود، وارد کنید.

  • کلید میانبر برای Copy کردن: Ctrl+C

  • کلید میانبر برای paste کردن: Ctrl+V

//Program Code

از همکاری شما کمال تشکر را دارم.

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی