SCANF.IR

ورود زبان کاتی لیست مساله‌ها صفحه اصلی

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

مقدمه

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

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

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

دستور شروع

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

شروع.

دستور پایان

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

پایان.

متغییرها

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

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

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

در حال حاضر کاتی از نوع داده عددی اعشاری و رشته‌ای پشتیبانی می‌کند. یعنی همه اعدادی که در کاتی استفاده می‌شوند به صورت اعشاری می‌باشند.

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

مقدار |سلام| را بنویس. مقدار <سلام> را بنویس.

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

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

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

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

دستور سرخط:

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

دستور بنویس:

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

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

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

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

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

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

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

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

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

ترکیب شرطها

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

دستور شرطی

دستور اگر

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

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

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

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

دستور تعداد

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

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

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

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

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

دستور بروبه

تعریف برچسب

یک عدد به همراه دونقطه بعد از آن.

کلمات کلیدی

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

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

توابع

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

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

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

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

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

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

تابع بازگشتی

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

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

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

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

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

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

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

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

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

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

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

تست عدد اول

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

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

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

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

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

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

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