اثر پروانه ای

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

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

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

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

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

۲۳ مطلب با موضوع «تئوری :: واژه نامه» ثبت شده است

مقدمه

به نظرم اولین و مهمترین چیزی که باید بفهمیم اینه که اصلا الگوریتم های مرتب سازی چه هستند. بر اساس ویکی‌پدیا، الگوریتم مرتب سازی، الگوریتمی است که عناصر یک لیست را به ترتیب خاصی در می‌آورد. کاربردی‌ترین ترتیب ها، ترتیب‌های عددی و ترتیب‌های وابسه به حروف هستند. بعضی از الگوریتم‌ها (از جمله الگوریتم‌های جستجو و ادغام) برای اینکه بدرستی کار کنند، نیازمند لیست‌های مرتب شده می باشند؛ مرتب‌سازی مؤثر و کارآمد، برای بهینه سازی کارائی چنین الگوریتم‌هایی، مهم هستند. این اگوریتم‌ها، اغلب اوقات، برای به نظم در آوردن داده‌ها و تولید خروجی قابل خواندن برای انسان، مفید هستند.

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


الگوریتم‌هایی که در این مقاله با آنها آشنا خواهید شد:

  • مرتب سازی حبابی دوطرفه (Bidirectional Bubble Sort)
  • مرتب سازی حبابی (Bubble Sort)
  • مرتب سازی سطلی (Bucket Sort)
  • مرتب سازی شانه ای (Comb Sort)
  • مرتب سازی چرخه‌ای (Cycle Sort)
  • مرتب سازی گورزاد (Gnome Sort)
  • مرتب سازی هرمی (Heap Sort)
  • مرتب سازی درجی (Insertion Sort)
  • مرتب سازی ادغامی (Merge Sort)
  • مرتب سازی زوج-فرد (Odd-Even Sort)
  • مرتب سازی لانه کبوتری (Pigeonhole Sort)
  • مرتب سازی سریع (Quick Sort)
  • مرتب سازی سریع با استفاده از مرتب سازی حبابی (Quick Sort with Bubble Sort)
  • مرتب سازی انتخابی (Selection Sort)
  • مرتب سازی شل یا پوسته ای (Shell Sort)

قصد دارم طرز کار این الگوریتم ها رو بصورت دیداری به شما نشان بدهم. کاربر می تواند، خروجی این پروژه را بصورت تصاویر متحرک GIF، با سرعت دلخواه، ذخیره کند.

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

سلام.

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

در جلسه قبل در مورد سطوح دسترسی اعضای کلاس توضیحاتی ارائه شد. در این درس سعی می کنیم شما رو با دو مفهوم بسیار مهم در برنامه نویسی شیئ گرا آشنا کنیم. مفاهیم Overload و Override هرچند بسیار شبیه به هم هستند، اما در ادامه، ضمن توضیح در مورد معنی این دو کلمه، به بررسی تفاوت های آنها می پردازیم.

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

سلام.

امیدوارم به اندازه کافی تمرین کرده باشید. خوب بدون معطلی به ادامه درس می پردازیم. تا اینجا فقط داریم در مورد خود زبان سی شارپ یه چیزایی (هرچند خیلی ساده و مقدماتی) یاد می گیریم. اما به نظر میرسه برای اینکه بتونیم واقعا برنامه نویس باشیم به چیزی بیش از یادگیری تئوری یک زبان برنامه نویسی نیاز هست و آن هم 3 چیز مهم هست. تمرین تمرین تمرین!!

در این درس می خواهیم در مورد Class ها بیشتر صحبت کنیم. باید بدونیم که برنامه نویسی سی شارپ کلا" بر اساس اشیاء و کلاس ها می باشد، در صورتی که اکثر افرادی که در این زبان برنامه نویسی می‌کنند، با این روش (برنامه نویسی شئ گرا) برنامه نویسی نمی کنند. یعنی ممکن است یک زبان برنامه نویسی ذاتا" شئ گرا باشد، اما یک برنامه نویس کمترین استفاده را از این امکان فوق‌العاده برنامه نویسی داشته باشد. اما قبل از اینکه بتوانیم برنامه ای را بصورت شئ گرا بنویسیم باید اساس این روش برنامه نویسی که همان Class ها هستند را بهتر بشناسیم. قبلا از لحاظ تئوریک با مفهوم کلاس ها و اشیاء آشنا شدیم.

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

سلام...

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

شئ گرایی در برنامه نویسی، کار برنامه نویس ها رو بسیار ساده کرده به این دلیل که پیچیدگی برنامه‌های نوشته شده به این روش بسیار کم بوده ، هزینه آن کمتر و امکان توسعه سریع تر برنامه را به برنامه نویس خواهد داد. جلوی بسیاری از خطاهای منطقی در برنامه نویسی، با این روش گرفته می شود. البته این امکان وجود دارد که زبان برنامه نویسی مورد استفاده، تمام امکانات را برای نوشتن یک برنامه شئ‌گرا فراهم کرده باشه، اما برنامه نویسی ما به روش سنتی باشه! گفتن این مقدمه طولانی شاید کمی بی موقع باشه. پس بریم ببینیم این روش برنامه نویسی واقعا به چه شکل هست. البته باید بگم معمولا برنامه نویسی به این روش رو کسی به این زودی تدریس نمی کنه! و معمولا بعد از آشنایی هنرآموز با چند زبان غیر شئ‌گرای دیگر، این مباحث رو تدریس می کنند. اما به این دلیل که با اکثر مفاهیم اولیه تا حدودی آشنایی پیدا کرده اید، این مبحث رو زود تر مطرح کردیم. در ضمن تمام دروسی که تا اینجا گفته شده بسیار مختصر و خلاصه بوده اند.

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

سلام. عذرخواهی می کنم بابت تأخیری که برای نوشتن درس جدید داشتم. یه مشغولیت هایی داشتم که باعث شد نتونم به موقع درخدمتتون باشم.

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

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

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

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

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

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

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

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

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

سلام...


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

کامپیوتر تک دستور ها رو یکی پس از دیگری اجرا می کنه. اگر برنامه ای که نوشته ایم مثلا 5 خط باشه، اول خط 1 ، بعد خط 2 ، بعد خط 3 و همینطور تا آخر برنامه دستورات اجرا خواهند شد.

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

با نام و یاد خدا... سلام.

در جلسات قبل یاد گرفتیم که چطور برای دکمه برنامه بنویسیم، طوری که اگر در هنگام اجرای برنامه روی دکمه کلیک کنیم، کاری رو برامون انجام بده. به غیر از دکمه چند شیئ دیگه رو هم روی فرم قرار دادیم و از شیئ TextBox در برنامه خودمون استفاده کردیم و متوجه شدیم که چطور از خصوصیت Text مربوط به این شیئ استفاده کنیم. در مورد شیئ گرایی هم خیلی کوتاه صحبت کردیم و مفهوم کلاس و وراثت رو بصورت غیر آکادمیک! و خودمونی توضیح دادیم.

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

Learning pyramid

همونطور که ملاحظه می فرمائید یکی از بهترین روش ها برای یادگیری اینه که مطلبی رو به دیگران یاد بدهیم...

زَکَاةُ الْعِلْمِ نَشْرُهُ / زکات علم منتشر کردن آن و یاد دادن آن به دیگران است. (امام علی علیه السلام)

سلام.

قصد دارم برنامه نویسی #C رو بصورت کاملا" مقدماتی منتشر کنم. قراره این آموزش ها از 0 باشه. اما قول نمی دم که تا 100 بتونم بهتون برنامه نویسی یاد بدم. اون دیگه تلاش و پشتکار خودتون رو می طلبه. این سلسله آموزش ها با همکاری گروه افسران برنامه نویس انجام خواهد گرفت.

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

قبل از هر چیز!

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

من دوست دارم تمام تعاریف رو با مثال (البته در مثال مناقشه نیست) انجام بدم. فرض کنید شما فرزندی فرمانبردار برای مادرتون هستید و هرچه ایشون به شما بگن بدون کم و کاست و بدون نق زدن انجام می‌دهید (ان‌شاءالله در واقع هم همینطوره!!). همچنین فرض کنید مادرتون بهتون یه لیست از اقلام رو داده اند تا از بازار تهیه کنید. شما موظف هستید که تمام اقلام داخل لیست رو تهیه کنید. اگر بخواهیم این مثال رو به کامپیوتر ربط بدیم، شما همون کامپیوتر هستید. مادر شما در نقش کاربر و لیستی از اقلام رو که از مادر عزیزتون دریافت کرده اید، برنامه کامپیوتری است.

برنامه کامپیوتری در واقع لیستی از دستورالعمل هاست که کامپیوتر موظف به اجرای آنهاست.

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

به برنامه ای که زبان خاصی رو به زبان ماشین تبدیل میکنه، اصطلاحا Compiler (مترجم) می گن. چی میگن؟ کامپایلر!!