اثر پروانه ای

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

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

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

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

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

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

سلام دوستان عزیز...

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

قبل از هرچیز اجازه دهید تا در مورد عملگر ، عملوند و عبارت صحبت کنیم. در برنامه نویسی، برخی از جملات هستند که نمی توانیم به آنها بگوییم "دستور" اما برای ما عمل خاصی رو انجام می دهند. خود این جملات از بخش هایی تشکیل شده اند که توضیح میدم. به این جملات ، "عبارت" یا Expression می گوییم.

عبارت ها از دو بخش عملوند و عملگر تشکیل شده اند. به شکل زیر دقت کنید:

برنامه نویسی مقدماتی سی شارپ

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

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

عملوند ها می توانند عدد، متغیر و یا از توابع ریاضی و غیر ریاضی باشند.

نکته مهمی که باید توجه داشته باشید اینه که عبارت ها را می توان ساده کرد. بطوری که در نهایت به یک عدد یا رشته و یا... می رسیم. برای مثال در عبارت بالا اگر فرض کنیم که مقدار متغیر a برابر با 5 باشد، این عبارت با عدد ( 6- ) مساوی است. خوب بگذریم :)

در برنامه نویسی سی شارپ عملگر های مختلفی وجود دارد که در زیر مهمترین آنها را مشاهده می‌کنید:

عملگرهای ریاضی یا محاسباتی : 

  • عملگر جمع ( + )
  • تفریق ( - )
  • تقسیم ( / )
  • باقیمانده تقسیم ( % )
  • ضرب ( * )
عملگرهای رابطه ای:
  • عملگر کوچکتر ( > )
  • بزرگتر ( < )
  • کوچکتر مساوی ( => )
  • بزرگتر مساوی ( =< )
  • تساوی ( == )
  • نامساوی یا مخالف ( =! )
عملگرهای شرطی
  • و ( && )  
  • یا ( || )
  • نقیض ( ! )
عملگر انتساب ( = )
البته عملگرهای دیگری هم هستند. خیلی هم زیاد هستند. اما فعلا بکار ما نمیان. عملگرهای ریاضی رو که الحمدلله باهاشون آشنایی کامل دارید. فقط از بین عملگرهای ریاضی، عملگر باقیمانده تقسیم شاید براتون تازگی داشته باشه! اونم چیز خاصی نیست. چندتا مثال میزنم:
  • 25%5 برابر با 0 است. یعنی باقیمانده تقسیم 25 بر 5 مساوی با 0 است. البته تقسیم صحیح، نه اعشاری!
  • 10%3 برابر با 1 است.
  • 17%5 برابر با 2 است.
عبارت هایی که با عملگرهای رابطه یا عملگر های شرطی (یا ترکیب هر دو) ساخته می شوند، در آخر بصورت درست (true) یا غلط (false) ارزیابی می شوند. (ارزیابی می شوند یعنی بعد از ساده شدن ، عبارت به true یا false تبدیل می شود) به مثال های زیر دقت کنید:
  • 23.5 < 12 برابر با false است. (غلط)
  • 20 == (2*10) برابر با true است. (درست)
  • ((13 * 2) > 7) && (12 =< 4) برابر با false است.

عه! نگفتم && ، || و ! چی هستن و چطور کار می کنن! خوب اشکال نداره حالا میگم:
  • && به این صورت کار می کنه که اگر دوطرفش true باشه، نتیجه عبارتش true خواهد شد و در غیر اینصورت نتیجه عبارت false میشه. مثلا اگر به عبارت بالا دقت کنید نتیجه (13 * 2 ) > 7 برابر true هست، اما 12 =< 4 برابر false هست. بنابر این کل عبارت برابر false خواهد بود.
  • || هم به این شکل کار می کنه که اگر هر دو طرفش false باشه، نتیجه عبارتش بصورت false ارزیابی میشه و در غیر اینصورت نتیجه عبارت false هست.
  • عملگر نقیض ( ! ) ، نتیجه عبارت جلوی خودش را برعکس می کند. مثلا نتیجه عبارت (4>1)! برابر با false است.
اما آخرین و تقریبا مهمترین عملگری که در این جلسه به توضیحش می پردازیم، عملگر انتساب هست. این عملگر یه تفاوت های ریز و ظریفی با عملگر "مساوی" در ریاضی داره. اما این تفاوت های ظریف رو خیلی سخته که توضیح بدی. اما خوبیش اینه که خودتون به مرور زمان متوجه تفاوت هاشون خواهید شد.
عملگر انتساب ( = ) کارش اینه که نتیجه ارزیابی عبارت سمت راست خودش رو در متغیر سمت چپ خودش ذخیره می کنه! البته فکر کنم در جلسه قبل تا حدودی با این عملگر آشنایی پیدا کردید. به مثال های زیر توجه کنید:
b = "Salam " + "Donya!" ;

در متغیر b رشته !Salam Donya ذخیره خواهد شد.

m = (2 * 3) + 1 ;

در متغیر m عدد 7 ذخیره خواهد شد.

k = ((2 + 1) == (9 / 3))

در متغیر k چیزی که ذخیره خواهد شد، true است.


هوففففف... واقعا خداقوت. من که خسته شدم، شما رو نمیدونم.

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

یکی از ساختارهای برنامه نویسی خیلی مهم برای این منظور ساختار شرطی است. بصورت زیر:

if ( Conditional_Expression ){
    Commands set
}

در ساختار شرطی بالا شما بجای Conditional_Expression یک عبارتی که نتیجه آن true یا false است قرار می دهید. این ساختار درصورتی که نتیجه عبارت مربوطه true باشد، مجموعه دستورات داخل بلوک خود را اجرا می کند. دقت کنید، فقط در صورت true بودن عبارت! بجای Commands set می توانید هر تعداد دستور که خواستید بنویسید. حتی می توانید در این قسمت دوباره ساختار شرطی قرار دهید که در آن صورت یک ساختار شرطی تو در تو (nested) خواهیم داشت.

این ساختار مهم شرطی رو می تونیم پیشرفته تر هم بکنیم:

if ( Conditional_Expression ){
    Commands set 1
} else {
    Commands set 2 
}

در این ساختار در صورت true بودن عبارت، مجموعه دستورات 1 اجرا می شود و در غیر اینصورت مجموعه دستورات 2 اجرا می شود. ساختار شرطی بالا رو می تونیم پیشرفته تر هم بکنیم. ساختار پایین رو ملاحضه کنید:

if ( Conditional_Expression 1 ){
    Commands set 1
} else if ( Conditional_Expression 2 ) {
    Commands set 2 
} else if ( Conditional_Expression 3 ) {
    Commands set 3
} else if ( Conditional_Expression n ) {
    Commands set n
} else {
    Commands set n+1
}

در این ساختار اول نتیجه عبارت 1 بررسی می شود؛ درصورت true بودن مجموعه دستورات 1 اجرا می شود. اگر نتیجه false باشد، نتیجه عبارت 2 بررسی شده و در صورت true بودن مجموعه دستورات 2 اجرا می شوند. اگر نتیجه false باشد... . قسمت else آخرین مرحله ای هست که اجرا می شود، اما فقط درصورت false بودن عبارت های قبلی!

شما در ساختار شرطی بالا به هر تعدادی که بخواهید می توانید از else if استفاده کنید. اما فقط یک else می توانید داشته باشید.


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

حالا که مطالب رو بخوبی یاد گرفتید، بریم تا از ایم مطالب استفاده کنیم.

در این جلسه می خواهیم برنامه ای بنویسیم که از ساختار شرطی در آن استفاده شده باشد. البته در این برنامه از همه نکاتی که در این درس یاد گرفتید ، استفاده نمی کنیم. اما مطمئنا در درس های بعدی حتما از مطالب این درس بصورت عملی استفاده خواهیم کرد. به جرأت می‌توان گفت با یادگیری این درس نیمی از برنامه نویسی را فرا گرفته اید.

  1. یک پروژه جدید بسازید.
  2. روی فرم پروژه موارد زیر را قرار دهید: (شکل نهایی برنامه بصورت زیر خواهد شد. شما هم سعی کنید اشیاء رو به همین ترتیب قرار بدید یا اینکه مرتب تر و بهتر...)
    1. دو عدد TextBox . خاصیت Name آنها را به txtName و txtFamily تغییر دهید.
    2. دو عدد Label . خاصیت Text آنها را یکی "نام" و دیگری "نام خانوادگی" قرار دهید.
    3. دو عدد RadioButton . خاصیت Name آنها را به rdoMale و rdoFamily تغییر دهید.
    4. یک عدد Button .
  3. روی دکمه دابل کلیک کنید تا بتوانید برای آن برنامه بنویسید. برنامه ای که در هنگام دابل کلیک کردن روی دکمه در بلوک Button1_Click می نویسید، در هنگام کلیک شدن روی دکمه اجرا میشه. (جهت یاد آوری)
  4. کد زیر رو در بلوک مربوطه بنویسید. (بعد از دابل کلیک کردن روی دکمه؛ در محل مکان نمای صفحه کلید. مکان نمای صفحه کلید در میان کد برنامه در حال چشمک زدن است)

if (rdoMale.Checked == true)
{
    MessageBox.Show("سلام آقای " +
    txtName.Text + " " +
    txtFamily.Text +
    ".\n به درس هفتم خوش آمدید.");
}else{
    MessageBox.Show("سلام خانم " +
    txtName.Text + " " +
    txtFamily.Text +
    ".\n به درس هفتم خوش آمدید.");
}

تعجب نکنید! حتی یک دستور رو هم می تونید بشکنید و در چند خط بنویسید. به برنامه بالا دقت کنید که چطور دستور MessageBox.Show رو در چند خط نوشتم. البته عملگر + در این دستور کار چسباندن رشته ها (متن ها) به هم رو انجام میده! نه اینکه حتما اگر بخواهیم ادامه دستور رو در خط بعد بنویسیم مجبور باشیم علامت + رو بنویسم.

برنامه نویسی مقدماتی سی شارپ

می دونم که خیلی از دستور MessageBox.Show داریم استفاده می کنیم. ولی مجبوریم! اما نگران نباشید. بزودی با دستورهای جدید و جالب دیگه ای هم آشنا خواهید شد.

با ما باشید...

نظرات  (۷)

//Program Codeusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (rdoMale.Checked == true)
            {
                MessageBox.Show("سلام آقای " +
                    txtName.Text + " " +
                    txtFamily.Text);
            }
            else if (rdoFemale.Checked == true)
            {
                MessageBox.Show("سلام خانم " +
                    txtName.Text + " " +
                    txtFamily.Text);
            }
            else (rdoMale.Checked && rdoFemale.Checked == false);
            {
                MessageBox.Show("جنسیت را مشخص کنید ");
            }
        }
    }
}
این کد چرا باید مشکل داشته باشه به conditional expression سومی گیر میده 
پاسخ:
سلام آقا محسن
در همون عبارت شرطی سوم باید به این نکته ها دقت کنید که:
  • جلوی else نباید عبارت شرطی وجود داشته باشد.
  • در هر دستور if ممکن است چندین else if وجود داشته باشد اما
  • در هز دستور if فقط و فقط یک else وجود دارد.
  • جلوی قسمت else هیچ عبارت شرطی نباید وجود داشته باشد.
  • احتمالا حواستون نبوده و بعد از پرانتز عبارت شرطیِ جلوی else علامت نقطه وریگول گذاشته اید.
بنابراین همون قسمت سومی رو بصورت زیر بنویسید:
else
{
    MessageBox.Show("جنسیت را مشخص کنید ");
}

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

سلام دائاش 
دائاش یه اروری کارم داده اگرم تو عکس نیگا کنی می بینی که رد مارکر هم نداره چه مرگشه؟
http://8pic.ir/images/kf11xd6nfaasa1wj5zmb.jpg

پاسخ:
سلام
 رد مارکر داره!
توی همین عکسی که ارسال کردید، رویداد TextBox2_TextChanged، آکولاد نداره! احتمالا می خواستید این رویداد رو حذف کنید ولی...
خط دوم از همین عکس:
private void TextBox2_TextChanged(object sender, EventArgs e)
این خط رو کاملا حذف کنید، ان شاء الله مشکلتون حل خواهد شد.

موفق باشی
یاعلی
  • رندخرابات
  • اره..میدونم ضعیفم!
    من بشدت تنبلی کردم...
    البته تو دانشگاه هم باهامون زبانهای متفرقه رو کار نمیکنن!
    فعلنم دارم از هر شاخه ای چیزی یاد میگیرم..
    و الی الله عاقبه الامور..
    پاسخ:
    دانشگاه که چیز خاصی یاد نمیده.
    شما باید دانشجو باشید که الحمدلله هستید.
  • رندخرابات
  • در ادامه ی اون کامنت ثبت نشده!
    من نرم افزار میخونم..چند روز دیگه هم امتحان هوش داریم و ..خلاصه تو این بخش جستجوهای هیورستیک این SMA* و اون قضیه ی حافظه ی محدودشو کامل نفهمیدم!
    البته الان که تا فصل اخر خوندم متوجه شدم که فصل 7و8و9 هم واس خودشون غولی ان!
    میدونم که اینطوری کلی نمیشه خوب توضیح داد..من میخونم و حتمن بعدن مزاحم میشم!
    :))
    پاسخ:
    سلام...
    البته حدس میزدم که نرم افزار بخونید... چون جواب این سوال ها بدرد هیچکس جز نرم افزاری ها نمی خوره. من تازگی ها کارشناسی نرم افزار رو گرفتم. درس هوش رو هم با نمره 16.5 پاس کردم. هرچند توی هوش مصنوعی ادعایی ندارم اما خوشحال می شم اگه بتونم کمکی بهتون بکنم.
    ما کتاب راسل رو می خوندیم.
    ولی برام عجیبه که برنامه نویسی رو ضعیف باشید! احتمالا تغییر رشته داده باشید.
    بازم نگاه کردم... همه ی کامنت های شما بدون استثناء پاسخگویی و تأیید شدن.
  • رندخرابات
  • البته منظورم *SMA بود..ببخشید!
    پاسخ:
    خواهش می کنم :)
    خود *A چندتا زیر مجموعه داره؛ *MA همون *A با حافظه محدود هست. *SMA ساده شده *MA هست. این الگوریتم بهترین برگ را بسط می دهد تا زمانی که حافظه پر شود...
  • رندخرابات
  • اون w که اینطوری شدهwlcm\ مخفف ولکامیه که خودتون نوشتید..منتها چون چسبیده بهش ظاهر غلط انداز شده..البته الان فهمیدم مشکل کجاس!
    درست شد..
    ولی چقدر ادم انرژی میگیره همین برنامه ی ساده ام اجرا میشه!
    نخندین بهم..خب تازه کارم! :)))
    ...
    راستی..شما میتونید جستجوی آگاهانه با الگوریتم *A رو بهم توضیح بدین؟
    پاسخ:
    شما مطمئنید توی برنامه نویسی تازه کار هستید؟ آخه جستجوی آگاهانه از مباحث درس هوش مصنوعی در دوره کارشناسی هست. و کسانی این درس رو می خونن که با زبان C آشنایی داشته باشن و یا حداقل شبه کدهای اون رو متوجه بشن...
    یکی از مباحث مهم برنامه نویسی همین مبحث جستجو هست. یکی از زیر مجموعه های این مبحث ، جستجو در داخل درخت ها هست. ساده ترین روش جستجوی درخت ها اینه که تمام گره های درخت رو تک تک با مورد هدف مقایسه کنیم تا زمانی که به جواب برسیم. اما این کار در درخت های بزرگ هزینه پردازشی و حافظه ای زیادی به کامپیوتر وارد می کنه. برای همین با اعمال تدابیری خاص، کاری می کنند که این هزینه ها کاهش پیدا کنه و طبعا سریعتر به جواب برسیم. از جمله این راه ها همین الگوریتم *A هست. این الگوریتم با استفاده از فرمول
    f(n)=g(n)+h(n)
    سعی میکنه به بهترین جواب برای جستجو برسه. در این فرمول (g(n به معنای هزینه مسیر از نقطه شروع تا گره n هست و (h(n هزینه ای هست که ما با استفاده از روش های خاصی تخمین می زنیم که کم هزینه ترین مسیر از گره n به مقصد باشه...
    برای بهتر توضیح دادن باید سطح علمی سوال کننده مشخص باشه. فعلا همین اندازه رو از من داشته باشید :)
    باید بگم آموزش هایی که این حقیر تحت عنوان برنامه نویسی مقدماتی توی بلاگ قرار میدم بعد از کامل شدنشون مثل سوراخ کلید یک سالن خیلی بزرگ هست که داخل اون سالن پر از اتاق های کوچک و بزرگ باشه...
  • رندخرابات
  • سلام :(((
    اجرا نمیشه..ببینید!
    http://8pic.ir/viewer.php?file=70087592881431225680.png
    پاسخ:
    سلام.
    به کدتون دقت کنید...
    زیر هر کلمه ای که خطچین قرمز هست اشتباه کردین.
    اگه یادتون باشه گفتم توی سی شارپ حروف کوچک و بزرگ با هم متفاوت هستند.
    پس radioButton1.checked با radioBatton1.Checked فرق میکنه.
    ما هرجایی از پیغام رو که بخواهیم در خط بعد نشون داده بشه باید قبلش بنویسیم n\ پس w\ کار رو خ/راب می کنه. اصلا علامت \ (Backslash) همیشه با اولین حرف بعد از خودش یک ترکیب خاصی رو میسازه که برای کامپیوتر معنی خاصی میده. برای مثال n\ به معنی رفتن به خط بعدی هست.
    این دو مورد رو حل کنید درست میشه...
    لطفا ایمیل خودتون رو هم وارد کنید تا پاسخ رو به ایمیلتون هم بفرستم.
    ممنون که این وضعیت رو گزارش دادید. احتمالا مشکل خیلی ها باشه. من توی تمرین های درس های قبل عمدا بین n\ و بقیه جمله یک فاصله ای قرار میدادم که متوجه بشید که این n\ جدا هست و توجه هنر آموز رو به این نکته جلب کنم که خود n چاپ نمیشه....
    باز هم ممنون و عذرخواهی بابت اینکه این نکته رو در خلال درس نگفته بودم.

    ارسال نظر

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