diff --git a/fa-ir/brainfuck.html.markdown b/fa-ir/brainfuck.html.markdown new file mode 100644 index 00000000..ef2bcba3 --- /dev/null +++ b/fa-ir/brainfuck.html.markdown @@ -0,0 +1,81 @@ +--- +language: brainfuck +contributors: + - ["Mohammad Valipour", "https://github.com/mvalipour"] +lang: fa-ir +--- + +
برین فاک زبان برنامه نویسی تورینگ کامل بی نهایت ساده ایست که دارای فقط هشت
+دستور است.
+ +هر کارکتری به جر کارکتر های زیر در این زبان در نظر گرفته نمیشود.
+ + +`>` `<` `+` `-` `.` `,` `[` `]` + +برین فاک به صورت یک آرایه ی سی هزار خانه ای کار میکند که در ابتدا تمامی خانه های آن صفر هستند.
+همچنین یک اشاره گر در این برنامه به خانه ی فعلی اشاره میکند.
+ +در زیر هشت دستور این زبان شرح داده شده است:
+ +`+` : یک عدد به خانه ی فعلی اضافه می کند. +
`-` : یک عدد از خانه ی فعلی کم می کند.
+`>` : اشاره گر به خانه ی بعدی میرود -- به راست
+`<` : اشاره گر به خانه ی قبلی میرود -- به چپ
+`.` : کارکتر اسکی معادل مقدار خانه ی فعلی را چاپ میکند. -- به عنوان مثال 65 برای A
+`,` : یک کارکتر را از ورودی خوانده و مقدار آن را در خانه ی فعلی زخیره میکند.
+`[` : اگر مقدار خانه ی فعلی صفر باشد به محل بسته شدن کروشه جهش میکند. -- و از همه ی دستور های بین آن صرف نظر میشود.
+در غیر این صورت به دستور بعدی میرود.
+`]` : اگر مقدار خانه ی فعلی صفر باشد به خانه ی بعدی و در غیر این صورت به محل باز شدن کروشه جهش می کند. -- به عقب
+ +دو علامت کروشه امکان ایجاد حلقه را فراهم میکنند.
+ +در اینجا یک برنامه ی ساره برین فاک را مشاهده میکنید.
+ +``` +++++++ [ > ++++++++++ < - ] > +++++ . +``` + +این برنامه کارکتر A را بر روی خروجی چاپ میکند.
+در این برنامه خانه ی اول به عنوان متغیر حلقه و خانه ی دوم برای مقدار عددی A
+ابتدا عدد شش در خانه ی اول ایجاد شده. سپس برنامه وارد یک حلقه میشود که در هر بار
+تکرار آن اشاره گر به خانه ی دوم رفته و ده بار به خانه ی فعلی اضافه می کند.
+-- و در انتهای حلقه به خانه ی اول برگشته تا حلقه کنترل شود
+بعد از اتمام حلقه به خانه ی دوم میرود و پنج بار به این خانه اضافه کرده و سپس آنرا چاپ میکند.
+ +``` +, [ > + < - ] > . +``` + +در این برنامه ابتدا یک کارکتر از ورودی خوانده می شود. سپس یک حلقه به تعداد بار مقدار
+عددی کارکتر، یک عدد به خانه ی دوم اضافه می کند. با این کار در واقع برنامه مقدار ورودی را در خانه ی
+دوم کپی می کند. و در نهایت آن را برروی خروجی چاپ می کند.
+ +توجه داشته باشید که ردر بالا فواصل بین دستور ها فقط برای خوانایی بیشتر گذاشته شده اند.
+در واقع برنامه بالا به شکل زیر صحیح می باشد.
+ +``` +,[>+<-]>. +``` + +حال سعی کنید ببینید که برنامه ی زیر چه کاری انجام می دهد؟
+ +``` +,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> +``` + +این برنامه دو عدد را از ورودی خوانده و با هم ضرب می کند.
+ +ابتدا دو عدد از ورودی خوانده می شوند. سپس حلقه ی بیرونی بر روی خانه شماره یک شروع میشود.
+و درون آن حلقه ی دیگری بر روی خانه ی دوم شروع میشود که خانه ی 3 را زیاد میکند.
+ولی مشکلی که در اینجا به وجود می آید اینست که در پایان حلقه ی دوم مقدار خانه ی 2 صفر شده
+و مقدار اولیه ی آن از دست رفته است. برای حل این مشکل خانه ی شماره چهار هم زیاد میشود
+و در پایان حلقه مقدار آن به خانه 2 کپی میشود.
+در پایان خانه ی شماره 2 حاوی حاصلضرب خواهد بود.
+ +و این همه ی برین فاک بود! خیلی ساده برای یادگیری ولی سنگین برای به کار بردن.
+حال می توانید برای تفریح مشغول نوشتن برنامه ی های مختلف با آن شوید.
+و یا یک اجرا کننده برین فاک را با یک زبان دیگر پیاده سازی کنید.
+و یا اگر خیلی دوست داشتید یک اجرا کننده ی برین فاک با برین فاک بنویسید!!