HW3-V2.pdf

‫تمرین سری سوم‬
‫تاریخ تحویل تمرین ‪30‬آبان ‪1393‬‬
‫درس مبانی برنامه سازی‬
‫‪CE153‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫توضیحات اولیه‬
‫آخرین مهلت تمرین‪ ،‬ساعت ‪ 23:59‬دقیقه ‪ 30‬آبان ‪ 1393‬است‪.‬‬
‫بعد از اتمام زمان ارسال‪ ،‬تا ‪ 3‬روز میتوانید تمرین های خود را با تاخیر ارسال نمایید‪.‬‬
‫به ازای هر روز تاخیر ‪ %20‬از نمره شما کسر می شود‪.‬‬
‫به ازای همه سوال های این تمرین هدف یاد گیری و درک مفهوم توابع و چگونگی‬
‫تعریف آنهاست؛ لذا نیازی به بررسی سرریز در سواالت نمی باشد و محدوده ورودی ها‬
‫به گونه ایست که سرریز رخ ندهد‪.‬‬
‫در کلیه سواالت استفاده از آرایه ها‪ ،‬اشارهگر ها و توابع به صورت بازگشتی غیر مجاز‬
‫است‪.‬‬
‫پاسخ هر چهار سوال را در جاج آپلود کنید‪ ،‬با این وجود تنها نمرهی سوال اول و دوم را‬
‫از جاج خواهید گرفت و نمره دو سوال دیگر‪ ،‬در تحویل حضوری داده خواهد شد‪.‬‬
‫سواالت خود را در پیاتزا مطرح کنید‪.‬‬
‫سوال اول‬
‫‪ .1‬ابتدا تابعی بنویسید به صورت زیر که باقیمانده بر عدد ‪ 11‬را بدون استفاده از عمل ‪ ٪11‬حساب کند‪.‬‬
‫;)‪int mode11 (int n‬‬
‫ورودی این تابع عددی است که میخواهیم باقی مانده آن بر ‪ 11‬را چک کنیم‪.‬‬
‫خروجی تابع هم باقیمانده عدد ‪ n‬بر ‪ 11‬است‪.‬‬
‫می دانیم برای به دست آوردن باقی مانده یک عدد بر ‪ 11‬میتوان رقم های آن را از سمت راست با عالمت‬
‫های به ترتیب ‪ +‬و ‪ -‬جدا کرد و سپس این ارقام را باهام جمع زد‪ .‬این کار را به قدری تکرار می کنیم تا‬
‫عددی بین ‪ 0‬تا ‪ 10‬به دست آید که در اصل همان باقی مانده بر ‪ 11‬است‪.‬‬
‫برای نمونه باقی مانده ‪ 2۷20۸۷912۴۶‬بر ‪ 11‬برابر است با ‪:‬‬
‫‪+۶ -۴ +1-2 +9- ۷+ ۸ -0+ 2 -۷ + 2=10‬‬
‫سپس با استفاده از این تابع برنامه ای بنویسید که عددی از کاربر بگیرد و باقی مانده آن بر ‪ 11‬را چاپ کند‪.‬‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫‪671257‬‬
‫‪4‬‬
‫‪123456‬‬
‫‪3‬‬
‫سوال دوم‬
‫می خواهیم برنامه ای بنویسیم که عددی دریافت کند و آن را تجزیه کند‪ .‬برای‬
‫این کار توابع زیر را پیاده سازی می کنیم‪:‬‬
‫;)‪int prime (int n‬‬
‫این تابع چک می کند که عدد ‪ n‬اول هست یا نه که در صورت اول بودن عدد ‪ 1‬و‬
‫در غیر اینصورت عدد ‪ 0‬را برمی گرداند‪.‬‬
‫;)‪int exponent (int n , int p‬‬
‫خروجی این تابع بزرگترین توان ‪ p‬موجود در ‪ n‬است‪.‬‬
‫حال با استفاده از این دو تابع عددی از کاربر بگیرید و آنرا به فرمت زیر به عوامل‬
‫اولش تجزیه کنید‪( :‬ترتیب چاپ عوامل اول به صورت نزولی باشد)‪.‬‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫‪30‬‬
‫‪5^1*3^1*2^1‬‬
‫‪24‬‬
‫‪3^1*2^3‬‬
‫سوال سوم‬
‫خاندان آقای مربعی همه به صورت شکل زیر هستند در سایز های متفاوت ولی همه در‬
‫سایز ‪ 4k+3‬با کمک ‪ ۴‬تابع برای چشم راست‪ ،‬چشم چپ‪ ،‬دهان و صورت برنامه ای‬
‫بنویسید که با گرفتن سایز رد مورد نظر قیافه او را بکشد‪.‬‬
‫هر کدام از تابع ها ‪ 3‬پارامتر ‪ x,y,l‬را میگیرد (‪ x,y‬مختصات گوشه باال و سمت چپ اعضای‬
‫صورت هستند‪).‬‬
‫در زیر ‪ 2‬فرد کوچک خاندان کشیده شده اند‪.‬‬
‫نسبت ها ی افقی چشم ها‪:‬‬
‫‪4k+3 --> 2, 2k-1, 1, 2k-1, 2‬‬
‫نسبت های عمودی‪:‬‬
‫* * * * * * * * * * * ‪4k+3 --> 1, 2k-1, 2, 2k-1, 2‬‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫^‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫^‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫“‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫^‬
‫*‬
‫^‬
‫*‬
‫“‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫*‬
‫سوال چهارم‬
‫میخواهیم حاصل انتگرال تابع ‪ x^2‬را در محدودهی صفر و یک تخمین بزنیم‪.‬‬
‫با تولید تعدادی نقطه تصادفی در محدوده ‪ 0<x<1‬و ‪ 0<y<1‬نسبت تعداد نقاط‬
‫زیر نمودار به تعداد کل نقاط را حساب کنید‪.‬‬
‫این نسبت حاصل انتگرال مورد نظر است‪.‬‬
‫بدین ترتیب تابع ‪ Integration‬را به گونه ای بنویسید که تعیین کند که تعداد‬
‫نقاط تصادفی باید حد اقل چند تا باشد تا به خطای حداکثر یک صدم برسیم‪.‬‬
‫;)(‪int Integration‬‬
‫سپس یک عدد از ورودی خوانده و به تعداد آن تابع ‪ Integration‬را صدا بزنید و‬
‫میانگین خروجی ها را به عنوان نتیجه نهایی چاپ کنید‪.‬‬
‫راهنمایی‬
‫در هدر فایل )‪gotoxy(x,y‬برای تغییر دادن نشان گر ماوس میتوانید از تابع‬
‫از این تابع پشتیبانی ‪ dev C++‬استفاده کنید‪ .‬اما با توجه به اینکه ‪conio.h‬‬
‫نمی کند می توانید این تابع را به صورت زیر پیاده سازی کنید‪.‬‬
‫>‪#include<windows.h‬‬
‫)‪void gotoxy(int x, int y‬‬
‫{‬
‫;‪Static HANDLE h= NULL‬‬
‫)‪if(!h‬‬
‫;)‪h = GeStdHandle(STD_OUTPUT_HANDLE‬‬
‫;} ‪COORD c = { x, y‬‬
‫;)‪SetConsoleCursorPosition(h,c‬‬
‫}‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬