HW3.pdf

‫تمرین سری سوم‬
‫تاریخ تحویل تمرین ‪ 17‬آبان‪1392‬‬
‫درس مبانی برنامهسازی‬
‫‪CE153‬‬
‫‪Sharif University of Technology‬‬
‫‪Fall 2013‬‬
‫‪1‬‬
‫توضیحات اولیه‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫آخرین مهلت تحویل تمرین‪ ،‬ساعت ‪ 23:59‬دقیقه روز جمعه‪ ،‬هفدهم آبان‬
‫ماه می باشد‪.‬‬
‫بعد از اتمام زمان ارسال‪ ،‬تا ‪ 3‬روز می توانید تمرین های خود را با تاخیر‬
‫ارسال نمایید‪.‬‬
‫به ازای هر ساعت تاخیر ‪ 1 %‬از نمره ی شما کسر می شود‪.‬‬
‫به ازای تمامی سواالت این تمرین‪ ،‬هدف تنها یادگیری و درک مفهوم‬
‫توابع و چگونگی تعریف و به کار بردن آنها می باشد‪ .‬لذا نیازی به بررسی‬
‫سرریز در سواالت نمی باشد و محدوده ورودی ها به گونه ای است که‬
‫سرریز رخ ندهد‪.‬‬
‫در کلیه سواالت‪ ،‬استفاده از آرایه ها‪ ،‬اشاره گر ها و توابع به صورت‬
‫بازگشتی غیر مجاز است‪.‬‬
‫‪2‬‬
‫سوال اول‬
‫می خواهیم شبه اول بودن یک عدد را بررسی کنیم‪ .‬عدد شبه اول عددی‬
‫است که تعداد مقسوم علیه های اول آن‪ ،‬اول باشد‪ .‬برای این منظور‪:‬‬
‫الف) تابعی بنویسید که عدد ‪ n‬را به عنوان ورودی بگیرد و تعداد مقسوم علیه‬
‫های آن را برگرداند‪.‬‬
‫ب) تابعی بنویسید که عدد ‪ n‬را بگیرد و اول بودن آن را مشخص کند‪.‬‬
‫ج) تابعی بنویسید که عدد ‪ n‬را گرفته و تعداد مقسوم علیه های اول آن را‬
‫برگرداند‪.‬‬
‫د) با استفاده از قسمت های قبل برنامه ای بنویسید عدد ‪ n‬را گرفته و‬
‫مشخص کند که شبه اول است یا خیر‪.‬‬
‫‪3‬‬
‫سوال اول‬
‫ورودی‪:‬‬
‫تنها یک ورودی داریم که عدد ‪ n‬است‪.‬‬
‫خروجی‪:‬‬
‫اگر ‪ n‬شبه اول بود عبارت ‪ YES‬در غیر این صورت ‪ NO‬چاپ کند‪.‬‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫‪12‬‬
‫‪YES‬‬
‫‪60‬‬
‫‪NO‬‬
‫‪91‬‬
‫‪YES‬‬
‫‪4‬‬
‫سوال دوم‬
‫الف) تابعی بنویسید که ‪ y ،x‬و ‪ r‬را به عنوان ورودی گرفته و به مرکزیت‬
‫)‪ (x, y‬یک مربع مورب با اندازه ضلع ‪ r‬با استفاده از کاراکتر * رسم کند‪.‬‬
‫مثال‪ :‬برای ‪ x = 7‬و ‪ y = 7‬و ‪ r = 7‬خروجی زیر را چاپ کند‪.‬‬
‫‪5‬‬
‫سوال دوم‬
‫ب) یک عدد از ورودی بگیرد و به تعداد آن به مرکزیت نقطه ای که قابل‬
‫نمایش باشد با فراخوانی تعداد مناسب و پارامتر های مناسب تابع قسمت الف‬
‫شکل زیر را چاپ کند‪.‬‬
‫مثال) برای ‪ n = 7‬یک مربع مورب با ‪ x = 7‬و ‪ y = 7‬و ‪ ، r = 7‬یک مربع‬
‫با همان مرکزیت و ‪ ،r = 5‬یک مربع با ‪ r = 3‬و یک مربع با ‪ r = 1‬چاپ‬
‫کند‪.‬‬
‫‪6‬‬
‫سوال سوم‬
‫در ریاضیات‪ ،‬سری تیلور یا گسترش تیلور نمایش یک تابع به صورت مجموع‬
‫بینهایت جمله است که از مشتقهای تابع در یک نقطه به دست میآید‪.‬‬
‫ریاضیدان انگلیسی‪ ،‬بروک تیلور‪ ،‬در سال ‪ 1715‬میالدی‪ ،‬مفهوم سری تیلور‬
‫را به طور رسمی معرفی کرد‪ .‬مرسوم است که توابع را حول یک نقطه با‬
‫تعدادی متناهی از جمالت سری تیلور تقریب بزنند‪ .‬قضیه تیلور مقدار خطای‬
‫این تقریب زنی را به صورت کمّی تخمین میزند‪ .‬هر تعداد متناهی از جمالت‬
‫اول سری تیلور به چندجملهای تیلور معروف است‪.‬‬
‫برای تابع سینوسی حول نقطه ‪ 0‬داریم ‪:‬‬
‫برنامهای بنویسید که با استفاده از بسط تیلور ‪ ،‬سینوس یک عدد ‪ float‬را‬
‫حساب کند‪.‬‬
‫‪7‬‬
‫سوال سوم‬
‫ورودی‪:‬‬
‫یک عدد ‪ float‬بر حسب درجه در ورودی می‌آید‬
‫خروجی‪:‬‬
‫)‪ Sin(x‬با استفاده از بسط تیلور‪.‬‬
‫توجه کنید که استفاده از توابع موجود در کتابخانه‌ی ‪ math.h‬مجاز نیست!‬
‫چرا که هدف پیاده سازی توابع مورد نیاز در این کتاب خانه و استفاده از آنها‬
‫می باشد‪.‬‬
‫دقت خروجی هم تا ‪ 2‬رقم اعشار باشد‪.‬‬
‫‪8‬‬
‫سوال چهارم‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫می خواهیم عدد پی را تخمین بزنیم‪.‬‬
‫فرض می کنیم اندازه ضلع مربع در شکل زیر ‪ 10‬می باشد‪.‬‬
‫به این ترتیب ابتدا تابع ‪ IsInCircle‬را بنویسید که مشخص کند یک‬
‫نقطه داخل ربع دایره قرار دارد یا خیر‪.‬‬
‫;)‪ int IsInCircle(float x, float y‬‬
‫سپس با تولید تعدادی نقطه تصادفی که در داخل مربع قرار دارند‪ ،‬نسبت‬
‫تعداد نقاط داخل ربع دایره به تعداد کل نقاط را حساب کنید‪.‬‬
‫این نسبت برابر است با یک چهارم عدد پی‪.‬‬
‫‪9‬‬
‫سوال چهارم‬
‫‪ ‬بدین ترتیب تابع ‪ Find‬را به گونه ای بنویسد که تعیین کنید که تعداد‬
‫نقاط تصادفی باید حداقل چند باشد تا به خطای یک صدم برسیم‪.‬‬
‫;)(‪ Int Find‬‬
‫‪ ‬سپس یک عدد از ورودی خوانده و به تعداد آن تابع ‪ Find‬را صدا بزنید و‬
‫میانگین خروجی ها را به عنوان نتیجه نهایی چاپ کنید‪.‬‬
‫‪10‬‬
‫راهنمایی‬
‫ در هدر فایل‬gotoxy(x, y) ‫ برای تغییر دادن نشانگر مواس می توانید از تابع‬
‫ از این تابع‬dev c++ ‫ اما با توجه به این که‬.‫ استفاده کنید‬conio.h
.‫پشتیبانی نمی کند می توانید این تابع را به صورت زیر پیاده سازی کنید‬









11
#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);
}