From f0d86bc96ec4252c8e83c9c88acc3251ecf4cd63 Mon Sep 17 00:00:00 2001 From: valipour Date: Tue, 29 Oct 2013 21:06:39 +0000 Subject: add Farsi translation for brainfuck -- partial --- fa-ir/brainfuck.html.markdown | 80 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 fa-ir/brainfuck.html.markdown diff --git a/fa-ir/brainfuck.html.markdown b/fa-ir/brainfuck.html.markdown new file mode 100644 index 00000000..133e664f --- /dev/null +++ b/fa-ir/brainfuck.html.markdown @@ -0,0 +1,80 @@ +--- +language: brainfuck +contributors: + - ["Mohammad Valipour", "https://github.com/mvalipour"] +lang: fa-ir +--- + +برین فاک زبان برنامه نویسی تورینگ کامل بی نهایت ساده ایست که دارای فقط هشت +دستور است. + +هر کارکتری به جر کارکتر های زیر در این زبان در نظر گرفته نمیشود. + +`>` `<` `+` `-` `.` `,` `[` `]` + +برین فاک به صورت یک آرایه ی سی هزار خانه ای کار میکند که در ابتدا تمامی خانه های آن صفر هستند. +همچنین یک اشاره گر در این برنامه به خانه ی فعلی اشاره میکند. + +در زیر هشت دستور این زبان شرح داده شده است: + +`+` : یک عدد به خانه ی فعلی اضافه می کند. +`-` : یک عدد از خانه ی فعلی کم می کند. +`>` : اشاره گر به خانه ی بعدی میرود -- به راست +`<` : اشاره گر به خانه ی قبلی میرود -- به چپ +`.` : کارکتر اسکی معادل مقدار خانه ی فعلی را چاپ میکند. -- به عنوان مثال 65 برای A +`,` : یک کارکتر را از ورودی خوانده و مقدار آن را در خانه ی فعلی زخیره میکند. +`[` : اگر مقدار خانه ی فعلی صفر باشد به محل بسته شدن کروشه جهش میکند. -- و از همه ی دستور های بین آن صرف نظر میشود. +در غیر این صورت به دستور بعدی میرود. +`]` : اگر مقدار خانه ی فعلی صفر باشد به خانه ی بعدی و در غیر این صورت به محل باز شدن کروشه جهش می کند. -- به عقب + +دو علامت کروشه امکان ایجاد حلقه را فراهم میکنند. + +در اینجا یک برنامه ی ساره برین فاک را مشاهده میکنید. + +``` +++++++ [ > ++++++++++ < - ] > +++++ . +``` + +این برنامه کارکتر A را بر روی خروجی چاپ میکند. +در این برنامه خانه ی اول به عنوان متغیر حلقه و خانه ی دوم برای مقدار عددی A +ابتدا عدد شش در خانه ی اول ایجاد شده. سپس برنامه وارد یک حلقه میشود که در هر بار +تکرار آن اشاره گر به خانه ی دوم رفته و ده بار به خانه ی فعلی اضافه می کند. +-- و در انتهای حلقه به خانه ی اول برگشته تا حلقه کنترل شود +بعد از اتمام حلقه به خانه ی دوم میرود و پنج بار به این خانه اضافه کرده و سپس آنرا چاپ میکند. + +``` +, [ > + < - ] > . +``` + +در این برنامه ابتدا یک +This program reads a character from the user input and copies the character into +cell #1. Then we start a loop. Move to cell #2, increment the value at cell #2, +move back to cell #1, and decrement the value at cell #1. This continues on +until cell #1 is 0, and cell #2 holds cell #1's old value. Because we're on +cell #1 at the end of the loop, move to cell #2, and then print out the value +in ASCII. + +Also keep in mind that the spaces are purely for readability purposes. You +could just as easily write it as: + +,[>+<-]>. + +Try and figure out what this program does: + +,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> + +This program takes two numbers for input, and multiplies them. + +The gist is it first reads in two inputs. Then it starts the outer loop, +conditioned on cell #1. Then it moves to cell #2, and starts the inner +loop conditioned on cell #2, incrementing cell #3. However, there comes a +problem: At the end of the inner loop, cell #2 is zero. In that case, +inner loop won't work anymore since next time. To solve this problem, +we also increment cell #4, and then recopy cell #4 into cell #2. +Then cell #3 is the result. +``` + +And that's brainfuck. Not that hard, eh? For fun, you can write your own +brainfuck programs, or you can write a brainfuck interpreter in another +language. The interpreter is fairly simple to implement, but if you're a +masochist, try writing a brainfuck interpreter… in brainfuck. -- cgit v1.2.3