زبان برنامه نویسی کاتی
مقدمه
شاید برای خیلی از افراد مخصوصا نوآموزان برنامهنویسی، جالب باشد که بخواهند با زبان فارسی برنامه نویسی نمایند. ما این امکان را برای این افرا مهیا کردهایم. راه حل ما استفاده از زبان برنامه نویسی کاتی است.
کاتی یک زبان برنامهنویسی انعطاف پذیر و قدرتمند به زبان فارسی میباشد. کاتی به منظور یادگیری و درک برنامهنویسی نوشته شده است و میتواند ابزار مناسبی برای شروع یادگیری برنامهنویسی باشد. استفاده از کاتی نیازی به دانستن زبان انگلیسی ندارد.
زبان کاتی در وب سایت 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