HW3.pdf

‫تمرین سری سوم‬
‫تاریخ تحویل تمرین ‪ 17‬آبان ‪1392‬‬
‫درس مبانی برنامهسازی‬
‫‪CE153‬‬
‫‪Sharif University of Technology‬‬
‫‪Fall 2013‬‬
‫‪1‬‬
‫توضیحات اولیه‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫آخرین مهلت تحویل تمرین‪ ،‬ساعت ‪ 23:59‬دقیقه روز جمعه‪ ،‬هفدهم آبان‬
‫ماه می باشد‪.‬‬
‫بعد از اتمام زمان ارسال‪ ،‬تا ‪ 3‬روز می توانید تمرین های خود را با تاخیر‬
‫ارسال نمایید‪.‬‬
‫به ازای هر ساعت تاخیر ‪ 1 %‬از نمره ی شما کسر می شود‪.‬‬
‫به ازای تمامی سواالت این تمرین‪ ،‬هدف تنها یادگیری و درک مفهوم‬
‫توابع و چگونگی تعریف و به کار بردن آنها می باشد‪ .‬لذا نیازی به بررسی‬
‫سرریز در سواالت نمی باشد و محدوده ورودی ها به گونه ای است که‬
‫سرریز رخ ندهد‪.‬‬
‫در کلیه سواالت‪ ،‬استفاده از آرایه ها‪ ،‬اشاره گر ها و توابع به صورت‬
‫بازگشتی غیر مجاز است‪.‬‬
‫‪2‬‬
‫سوال اول‬
‫‪ ‬الف) تابع ‪ fact‬را بنویسید که فاکتوریل یک عدد ورودی را حساب کند‪.‬‬
‫;)‪ int fact(int n‬‬
‫‪ ‬ب) با استفاده از قسمت الف‪ ،‬تابع ‪ Comb‬را به گونه ای بنویسد که ترکیب دو‬
‫عدد ورودی را حساب کند‪.‬‬
‫;)‪ int Comb(int n, int r‬‬
‫‪ ‬ج) با استفاده از قسمت ب‪ ،‬تابع ‪ calc‬را پیاده سازی کنید تا عبارت زیر را‬
‫حساب کند‪.‬‬
‫𝑖‬
‫𝑖‬
‫𝑗 ‪𝑗=1‬‬
‫𝑛‬
‫‪𝑖=1‬‬
‫‪‬‬
‫;)‪ int calc(int n‬‬
‫‪ ‬د) سپس برنامه ای بنویسید که عدد ‪ n‬را از ورودی گرفته و با استفاده از تابع‬
‫قسمت ج نتیجه را نمایش دهد‪.‬‬
‫‪3‬‬
‫سوال اول‬
‫‪ ‬ورودی ‪ :‬یک عدد به عنوان ‪ n‬وارد می شود‪ .‬محدوده آن به صورتی است‬
‫که خروجی سرریز نشود‪.‬‬
‫‪ ‬خروجی ‪ :‬نتیجه به عنوان خروجی به صورت یک عدد چاپ شود‪.‬‬
‫‪4‬‬
‫سوال اول‬
‫‪ ‬ورودی نمونه‪:‬‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪3‬‬
‫‪12‬‬
‫‪5‬‬
‫سوال دوم‬
‫‪ ‬می خواهیم تابعی بنویسید که یک عدد را از ورودی گرفته و مشخص کند‬
‫آیا شرط زیر برایش برقرار است یا خیر‪.‬‬
‫‪ ‬شرط مورد نظر به این صورت است که اگر ‪ n‬عدد ورودی باشد و 𝑖𝑃 عامل‬
‫اول ‪i‬ام و 𝑖𝑏 توان 𝑖𝑃 باشد‪ ،‬آنگاه 𝑖𝑏 بر ‪ 𝑃𝑖+1‬بخش پذیر باشد‪ .‬به عبارت‬
‫دیگر‪:‬‬
‫‪𝑃𝑖 𝑏𝑖 where 𝑃𝑖 > 𝑃𝑗 for i > j‬‬
‫‪ then 𝑏𝑖 % 𝑃𝑖+1 == 0‬‬
‫= ‪ If n‬‬
‫‪ ‬ورودی و خروجی‪:‬‬
‫در تنها خط ورودی عدد ‪ n‬آمده است‪ .‬در تنها خط خروجی باید ‪ Yes‬یا‬
‫‪ No‬چاپ شود‪.‬‬
‫‪6‬‬
‫سوال دوم‬
‫‪ ‬نمونه ی ورودی و خروجی‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫‪9720‬‬
‫‪Yes‬‬
‫‪6272‬‬
‫‪Yes‬‬
‫‪48009024‬‬
‫‪Yes‬‬
‫‪38880‬‬
‫‪No‬‬
‫‪ ‬در مثال باال داریم‬
‫‪51 * 35 * 23 = 9720‬‬
‫‪72 * 27 = 6272‬‬
‫‪73 * 37 * 26 = 48009024‬‬
‫‪51 * 35 * 25 = 38880‬‬
‫‪7‬‬
‫سوال سوم‬
‫‪ ‬تابعی بنویسید که پارامتر های ‪ d ،r ،y ،x‬را دریافت کند و با توجه به‬
‫مقادیر آنها مثلثی از مکان شروع )‪ (x, y‬به ضلع ‪ r‬بکشد به طوری که ‪d‬‬
‫جهت آن را مشخص می کند‪.‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫‪d‬‬
‫شکل مورد‬
‫نظر برای‬
‫‪X=1‬‬
‫‪Y=1‬‬
‫‪R=4‬‬
‫‪ ‬برای مقدار ‪ d‬می توانید هر مقدار دیگر را در نظر بگیرید‪.‬‬
‫‪8‬‬
‫سوال سوم‬
‫‪ ‬سپس عدد ‪ n‬را به عنوان طول ضلع مثلث گرفته و با ‪ 4‬بار فراخوانی با‬
‫مقادیر مناسب برای پارامتر ها شکل زیر (‪)n = 5‬چاپ شود‪.‬‬
‫‪9‬‬
‫سوال چهارم‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫می خواهیم عدد پی را تخمین بزنیم‪.‬‬
‫فرض می کنیم اندازه ضلع مربع در شکل زیر ‪ 10‬می باشد‪.‬‬
‫به این ترتیب ابتدا تابع ‪ IsInCircle‬را بنویسید که مشخص کند یک‬
‫نقطه داخل ربع دایره قرار دارد یا خیر‪.‬‬
‫;)‪ int IsInCircle(float x, float y‬‬
‫سپس با تولید تعدادی نقطه تصادفی که در داخل مربع قرار دارند‪ ،‬نسبت‬
‫تعداد نقاط داخل ربع دایره به تعداد کل نقاط را حساب کنید‪.‬‬
‫این نسبت برابر است با یک چهارم عدد پی‪.‬‬
‫‪10‬‬
‫سوال چهارم‬
‫‪ ‬بدین ترتیب تابع ‪ Find‬را به گونه ای بنویسد که تعیین کنید که تعداد‬
‫نقاط تصادفی باید حداقل چند باشد تا به خطای یک صدم برسیم‪.‬‬
‫;)(‪ Int Find‬‬
‫‪ ‬سپس یک عدد از ورودی خوانده و به تعداد آن تابع ‪ Find‬را صدا بزنید و‬
‫میانگین خروجی ها را به عنوان نتیجه نهایی چاپ کنید‪.‬‬
‫‪11‬‬
‫راهنمایی‬
‫ در هدر فایل‬gotoxy(x, y) ‫ برای تغییر دادن نشانگر مواس می توانید از تابع‬
‫ از این تابع‬dev c++ ‫ اما با توجه به این که‬.‫ استفاده کنید‬conio.h
.‫پشتیبانی نمی کند می توانید این تابع را به صورت زیر پیاده سازی کنید‬









12
#include <windows.h >
void gotoxy(int x, int y)
{
static HANDLE h = NULL;
if(!h)
h = GetStdHandle(STD_OUTPUT_HANDLE);
COORD c = { x, y };
SetConsoleCursorPosition(h,c);
}