اثر پروانه ای

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

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

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

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

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

سلام.

امروز هم می خوام به یک سوال برنامه نویسی که توسط یکی از بازدیدکنندگان محترم سایت اثرپروانه‌ای مطرح شده، جواب بدم. این سوال هم بصورت خصوصی مطرح شده بود.

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


کیمیا (سوگل) :

سلام...

چطور میتونم تو محیط console برنامه ای بنویسم که عددی را دریافت کرده و زوج بودن آن را تشخیص دهد. برای بخش پذیری عدد ورودی بر 2 از روش بررسی رقم یکان شامل 0 و 2 و 4 و 6 و 8 استفاده کنید من خودم این رو نوشتم ولی وقتی اجرا میزنم چیزی نمیاره؟؟؟؟


و یه سوال دیگه میزان مصرف برق را در یک ماه بر حسب کیلو وات سوال کند سپس بهای برق مصرفی یک ماه را بر اساس جدول محسبه نماید و مبلغ را بر حسب ریال نمایش دهد..

جدول:

پله های مصرف سی روزه             نرخ ریال

مصرف 0 تا 100                            1364

مازاد بر 100 تا 200                       1426

مازاد بر 200 تا 300                       1488

ممنون میشم کمکم کنید...


پاسخ باترفلای:

برای اینکه بتوانیم تشخیص دهیم که آیا یک عدد بر 2 بخش پذیر هست یا نه، باید از یک شرط بصورت زیر استفاده کنید:

if(n%2==0){
   Console.WriteLine("It's Divisable by 2");
}
اما شاید منظور شما از این سوال اینه که از عملگر "باقیمانده‌تقسیم" یا % استفاده نکنیم. در اینصورت ممکن است راه‌حل های زیادی وجود داشته باشد. راه‌حل من برای حل این مسأله اینه که عدد رو بصورت رشته ای در آوریم، سپس در صورتی که آخرین کاراکتر این رشته، یکی از کاراکترهای '0' یا '2' یا '4' یا '6' یا '8' بود، نتیجه میگیریم که عدد، زوج بوده است. به تکه‌کد زیر دقت کنید:
string s=Convert.ToString(n);
switch(s[s.Length-1]){
 case '0':
 case '2':
 case '4':
 case '6':
 case '8':
   Console.WriteLine("It's Divisable by 2");
   break;
 default:
   break;
}
در مورد سوال دوم، مشخص نفرموده اید که عددهای مربوط به پله ها طبق چه واحدی هستند(وات یا کیلووات یا...). به فرض اینکه این اعدد بر اساس کیلووات هستند، داریم:
float kw = Convert.ToSingle(Console.ReadLine());

float exp = 0.0f; 
if (kw<=100 && kw>=0)
{
    exp = kw * 1364;
}
else if (kw > 100 && kw <= 200)
{
    exp = kw * 1426;
}
else if (kw > 200 && kw <= 300) //else if(kw>200)
{
    //در این حالت مصرف بالاتر از 300
    //بصورت مجانی یا صفر محاسبه خواهد شد!!!

    exp = kw * 1488;
}

Console.WriteLine("The cost of your electricity is:{0}", exp);
همانطور که در کامنت شرط مربوط به 200 الی 300 ذکر کرده‌ام، مصرف بالاتر از 300، بصورت صفر محاسبه خواهد شد، چون در این برنامه برای چنین حالتی هیچ پیش‌بینی خاصی را انجام نداده است. برای اینکه برنامه بصورت منطقی‌تری محاسبات را انجام دهد، بهتر است که بجای شرط سوم، بنویسیم:
else if(kw>200){
    exp = kw * 1488;
}

نظرات  (۲)

سلام، کدی که برای محاسبه هزینه برق نوشتید اینطور عمل میکنه که اگر میزان مصرف برق در محدوده مشخص باشه کل مصرف رو با اون مقدار بدست میاره.
حالا اگربخوایم 100 کیلووات اول رو با هزینه 1364 و 200 کیلووات بعدی رو با هزینه 1426 و همینطور 300 کیلووات بعدی رو با هزینه 1488 محاسبه کنیم باید از چه کدی استفاده کنیم؟ برای مثال 600 کیلووات رو تقسیم به قسمت های 100،200،300 بکنیم و هر قسمت رو در هزینه خودش ضرب کنیم.
پاسخ:
سلام
نمی دونم
سلام
در برنامه ی تشخیص زوج بودن اعداد (اولین برنامه ای که توضیح دادید)اولین خط نباید به صورت 
convert.tostring
باشه؟چون ما یه عدد رو میخوایم به رشته تبدیل کنیم.
...............................................................
اگه میشه خط دومش رو هم یه توضیحی بدید...
ممنون

پاسخ:
با سلام و تشکر از شما
بله همینطوره. اشتباه از من بوده. تصحیح شد.
البته در برنامه نویسی Console ، از آنجایی که ورودی هر برنامه با استفاده از دستور Console.ReadLine انجام می‌گیره، نیازی به تبدیل ورودی به رشته هم نیست. بنابراین خط اول برنامه بکلی نیاز نیست. مگر اینکه n از نوعی غیر از عددی بوده باشد.

اما خط دوم این برنامه:
در واقع داریم آخرین کاراکتر رشته s را بدست می‌آوریم. s.Length طول رشته را به ما می‌دهد. مثلا اگر رشته بصورت "123987" بوده باشد، قسمت s.Length معادل 6 خواهد بود. واضح است که برای بدست آوردن آخرین کاراکتر هر رشته‌ای، باید طول آن رشته را داشته باشیم و آنرا منهای 1 کنیم.
نکته ای که لازمه بدونیم اینه که ما می‌توانیم به سادگی هرکدام از کاراکترهای رشته را بدست بیاوریم؛ کافیه که شماره (اندیس) اون کاراکتر رو بدونیم. در نتیجه:
s[s.Length-1]
به معنی آخرین کاراکتر رشته s است.

موفق باشید
یاعلی

ارسال نظر

لطفا اگر می خواهید در بخش نظرات، کد برنامه مورد نظر خود را بنویسید، قسمت زیر (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="">
تجدید کد امنیتی