mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-11-30 06:22:32 +03:00
complete Farsi translation for brainfuck
This commit is contained in:
parent
f0d86bc96e
commit
1f0d7a02a1
@ -5,76 +5,77 @@ contributors:
|
|||||||
lang: fa-ir
|
lang: fa-ir
|
||||||
---
|
---
|
||||||
|
|
||||||
برین فاک زبان برنامه نویسی تورینگ کامل بی نهایت ساده ایست که دارای فقط هشت
|
<p dir='rtl'>برین فاک زبان برنامه نویسی تورینگ کامل بی نهایت ساده ایست که دارای فقط هشت</p>
|
||||||
دستور است.
|
<p dir='rtl'>دستور است.</p>
|
||||||
|
|
||||||
|
<p dir='rtl'>هر کارکتری به جر کارکتر های زیر در این زبان در نظر گرفته نمیشود.</p>
|
||||||
|
|
||||||
هر کارکتری به جر کارکتر های زیر در این زبان در نظر گرفته نمیشود.
|
|
||||||
|
|
||||||
`>` `<` `+` `-` `.` `,` `[` `]`
|
`>` `<` `+` `-` `.` `,` `[` `]`
|
||||||
|
|
||||||
برین فاک به صورت یک آرایه ی سی هزار خانه ای کار میکند که در ابتدا تمامی خانه های آن صفر هستند.
|
<p dir='rtl'>برین فاک به صورت یک آرایه ی سی هزار خانه ای کار میکند که در ابتدا تمامی خانه های آن صفر هستند.</p>
|
||||||
همچنین یک اشاره گر در این برنامه به خانه ی فعلی اشاره میکند.
|
<p dir='rtl'>همچنین یک اشاره گر در این برنامه به خانه ی فعلی اشاره میکند.</p>
|
||||||
|
|
||||||
در زیر هشت دستور این زبان شرح داده شده است:
|
<p dir='rtl'>در زیر هشت دستور این زبان شرح داده شده است:</p>
|
||||||
|
|
||||||
`+` : یک عدد به خانه ی فعلی اضافه می کند.
|
<p dir='rtl'>`+` : یک عدد به خانه ی فعلی اضافه می کند.
|
||||||
`-` : یک عدد از خانه ی فعلی کم می کند.
|
<p dir='rtl'>`-` : یک عدد از خانه ی فعلی کم می کند. </p>
|
||||||
`>` : اشاره گر به خانه ی بعدی میرود -- به راست
|
<p dir='rtl'>`>` : اشاره گر به خانه ی بعدی میرود -- به راست</p>
|
||||||
`<` : اشاره گر به خانه ی قبلی میرود -- به چپ
|
<p dir='rtl'>`<` : اشاره گر به خانه ی قبلی میرود -- به چپ</p>
|
||||||
`.` : کارکتر اسکی معادل مقدار خانه ی فعلی را چاپ میکند. -- به عنوان مثال 65 برای A
|
<p dir='rtl'>`.` : کارکتر اسکی معادل مقدار خانه ی فعلی را چاپ میکند. -- به عنوان مثال 65 برای A</p>
|
||||||
`,` : یک کارکتر را از ورودی خوانده و مقدار آن را در خانه ی فعلی زخیره میکند.
|
<p dir='rtl'>`,` : یک کارکتر را از ورودی خوانده و مقدار آن را در خانه ی فعلی زخیره میکند.</p>
|
||||||
`[` : اگر مقدار خانه ی فعلی صفر باشد به محل بسته شدن کروشه جهش میکند. -- و از همه ی دستور های بین آن صرف نظر میشود.
|
<p dir='rtl'>`[` : اگر مقدار خانه ی فعلی صفر باشد به محل بسته شدن کروشه جهش میکند. -- و از همه ی دستور های بین آن صرف نظر میشود.</p>
|
||||||
در غیر این صورت به دستور بعدی میرود.
|
<p dir='rtl'>در غیر این صورت به دستور بعدی میرود.</p>
|
||||||
`]` : اگر مقدار خانه ی فعلی صفر باشد به خانه ی بعدی و در غیر این صورت به محل باز شدن کروشه جهش می کند. -- به عقب
|
<p dir='rtl'>`]` : اگر مقدار خانه ی فعلی صفر باشد به خانه ی بعدی و در غیر این صورت به محل باز شدن کروشه جهش می کند. -- به عقب</p>
|
||||||
|
|
||||||
دو علامت کروشه امکان ایجاد حلقه را فراهم میکنند.
|
<p dir='rtl'>دو علامت کروشه امکان ایجاد حلقه را فراهم میکنند.</p>
|
||||||
|
|
||||||
در اینجا یک برنامه ی ساره برین فاک را مشاهده میکنید.
|
<p dir='rtl'>در اینجا یک برنامه ی ساره برین فاک را مشاهده میکنید.</p>
|
||||||
|
|
||||||
```
|
```
|
||||||
++++++ [ > ++++++++++ < - ] > +++++ .
|
++++++ [ > ++++++++++ < - ] > +++++ .
|
||||||
```
|
```
|
||||||
|
|
||||||
این برنامه کارکتر A را بر روی خروجی چاپ میکند.
|
<p dir='rtl'>این برنامه کارکتر A را بر روی خروجی چاپ میکند.</p>
|
||||||
در این برنامه خانه ی اول به عنوان متغیر حلقه و خانه ی دوم برای مقدار عددی A
|
<p dir='rtl'>در این برنامه خانه ی اول به عنوان متغیر حلقه و خانه ی دوم برای مقدار عددی A</p>
|
||||||
ابتدا عدد شش در خانه ی اول ایجاد شده. سپس برنامه وارد یک حلقه میشود که در هر بار
|
<p dir='rtl'>ابتدا عدد شش در خانه ی اول ایجاد شده. سپس برنامه وارد یک حلقه میشود که در هر بار </p>
|
||||||
تکرار آن اشاره گر به خانه ی دوم رفته و ده بار به خانه ی فعلی اضافه می کند.
|
<p dir='rtl'>تکرار آن اشاره گر به خانه ی دوم رفته و ده بار به خانه ی فعلی اضافه می کند.</p>
|
||||||
-- و در انتهای حلقه به خانه ی اول برگشته تا حلقه کنترل شود
|
<p dir='rtl'>-- و در انتهای حلقه به خانه ی اول برگشته تا حلقه کنترل شود</p>
|
||||||
بعد از اتمام حلقه به خانه ی دوم میرود و پنج بار به این خانه اضافه کرده و سپس آنرا چاپ میکند.
|
<p dir='rtl'>بعد از اتمام حلقه به خانه ی دوم میرود و پنج بار به این خانه اضافه کرده و سپس آنرا چاپ میکند.</p>
|
||||||
|
|
||||||
```
|
```
|
||||||
, [ > + < - ] > .
|
, [ > + < - ] > .
|
||||||
```
|
```
|
||||||
|
|
||||||
در این برنامه ابتدا یک
|
<p dir='rtl'>در این برنامه ابتدا یک کارکتر از ورودی خوانده می شود. سپس یک حلقه به تعداد بار مقدار</p>
|
||||||
This program reads a character from the user input and copies the character into
|
<p dir='rtl'>عددی کارکتر، یک عدد به خانه ی دوم اضافه می کند. با این کار در واقع برنامه مقدار ورودی را در خانه ی </p>
|
||||||
cell #1. Then we start a loop. Move to cell #2, increment the value at cell #2,
|
<p dir='rtl'>دوم کپی می کند. و در نهایت آن را برروی خروجی چاپ می کند.</p>
|
||||||
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
|
<p dir='rtl'>توجه داشته باشید که ردر بالا فواصل بین دستور ها فقط برای خوانایی بیشتر گذاشته شده اند.</p>
|
||||||
could just as easily write it as:
|
<p dir='rtl'>در واقع برنامه بالا به شکل زیر صحیح می باشد.</p>
|
||||||
|
|
||||||
|
```
|
||||||
,[>+<-]>.
|
,[>+<-]>.
|
||||||
|
```
|
||||||
|
|
||||||
Try and figure out what this program does:
|
<p dir='rtl'>حال سعی کنید ببینید که برنامه ی زیر چه کاری انجام می دهد؟</p>
|
||||||
|
|
||||||
|
```
|
||||||
,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
|
,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
|
||||||
|
|
||||||
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
|
<p dir='rtl'>این برنامه دو عدد را از ورودی خوانده و با هم ضرب می کند.</p>
|
||||||
brainfuck programs, or you can write a brainfuck interpreter in another
|
|
||||||
language. The interpreter is fairly simple to implement, but if you're a
|
<p dir='rtl'>ابتدا دو عدد از ورودی خوانده می شوند. سپس حلقه ی بیرونی بر روی خانه شماره یک شروع میشود.</p>
|
||||||
masochist, try writing a brainfuck interpreter… in brainfuck.
|
<p dir='rtl'>و درون آن حلقه ی دیگری بر روی خانه ی دوم شروع میشود که خانه ی 3 را زیاد میکند.</p>
|
||||||
|
<p dir='rtl'>ولی مشکلی که در اینجا به وجود می آید اینست که در پایان حلقه ی دوم مقدار خانه ی 2 صفر شده</p>
|
||||||
|
<p dir='rtl'>و مقدار اولیه ی آن از دست رفته است. برای حل این مشکل خانه ی شماره چهار هم زیاد میشود</p>
|
||||||
|
<p dir='rtl'>و در پایان حلقه مقدار آن به خانه 2 کپی میشود.</p>
|
||||||
|
<p dir='rtl'>در پایان خانه ی شماره 2 حاوی حاصلضرب خواهد بود.</p>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<p dir='rtl'>و این همه ی برین فاک بود! خیلی ساده برای یادگیری ولی سنگین برای به کار بردن.</p>
|
||||||
|
<p dir='rtl'>حال می توانید برای تفریح مشغول نوشتن برنامه ی های مختلف با آن شوید.</p>
|
||||||
|
<p dir='rtl'>و یا یک اجرا کننده برین فاک را با یک زبان دیگر پیاده سازی کنید.</p>
|
||||||
|
<p dir='rtl'>و یا اگر خیلی دوست داشتید یک اجرا کننده ی برین فاک با برین فاک بنویسید!!</p>
|
||||||
|
Loading…
Reference in New Issue
Block a user