زبان برنامه نویسی کاتی

مقدمه

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

کاتی یک زبان برنامه‌نویسی انعطاف پذیر و قدرتمند به زبان فارسی می‌باشد. کاتی به منظور یادگیری و درک برنامه‌نویسی نوشته شده است و می‌تواند ابزار مناسبی برای شروع یادگیری برنامه‌نویسی باشد. استفاده از کاتی نیازی به دانستن زبان انگلیسی ندارد.

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

دستور شروع

اولین دستور برنامه در زبان کاتی دستور /شروع/ است. در پایان هر یک از دستورات کاتی بایستی علامت نقطه(.)قرار بگیرد.

شروع.

دستور پایان

دستور /پایان/ در برنامه کاتی برای خاتمه استفاده می‌شود. هر برنامه کاتی حاوی یک /دستور/ شروع و حداقل یک دستور /پایان/ است.

پایان.

متغییرها

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

مثالهایی از متغییر عبارتند از: میانگین،‌ الف،‌مساحت، طول، عرض،‌ شعاع.

انواع داده‌ها

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

متغییر اعشاری الف و ب. متغییر اعشاری الف و عددی ب. متغییر متنی نام. متغییر عددی آ(۱۰). مقدار ۱ را در الف بنویس. مقدار ۲ را در آ(۳)‌بنویس. مقدار الف و < > و آ(۳) را بنویس.

این امکان وجود دارد که رشته‌‌ها در دستور خروجی استفاده نماییم. برای این منظور رشته خروجی را در بین علامت کوتیشن " " یا < > قرار می‌دهیم.

مقدار "سلام کاتی" را بنویس. سرخط. مقدار <سلام کاتی> را بنویس.

دستورات ورودی و خروجی

دستور ورودی: بخوان

برای خواندن اطلاعات از فایل یا از ورودی از دستور بخوان استفاده می‌شود.
مقدار /متغییر/ را {از ورودی} بخوان.
به مثالهایی از خواندن اطلاعات از ورودی توجه نمایید.
مقدار الف را بخوان. مقدار الف را از ورودی بخوان. مقدار طول و عرض را بخوان.
15 20 25 30 40

دستور خروجی: بنویس و سرخط

دستور سرخط:

دستور /سرخط/، کاراکتر خط بعد را در خروجی می‌نویسد. این دستور باعث می‌شود خروجی‌‌های بعدی از ابتدای خط بعد نوشته شوند.
سرخط.

دستور بنویس:

دستور /بنویس/ اطلاعات را در فایل خروجی می‌نویسد. در حال حاضر امکان استفاده از دستورهای مربوط به فایل وجود ندارد. این امکان وجود دارد که از بنویس در انتهای دستور محاسباتی /مقدار/ استفاده کنیم.
مقدار الف را بنویس. مقدار الف : 0.4 را بنویس. مقدار الف را /در خروجی/ بنویس. حاصل الف را /در فایل/ بنویس. مقدار الف : 0.3 را بنویس. مقدار الف : 4.3 و ب : 0.6 را بنویس. مقدار 3.1415926 : 4.1 را بنویس.
شروع. متغییر اعشاری شعاع و پی و مساحت. مقدار شعاع را از ورودی بخوان. مقدار ۳.۱۴ را در پی ذخیره کن. مقدار پی را بنویس. سرخط. حاصل پی * مربع(شعاع) را در مساحت ذخیره کن. مقدار مساحت : 6.3 را بنویس. پایان.
100

عملگرهای کاتی

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

عملگرهای محاسباتی مختلفی در زبان کاتی تعریف شده است که عبارتند از: جمع، ضرب، تفریق، تقسیم، تقسیم صحیح، باقیمانده، نصف، ثلث (یک سوم)، ربع (یک جهارم)، خمس (یک پنجم)، معکوس (تقسم یک بر عدد)، قرینه (قرینه عدد).دقت کنید که عملگرهای محاسباتی قبل از عملوندهای خود قرار می‌گیرند.

الف ضرب ب. الف ضربدر ب. الف * ب. الف تقسیم بر ب. یا الف / ب. الف تقسیم صحیح بر ب. الف + ب. الف بعلاوه ب. الف منهای ب. الف باقیمانده ب. یا الف % ب. معکوس(الف). جذر (الف). (یعنی ریشه دوم الف) مربع (الف). ( یعنی الف به توان ۲) مکعب( الف).  (یعنی الف به توان ۳) نصف( الف). قرینه( الف).

انتساب یا جایگزینی

برای ذخیره نتیجه یک عملیات محاسبانی می‌توان از دستور /حاصل/ به صورت /حاصل ... را در ... ذخیره کن./ استفاده نمود.
مقدار الف را بخوان. حاصل الف را در ب ذخیره کن. حاصل نصف (الف) را در د ذخیره کن. حاصل الف * ب را در ج ذخیره کن. حاصل ۵۶ را در الف ذخیره کن. مقدار الف:۵ و د:۵ و ج:۵ را بنویس.
50
در زبان کاتی /مقدار/ و /حاصل/ مترادف هم می‌باشند.

عملگرهای مقایسه

گونه دیگر از عملگرهای قابل استفاده در زبان کاتی، عملگرهای مقایسه‌ای هستند. نتیجه یک عملگر مقایسه‌ای مقدار صفر یا یک است. عملگرهای مقایسه‌ای عبارتند از:
برابر یا مساوی بزرگتر (بیشتر) کوچکتر (کمتر) بزرگترمساوی (بیشترمساوی) کوچکترمساوی(کمترمساوی).
الف برابر ب. الف مساوی ب. الف بزرگتراز ب. الف کوچکتراز ب. الف بزرگترمساوی ب. الف کوچکترمساوی ب.

ترکیب شرطها

برای ترکیب شرطها از عملگرهای /یا/ و /وو/ و /نقیض/ می‌توان استفاده نمود.
/وو/ برای ترکیب عطفی. /یا/ برای ترکیب فصلی. /نقیض/ برای نقیض.
(الف برابر ب) وو (ب برابر ج) (الف برابر ب) یا (ب برابر ج) نقیض (الف برابر ب)

دستور شرطی

دستور اگر

به کمک دستور شرطی اگر می‌توانیم اجرای دستورات برنامه را بر اساس یک شرط کنترل نماییم. دستور اگر به صورتهای زیر قابل استفاده است.
اگر /شرط/ آنگاه /دستور۱/. وگرنه /دستور۲/.
اگر شرط درست باشد دستورات بعد از آنگاه انجام می‌شود و اگر شرط نادرست باشد دستور بعد از وگرنه در صورت وجود اجرا می‌شود. بخش /وگرنه/ در دستور /اگر/ الزامی نیست.اگر اجرای چند دستور در دستور اگر مدنظر باشد می‌توانیم دستورات را در یک بلاک بنویسیم. یک بلاک از دستورات در زبان کاتی درون علامتهای آکولاد {  }  نوشته می‌شند.
اگر /شرط/ آنگاه { /دستور۱۰/. /دستور۱۱/. } وگرنه { /دستور۲۰/. /دستور۲۱/. }
البته این امکان وجود دارد تا از مدل دوم بلاک هم استفاده کنیم که در ادامه مشاهده می‌کنید.
اگر /شرط/ آنگاه : /دستور۱۰/. /دستور۱۱/. وگرنه : /دستور۲۰/. /دستور۲۱/. پایان اگر.

دستورات تکرار

دستور اگر-تکرارکن

اگر بخواهیم یک مجموعه از دستورات را بنا به شرایطی تکرار کنیم از دستور /اگر/ به همراه /تکرارکن/ استفاده می‌کنیم.اگر شرط درست باشد دستورات موجود در بدنه تکرار، تکرار می‌شود. در صورتی که در اولین بررسی شرط شرط نادرست باشد دستورات بعد از /وگرنه/ فقط یک بار انجام می‌شود.
اگر /شرط/ آنگاه تکرارکن { /دستورات بخش تکرار } وگرنه { /دستورات مربوط به عدم تکرار در اولین بررسی }
اگر /شرط/ آنگاه تکرارکن : /دستورات بخش تکرار وگرنه : /دستورات مربوط به عدم تکرار در اولین بررسی پایان تکرار.

دستور از- تکرار

اگر محدوده تکرار را بدانیم از دستور /از/ برای تکرار دستورات استفاده می‌کنیم. بعد از کلمه تکرار کن می‌توانیم نام متغییر تکرار را مشخص کنیم. که در مثال زیر نام /الف/ برای متغییر تکرار در نظر گرفته شده است. اگر این نام مشخص نشود نام پیش فرض /شمارنده/ برای متغییر تکرار توسط کاتی استفاده می‌شود.
از ۱ تا ۱۰۰ تکرارکن( الف){ مقدار الف را بنویس. }
ویا در مدل دوم بلاکی خواهیم داشت.
از ۱ تا ۱۰۰ تکرارکن (الف): مقدار الف را بنویس. پایان از.
مثال: برنامه نمایش اعداد ۱ تا ۱۰۰.
شروع. از ۱ تا ۱۰۰ تکرار کن( الف) { مقدار الف را بنویس. سرخط. } پایان.

دستور تعداد

در صورتی که تعداد تکرار مشخص باشد از دستور /تعداد/ استفاده می‌شود. یک متغییر داخلی به نام /شمارنده/ به صورت ضمنی توسط کاتی ساخته می‌شود. متغییر /شمارنده/ شماره تکرار را مشخص می‌کند.
تعداد الف مرتبه تکرارکن(ب){ }
مثال: برنامه نمایش اعداد ۱ تا ۱۰۰.
شروع. تعداد ۱۰۰ مرتبه تکرار کن( الف) : مقدار الف را بنویس. سرخط. پایان تکرار. پایان.
در مثال زیر برنامه نویس به جای نام /شمارنده/ نام /بشمار/ را تعیین کرده است. کافی است بعد از کلمه تکرار کن علامت دونقطه و سپس نام جایگزین برای /شمارنده/ انتخاب نماییم.
شروع. مقدار 5 را در الف بنویس. تعداد الف مرتبه تکرار کن(ب) { مقدار ب را بنویس. سرخط. }
دستورات تکرار به صورت تودرتو هم قابل استفاده است.مثال: جدول ضرب ۵ در ۵.
شروع. تعداد ۵ مرتبه تکرارکن ( الف) : تعداد ۵ مرتبه تکرارکن(ب) حاصل الف * ب : ۴ را بنویس. سرخط. پایان تعداد. پایان.

دستورات کنترل تکرار:

دستورت /توقف/ و /ادامه/ برای کنترل تکرار در داخل بدنه استفاده می‌شود. دستور /توقف/ تکرار را خاتمه می‌دهد و ادامه اجرا به دستور بعد از تکرار منتقل می‌شود.دستور /ادامه/ موجب انتقال اجرا به ابتدای دستور تکرار و در صورت برقرار بودن شرایط تکرار بعدی انجام می‌شود.
توقف.
ادامه.
برنامه زیر اعداد ۵۰ تا ۱۰۰ را در خروجی می‌نویسد. چون برای اعداد زیر ۵۰ تکرار بعدی اتفاق می‌افتد.
شروع. تعداد ۱۰۰ بار تکرار کن (الف) { اگر الف کمتراز ۵۰ آنگاه ادامه. مقدار الف را بنویس. سرخط. } پایان.

برنامه زیر اعداد ۱ تا ۵۰ را در خروجی می‌نویسد. چون در صورتی که مقدار الف از ۵۰ بیشتر شود اجرای دستور تکرار متوقف می‌شود.

شروع. تعداد ۱۰۰ بار تکرار کن ( الف) { اگر الف بیشتراز ۵۰ آنگاه توقف. مقدار الف را بنویس. سرخط. } پایان.

کلمات کلیدی

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

اعداد پیش تعریف شده:صفر، یک، دو، سه، چهار، پنج، شش، هفت، هشت، نه، ده، صد، هزار

توابع

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

تمام متغییرهایی که در درون تابع تعریف می‌شود،‌متغییرهای محلی تابع محسوب می‌شوند و یک تابع در حال حاضر به متغییرهای عمومی که در جای دیگری تعریف شده‌اند دسترسی ندارد.

تعریف تابع در زبان کاتی

برای تعریف تابع جدید در کاتی از کلمه کلیدی /تابع/ به همراه نام تابع و معرفی پارامترهای تابع استفاده می‌کنیم. الگوی تعریف تابع در زبان کاتی به صورت زیر است.
تابع نام_تابع (پارامتر۱ و پارامتر۲ و ...) { بدنه تابع }
ویا در نوع دوم بلاک در زبان کاتی تعریف تابع به صورت زیر می باشد.
تابع نام_تابع (پارامتر۱ و پارامتر۲ و ...) : بدنه تابع پایان تابع.
هر تابع در زبان کاتی می‌تواند یک مقدار برای نتیجه مشخص نماید. این کار توسط متغییر اتوماتیک به نام /نتیجه/ در درون تابع امکان پذیر است. یعنی فقط کافی است مقدار مورد نظر برای تابع را در متغییر /نتیجه/ ذخیره کنیم.در مثال زیر تابع مجموع تعریف شده است که مجموع دو عدد داده شده را محاسبه می‌کند.
تابع مجموع (الف و ب) : حاصل الف + ب را در نتیجه ذخیره کن. پایان تابع.
اگر نیاز باشد به هر دلیلی از بدنه تابع خارج شویم و به محل فراخوانی برگردیم می‌توانیم از دستور /بازگشت/ استفاده کنیم.مثال زیر تابع تشخیص یک مثلث با سه عدد داده شده می‌باشد.
//تابع تشخیص تشکیل مثلث تابع مثلث (الف و ب و ج) { مقدار صفر را در نتیجه بنویس. اگر الف + ب کمترمساوی ج آنگاه بازگشت. اگر ب + ج کمترمساوی الف آنگاه بازگشت. اگر الف + ج کمترمساوی ب آنگاه بازگشت. مقدار ۱ را در نتیجه بنویس. } اگر مثلث (3 و 4 و 5) آنگاه مقدار <این یک مثلث است> را بنویس.

فراخوانی تابع

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

تابع بازگشتی

تابعی که بتواند خود را فراخوانی کند تابع بازگشتی نامیده می‌شود. خوشبختانه زبان کاتی از توابع بازگشتی پشتیبانی می‌کند. برخلاف تصور نوشتن توابع بازگشتی کار ساده‌ای است ولی از طرف دیگر این گونه توابع حافظه بیشتری را برای اجرا به دلیل استفاده از فضای پشته سیستم استفاده می کنند.
//مثالی از تابع بازگشتی فاکتوریل تابع فاکتوریل( الف ) : مقدار ۱ را در نتیجه بنویس. اگر الف کمتراز ۲ آنگاه بازگشت. مقدار الف ضربدر فاکتوریل(الف منهای ۱) را در نتیجه بنویس. پایان تابع. حاصل فاکتوریل(۵) را بنویس.

برنامه‌های نمونه به زبان کاتی

تشخیص زوج بودن یک عدد

یک عدد زوج است اگر باقیمانده تقسیم عدد بر دو برابر صفر باشد.
شروع. مقدار الف را از ورودی بخوان. مقدار الف را بنویس. اگر (الف باقیمانده ۲) برابر صفر آنگاه بنویس | زوج است|. وگرنه بنویس | فرد است|. پایان.
25

تولید لیست اعداد کوچکتر از یک عدد

شروع. حاصل ۲۰ را در عدد ذخیره کن. تعداد عدد مرتبه تکرار کن (ب) { مقدار ب را در خروجی بنویس. سرخط. } پایان.

متغییر /ب/ در دستور تکرار شماره تکرار را نشان می‌دهد.

اعداد زوج کمتر از ۱۰۰

شروع. تعداد 100 مرتبه تکرار کن( ب) اگر (ب % دو) برابر صفر آنگاه : مقدار ب را بنویس . سرخط. پایان اگر. پایان.

حل معادله درجه ۲

برنامه زیر برای حل یک معادله درجه دو به زبان برنامه نویسی کاتی نوشته شده است. مقدار ضریبهای معادله بایستی در ورودی موجود باشد.
//حل معادله درجه ۲ شروع. مقدار الف و ب و س را از ورودی بخوان. اگر الف برابر صفر آنگاه : مقدار <خطا مقدار ضریب اول نباید صفر باشد> را بنویس. پایان. پایان اگر. متغییر حقیقی دلتا و ریشه۱ و ریشه۲. حاصل مربع(ب) منهای ۴ * الف * س را در دلتا ذخیره کن. اگر دلتا کمتراز صفر آنگاه : مقدار <خطا مقدار دلتا منفی شد ومعادله ریشه ندارد> را بنویس. پایان. پایان اگر. بنویس "مقدار دلتا=". مقدار دلتا را بنویس. سرخط. اگر دلتا برابر صفر آنگاه : حاصل قرینه(ب) تقسیم ( دو * الف) را در ریشه۱ ذخیره کن. مقدار ریشه۱ : 0.3 را بنویس. وگرنه: حاصل (قرینه(ب) منهای جذر(دلتا)) / ( 2.0 * الف) را در ریشه۱ ذخیره کن. حاصل (قرینه(ب) + جذر (دلتا)) / (2.0 * الف) را در ریشه۲ ذخیره کن. بنویس "معادله داری دو ریشه است:". سرخط. مقدار ریشه۱ : 8.3 را بنویس. سرخط. مقدار ریشه۲ : 8.3 را بنویس. پایان اگر. پایان.
1 -5 6

تست عدد اول

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

برنامه عدد اول بدون تابع

//الگوریتم تشخیص اول بودن یک عدد شروع. مقدار عدد را بخوان. اگر عدد کمتراز ۲ آنگاه : مقدار <اعداد کمتر از ۲ تست نمیشوند> را بنویس. پایان. پایان اگر. مقدار <عدد> و عدد را بنویس. از ۱ تا جذر (عدد) تکرارکن (الف) : اگر ( عدد % الف ) برابر ۰ آنگاه : مقدار | اول نیست| را بنویس. پایان. پایان اگر. پایان از. مقدار < یک عدد اول است> را بنویس. پایان.
37

برنامه عدد اول به کمک تابع

//این برنامه یک عدد اول را به کمک تابع عدداول تست می‌کند. تابع عدداول( عدد) : مقدار ۰ را در نتیجه بنویس. تعداد جذر (عدد) بار تکرار کن ( شمارنده) : اگر شمارنده برابر ۱ آنگاه ادامه. اگر (عدد % شمارنده) برابر صفر آنگاه بازگشت. پایان تعداد. مقدار ۱ را در نتیجه بنویس. پایان تابع. شروع. مقدار الف را از ورودی بخوان. اگر الف بزرگتراز یک آنگاه : اگر عدداول (الف) آنگاه بنویس الف و |یک عدد اول است|. وگرنه بنویس الف و |یک عدد اول نیست|. وگرنه: بنویس |مقدار داده شده برای ورودی نادرست است|. پایان اگر. پایان.
1001

یافتن بزرگترین عدد

تعدادی عدد در ورودی وجود دارد و قرار است بزرگترین عدد را در بین این اعداد بیابیم. در برنامه زیر فرض شده است که اولین ورودی نشان دهنده تعداد عدد می‌باشد.
شروع. مقدار الف را از ورودی بخوان. تعداد الف مرتبه تکرار کن (شمارش) : مقدار ب را از ورودی بخوان. اگر شمارش برابر یک آنگاه مقدار ب را در ماکزیمم ذخیره کن. وگرنه اگر ب بزرگتراز ماکزیمم آنگاه مقدار ب را در ماکزیمم ذخیره کن. پایان تعداد. مقدار ماکزیمم را در خروجی بنویس. پایان.
5 19 5 18 32 46

برنامه مرتب سازی حبابی

تعدادی عدد به صورت نامرتب در ورودی وجود دارد و قرار است برنامه مرتب سازی این اعداد به روش حبابی به صورت زیر است. در این برنامه باید ابتدا ورودی را در یک آرایه ذخیره نموده و سپس عملیات مرتب سازی را به روش حبابی انجام دهیم.
شروع. متغییر اعشاری آ(۱۰). از ۰ تا ۹ تکرار کن(الف) مقدار آ(الف) را از ورودی بخوان. مقدار "مرتب سازی حبابی\س" را بنویس. بنویس "قبل از مرتب سازی\س". از ۰ تا ۹ تکرار کن(الف) مقدار آ(الف):۴ را بنویس. از ۱ تا ۹ تکرار کن (الف) از ۰ تا ۹ منهای الف تکرار کن (ب): اگر آ(ب) بیشتراز آ(ب+۱) آنگاه مقدار آ(ب) و آ(ب+۱) را در آ(ب+۱) و آ(ب) بنویس. پایان از. سرخط. بنویس " بعد از مرتب سازی\س". از ۰ تا ۹ تکرار کن (الف) مقدار آ(الف):۴ را بنویس. پایان.
5 19 11 18 32 46 16 17 21 10