HW2.pdf

‫تمرین سری دوم درس مبانی برنامهسازی‬
‫مهلت ارسال‪ :‬یکشنبه ‪ ۲۷‬آبان ماه ‪۱۳۸۶‬‬
‫آیدین نصیریشرق )‪([email protected]‬‬
‫فهرست‬
‫نحوه ارسال ‪1 ................................................................‬‬
‫آدرس ارسال ‪1 .............................................................‬‬
‫عنوان ایمیل ‪1 ..............................................................‬‬
‫پیوست ایمیل ‪2 .............................................................‬‬
‫مهلت ارسال ‪2 ..............................................................‬‬
‫نحوه نمرهدهی به برنامه ‪3 ........................................................‬‬
‫نکات آخر ‪3 ...............................................................‬‬
‫تمرین اول‪ :‬تعداد مقسومعلیهها )‪ ۲۰‬نمره( ‪4 .................................................‬‬
‫تمرین دوم‪ :‬محل اعداد )‪ ۲۵‬نمره( ‪5 .....................................................‬‬
‫تمرین سوم‪ :‬بزرگترین مقلوب )‪ ۲۵‬نمره( ‪6 .................................................‬‬
‫تمرین چهارم‪ :‬مرتبسازی ماتریس )‪ ۳۰‬نمره( ‪7 ...............................................‬‬
‫تمرین سری دوم درس مبانی برنامهسازی‬
‫مهلت ارسال‪ :‬یکشنبه ‪ ۲۷‬آبان ماه ‪۱۳۸۶‬‬
‫نحوه ارسال‬
‫لطف ًا به موارد زیر در ارسال ایمیل پاسخهای خود دقت کنید‪ .‬بدیهیست که در صورت بروز هرگونه اشتباهی در این پروسه‪ ،‬نمره شما ممکن است اکیدًا‬
‫صفر بشود و اکیدًا هیچ اعتراضی در این زمینه پذیرفته نیست‪ .‬این اشتباهات شامل‬
‫•‬
‫ارسال ایمیل به هر آدرسی غیر از آدرس ذکر شده‬
‫•‬
‫درج عنوان اشتباه‬
‫•‬
‫نامگذاری نادرست فایلها )حتی اشتباه در نامگذاری حروف بزرگ و کوچک(‬
‫•‬
‫اشتباه در زیپکردن فایلها‪ ،‬نامگذاری نادرست فایل زیپ شده نهایی‪ ،‬اشتباه در ‪ attach‬کردن فایل زیپ‬
‫•‬
‫کامپایل نشدن برنامه توسط کامپایلر ‪) g++‬در ‪ MinGW‬یا ‪(DevCPP‬‬
‫•‬
‫خواندن و نوشتن اشتباه و زائد )هر گونه توضیح اضافه در خروجی یا قرار دادن )(‪ getchar‬در انتهای برنامه(‬
‫و موارد مشابه خواهد بود‪.‬‬
‫آدرس ارسال‬
‫برنامههای خود را‪ ،‬پس از تکمیل شدن و بررسی نکات ذیل بهصورت پیوست‪ 1‬به آدرس ‪ [email protected]‬ارسال کنید‪ .‬دقت کنید که بدنهی‬
‫ایمیل شما ممکنست به هیچوجه خوانده نشود‪ .‬پس از ارسال ایمیل‪ ،‬احتما ًال یک ایمیل از طرف ‪) Cpp Assistant‬همان آدرس فوق( به شما میآید‬
‫که مبنی بر دریافت ایمیل است‪.‬‬
‫توجه کنید که این آدرس ممکنست در طول مهلت ارسال توسط دستیاران درس چک نشود؛ پس اگر سؤال یا مشکلی داشتید‪ ،‬حتم ًا بهطور مستقیم با یکی‬
‫از دستیاران درس )ترجیح ًا ‪ ( [email protected]‬تماس بگیرید‪ .‬ضمن ًا از ارسال برنامههایتان توسط ایمیلی بهجز ایمیل شخصی خودتان‪ ،‬اکیدًا‬
‫خودداری کنید‪ .‬ایمیلهای خودتان را )حداقل( هر ‪ ۳‬روز یک بار چک کنید!‬
‫درصورتی که پس از فرستادن برنامههایتان )و پیش از اتمام موعد مقرّر( تصمیم به ارسال مجدد )و با تغییر( برنامههایتان گرفتید‪ ،‬ایمیل دیگری با همان‬
‫مشخصات و فرمتهای ایمیل قبلی به همان آدرس بزنید و در بدنهی ایمیل دلیل ارسال مجدد و تغییرات ایجاد شده را بنویسید‪ .‬دقت کنید در ایمیل‬
‫جدید باید تمامی فایلها را عین ًا مانند ایمیل اوّلتان و عین ًا با همان فرمت‪ ،‬قرار دهید‪ .‬ضمن ًا درصورتیکه دلیلتان برای ارسال موجه نباشد‪،‬‬
‫عنوان ایمیل‬
‫عنوان یا ‪ subject‬ایمیل شما باید به فرمت ‪ 86abcdef-2‬باشد که در آن به جای ‪ 86abcdef‬شماره دانشجوییتان را باید قرار دهید‪ .‬بهعنوان‬
‫مثال دانشجوی به شماره دانشجویی ‪ ۸۶۱۱۳۸۰۴‬باید عبارت ‪ 86113804-2‬را برای این سری از تمرینها )سری دوم( انتخاب کند‪.‬‬
‫ال حذف شده و نمرهشان صفر شود‪.‬‬
‫دقت کنید که ممکنست ایمیلهای ارسالی که فرمت عنوان را رعایت نکرداند‪ ،‬کام ً‬
‫‪Attachment‬‬
‫تمرین سری دوم درس مبانی برنامهسازی‬
‫ممکنست کسری از نمره را از دست بدهید‪.‬‬
‫‪1‬‬
‫‪1‬‬
‫پیوست ایمیل‬
‫ت‬
‫ظیر ‪،P22.cpp ،P21.cpp‬‬
‫های گفته شده )نظ‬
‫های خود را با نامها‬
‫برنامه ی‬
‫‪ (P24.cpp‬نوشته و در یک پپوشه‪ 2‬دلخواه ذخیره کنید‪ .‬سپس‬
‫‪P‬‬
‫‪ P23‬و‬
‫‪3.cpp‬‬
‫انتخاب تمامی فایل و زدن کلیک راست ماووس‪ ،‬از منوی‬
‫ب‬
‫با‬
‫‪Compressed Folder‬‬
‫‪Send‬‬
‫‪d to‬‬
‫گزینهی‬
‫سؤالی از طرف‬
‫در صورت پرسیدن س‬
‫را انتخاب کرده و ر‬
‫بزنید‪.‬‬
‫ویندوز‪ ،‬گگزینهی ‪ No‬را د‬
‫یک فایل شبیه‬
‫نهایت ًا فایل ‪ zip‬ساخته شود توسط خود ویندوز را به ک‬
‫در آن ‪ abcdef‬ساییر ارقام شماره‬
‫‪ 86abcdef-2‬تغغییر نام دهید که ر‬
‫‪2.zip‬‬
‫ال دانشجوی به شماره دانشجویی ‪ ۸۶۱۱۱۳۸۰۴‬باید نام‬
‫یی شماست‪ .‬مث ً‬
‫دانشجو ی‬
‫کنید که وجود‬
‫د‬
‫زیپشدهاش ‪ 86113804-2.zip‬باشد‪ .‬دقت‬
‫فایل پ‬
‫ده و اشتباه در نامگذاری فایل‪،‬‬
‫های اضافی غیر از ‪ ۴‬فایل خواستهشد‬
‫فایل ی‬
‫دن نمره بشود‪.‬‬
‫ست باعث کسر شد‬
‫ممکنس‬
‫ظیر ‪ (zip‬به طور‬
‫دقت کننید که ممکنست پسوند فایلها )نظ‬
‫فرض به شما نشان داده نشود و پس از تغییر نام فایل‪ ،‬به‬
‫پیش ض‬
‫طور خوددکار در انتهای نام شما )بدون اینکه ممتوجه شوید( درج‬
‫الف انتظار‪ ،‬نام واقعی فایل شما‬
‫شود! در اینصورت برخال‬
‫‪86113804-2.zip‬‬
‫‪p.zip‬‬
‫بود‪،‬‬
‫در‬
‫حالیکه‬
‫‪ 86113804-2‬ببه شما نمایش داده میشود! برای‬
‫‪2.zip‬‬
‫است منجر به صفر‬
‫جلوگیری از بروز این مشککل که ممکن ت‬
‫ی‬
‫شدن ننمره شما بشود‪ ،‬از منوی‬
‫‪Folder Option‬‬
‫‪T‬‬
‫‪Tools‬‬
‫باالیی‪ ،‬گزینهی‬
‫انتخاب کرده و سپس در پنجرهای که باز‬
‫ب‬
‫را‬
‫میشود‪ ،‬از قسمت‬
‫‪known file types‬‬
‫‪View‬‬
‫گزینهی‬
‫‪Hide extension‬‬
‫‪ns for‬‬
‫را )پاایینترین گزینهی قابل رؤیت!( غیر‬
‫نید )تیک آن را برددارید(‪ .‬اکنون میتووانید مطمئن باشد‬
‫فعال کنی‬
‫هستند که میبینید!‬
‫د‬
‫که نام فاایلها همانی‬
‫تمرین سری دوم درس مبانی برنامهسازی‬
‫‪2‬‬
‫مهلت ارسال‬
‫شنبه‪ ۲۷ ،‬آبان ماه است‪ .‬پس از این تتاریخ‪ ،‬شما ‪ ۲۴‬ساععت وقت دارید تا ابا کسر ‪ ۲۰٪‬از‬
‫مهلت شمما برای ارسال این تمارین ساعت ‪ ۲۳:۵۹:۵۹‬روز یک شن‬
‫اینترنت‪ ،‬داشتن تمرین‪ ،‬کووئیز و میانترم‬
‫‪،‬‬
‫شدن کارت‬
‫اینترنت خوابگاه‪ ،‬تمام ش‬
‫ت‬
‫سابی‪ ،‬تمارین خود را با تأخیر ارسال ککنید‪ .‬دالیلی نظیر ققطع بودن‬
‫نمره اکتس‬
‫نمیسازند‪.‬‬
‫فوت اقوام درجه ‪ ۲‬به باال و ‪ ...‬همگی غیرموجه بوده و هیچ ععذری را پذیرفته ی‬
‫ن‪ ،‬خواب ماندن‪ ،‬ت‬
‫های دیگر‪ ،‬فراموشی‪ ،‬ببرگشتن از شهرستان‬
‫درس ی‬
‫‪ Folder‬یا ‪Directory‬‬
‫‪2‬‬
‫نحوه نمرهدهی به برنامه‬
‫برنامههای خود را با نامهای خواسته شده ذخیره و آمادهسازی کنید و حتم ًا نام‪ ،‬نام خانوادگی و شماره دانشجویی خود را )با حروف انگلیسی(‬
‫باالی هر برنامه به صورت کامنت قرار دهید‪ .‬همچنین رویه اجرای برنامه و تمام متغیرها و توابع خود را با قرار دادن کامنتهای الزم حتم ًا خوانا و واضح‬
‫کنید‪ .‬تخطی از این موارد ممکنست باعث شود شما درصدی از نمره را از دست بدهید‪.‬‬
‫معیار نمرهدهی به برنامه صرفاً‪ ،‬صحّت عملکرد و سرعت اجرای برنامه میباشد‪ ،‬امّا خوانایی و وضوح کد اکیدًا توصیه میشود‪ .‬دقّت کنید که یک برنامهی‬
‫طوالنی ولی دقیق و کارا بسیار با اهمیتتر از یک برنامهی کثیف)!( و فشرده است‪.‬‬
‫در بعضی از برنامههای خواسته شده‪ ،‬محدودیتی برای ورودیها ذکر شده است‪ .‬با این محدودیتها و محاسبهی تعداد اعمال برنامهشما‪ ،‬و این فرض که در هر‬
‫ثانیه بین ‪ ۱۰۶‬تا ‪ ۱۰۹‬دستور توسط کامپیوتر انجام میشود‪ ،3‬شما میتوانید تقریبی از زمان اجرای برنامهی خود بهدست بیاورید‪.‬‬
‫به هر یک از برنامههای شما‪ ۱۰ ،‬ورودی مختلف داشته میشود و برنامهی شما باید در حداکثر ‪ ۱‬ثانیه )برای هر ورودی( پاسخ صحیح را ارائه داده و‬
‫به پایان برسد‪ ،‬در غیر اینصورت‪ ،‬نمرهی آن ورودی را نمیگیرید‪ .‬با این وصف‪ ،‬حلقهی زیر برای ‪۱, ۰۰۰, ۰۰۰, ۰۰۰‬‬
‫‪ ،‬بیشتر از ‪ ۱‬ثانیه طول‬
‫میکشد و نتیجت ًا الگوریتم مناسبی برای محاسبهی »باقیماندهی مجموع اعداد ‪ ۱‬تا ‪ n‬بر ‪ «۱۰۰۰‬نمیباشد!‬
‫;‪int sum = 0‬‬
‫)‪for (int i=0; i<n; i++‬‬
‫;‪sum = (sum + i) % 1000‬‬
‫بد نیست این کد را نوشته و ببینید حداکثر مقدار‬
‫که در حدود یک ثانیه کار به پایان میرسید‪ ،‬چه توانی از ‪ ۱۰‬است؟!‬
‫نکات آخر‬
‫پیش از ارسال برنامهها‪ ،‬یکبار دیگر به نکات زیر توجه کرده و آنها را در هر ‪ ۴‬برنامهی خود بررسی کنید‪.‬‬
‫•‬
‫از خواندن و نوشتن اضافی )نظیر نوشتن ‪ The result is: 10‬به جای ‪ 10‬و گذاشتن )(‪ getchar‬در پایان برنامه( بپرهیزید‪.‬‬
‫•‬
‫اسم برنامههایتان صحیح )بدون پسوند اضافه( باشد‪ .‬توجه کنید که ‪ P21.cpp‬با ‪) p21.cpp‬غلط( و ‪) P21.CPP‬غلط( متفاوت است!‬
‫•‬
‫نام و نام خانوادگی و توضیحات اضافی را بهصورت ‪ comment‬در برنامههایتان قرار داده باشد‪.‬‬
‫•‬
‫از دوستانتان و دستیاران درس کمک بگیرید ولی هرگز کُپ نزنید!‬
‫دقت کنید که رعایت نکردن هر یک از ‪ ۴‬نکتهی فوق ممکنست باعث از دست دادن تمام یا بخشی از نمرهی شود‪.‬‬
‫در صورت مشاهدهی کُپ یا کدی که توسط خود دانشجو نوشته نشده باشد‪ ،‬نمرهی فرد یا افراد خاطی )منجمله ُکپدهنده!( به ‪ -۱‬تبدیل خواهد شد‪ .‬در‬
‫صورتی که از شخص خاص کمک الگوریتمی گرفتهاید‪ ،‬حتم ًا این نکته را )نام فرد کمک گیرنده و توضیح کمک وی( بهصورت ‪ comment‬در ابتدای برنامهی‬
‫خود بنویسید‪.‬‬
‫تمرین سری دوم درس مبانی برنامهسازی‬
‫‪ 3‬این اعداد به نوع کامپیوتر‪ ،‬نوع دستورات و موارد زیادی وابستهاند‪ ،‬اما به طور تقریبی صحیحاند‪.‬‬
‫‪3‬‬
‫تمرین ا ول ‪ :‬ت عداد مقسوم علیه ها ) ‪ ۲۰‬نمره (‬
‫برنامه شما برای این تمرین باید با نام ‪ P21.cpp‬نوشته و ذخیره شود‪.‬‬
‫برنامهای بنویسید که یک عدد طبیعی‬
‫•‬
‫از ورودی بخواند و تعداد مقسومعلیههایش را چاپ کند!‬
‫عدد دادهشده در بازهی ‪ ۱, ۱, ۰۰۰, ۰۰۰, ۰۰۰‬قرار دارد‪.‬‬
‫توجه کنید که شبهبرنامه زیر بیشتر از یک ثانیه طول میکشد و احتما ًال حدود ‪ ۵۰‬درصد نمره را میگیرد!‬
‫;‪cin >> n‬‬
‫;‪int divisors = 0‬‬
‫)‪for (int i=1; i<=n; i++‬‬
‫)‪if (n % i == 0‬‬
‫;‪divisors++‬‬
‫;‪cout << divisors << endl‬‬
‫پس دنبال الگوریتم سریعتری بگردید!‬
‫خروجی صحیح‬
‫مثال ورودی‬
‫‪36‬‬
‫مثال ورودی‬
‫خروجی صحیح‬
‫‪923013000‬‬
‫تمرین سری دوم درس مبانی برنامهسازی‬
‫‪4‬‬
‫‪9‬‬
‫‪768‬‬
‫تمرین د وم ‪ :‬محل اعداد ) ‪ ۲۵‬نمره (‬
‫برنامه شما برای این تمرین باید با نام ‪ P22.cpp‬نوشته و ذخیره شود‪.‬‬
‫فرض کنید اعداد طبیعی به صورت زیر در ربع اوّل صفحهی مختصات چیده شدهاند‪ .‬در این شکل‪ ،‬در سطر ام‪ ،‬عدد نوشته شدهاست که از نقطهی‬
‫‪ ,‬در آن سطر شروع شده و تا نقطهی ‪1‬‬
‫‪ , 2‬ادامه خواهند داشت‪.‬‬
‫برنامهای بنویسید که دو عدد ‪ x‬و سپس ‪ y‬را )که مختصات نقطهی‬
‫‪,‬‬
‫هستند( از ورودی بگیرد و عددی که در آن نقطه نوشته شده است را در خروجی‬
‫بنویسد‪ .‬در صورتی که در این نقطه‪ ،‬با این روش چینش عددی نوشته نشده باشد عبارت ‪ No Number‬باید نوشته شود‪) .‬دقت کنید که حروف ‪ N‬در این‬
‫دو کلمه بزرگ بوده و سایر حروف کوچکاند؛ پس نوشتن ‪ No number‬غلط است(‪.‬‬
‫•‬
‫اعداد ورودی در بازهی ‪ ۱, ۴۰۰۰۰‬قرار دارند‪.‬‬
‫‪5‬‬
‫‪4‬‬
‫‪10‬‬
‫‪9‬‬
‫‪8‬‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪4‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪8‬‬
‫‪7‬‬
‫‪6‬‬
‫مثال ورودی‬
‫‪1‬‬
‫‪0‬‬
‫خروجی صحیح‬
‫‪5 3‬‬
‫مثال ورودی‬
‫‪6‬‬
‫خروجی صحیح‬
‫تمرین سری دوم درس مبانی برنامهسازی‬
‫‪4 2‬‬
‫‪No Number‬‬
‫‪5‬‬
‫تمرین س وم ‪ :‬بزرگ ترین م قلوب ) ‪ ۲۵‬نمره (‬
‫برنامه شما برای این تمرین باید با نام ‪ P23.cpp‬نوشته و ذخیره شود‪.‬‬
‫مقلوب عدد صحیح‬
‫عددی است که از برعکس کردن ارقام آن بهدست میآید‪ .‬برای مثال مقلوب عدد ‪ ،۱۹۵‬عدد ‪ ۵۹۱‬بوده و مقلوب عدد ‪ ،۴۳۰۰‬عدد ‪۳۴‬‬
‫است‪.‬‬
‫برنامهای بنویسید که تعدادی عدد طبیعی را بخواند و مشخص کند که مقلوب کدام یک از مقلوب بقیه سایرین بیشتر است‪.‬‬
‫در ورودی ابتدا‬
‫)تعداد اعداد( آمده است‪ .‬سپس در هر یک از‬
‫سطر بعدی‪ ،‬در هر سطر یک عدد آمده است‪.‬‬
‫در تنها سطر خروجی‪ ،‬عددی که مقلوب آن از سایرین بیشتر است را بنویسید‪.‬‬
‫•‬
‫میدانیم ‪۱۰۰, ۰۰۰‬‬
‫‪ ۱‬و اعداد دادهشده در بازهی ‪ ۱, ۱۰۰, ۰۰۰, ۰۰۰‬قرار دارند‪.‬‬
‫خروجی صحیح‬
‫مثال ورودی‬
‫‪18‬‬
‫‪3‬‬
‫‪17‬‬
‫‪18‬‬
‫‪55‬‬
‫خروجی صحیح‬
‫مثال ورودی‬
‫‪5‬‬
‫‪1920‬‬
‫‪322‬‬
‫‪211‬‬
‫‪99‬‬
‫‪8010‬‬
‫تمرین سری دوم درس مبانی برنامهسازی‬
‫‪6‬‬
‫‪1920‬‬
‫تمرین چ هارم ‪ :‬مرتب سازی ماتریس ) ‪ ۳۰‬نمره (‬
‫برنامه شما برای این تمرین باید با نام ‪ P24.cpp‬نوشته و ذخیره شود‪.‬‬
‫)با‬
‫فرض کنید یک ماتریس‬
‫بگیرد‪ .‬پس از آن در‬
‫سطر و‬
‫سطر بعدی‪ ،‬در هر سطر‬
‫ستون( از اعداد صحیح تصادفی پر شده است‪ .‬برنامهای بنویسید که از ورودی ابتدا اعداد‬
‫عدد بخواند که عدد اُم در سطر اُم‪ ،‬درایهی‬
‫پس از خواندن ورودی‪ ،‬برنامهی شما باید دو ماتریس‬
‫ماتریس‬
‫و‬
‫‪,‬‬
‫و سپس‬
‫ماتریس است‪.‬‬
‫را در خروجی )مشابه ورودی اما بدون نوشتن سایز ماتریس( چاپ کنید که‬
‫ال بهصورت صعودی مرتب شدهاند و‬
‫است که سطرهای آن مستق ً‬
‫را‬
‫نیز مشابه ًا همان ماتریس‬
‫همان‬
‫ال بهصورت‬
‫است که ستونهای آن مستق ً‬
‫صعودی مرتب شدهاند‪.‬‬
‫بین هر دو درایهی هر یک از دو ماتریس یک فاصلهی خالی‪ 4‬بگذارید‪ .‬بین خو ِد دو ماتریس نیز یک خط خالی چاپ کنید‪.‬‬
‫•‬
‫میدانیم ‪۱۰۰‬‬
‫‪,‬‬
‫‪ ۱‬و مقادیر درایهها اعداد صحیح در بازهی ‪۱۰۰, ۱۰۰‬‬
‫قرار دارند‪.‬‬
‫در این سؤال از هر الگوریتم مرتبسازی که بخواهید )بهجز توابع مرتبسازی خود ‪ (C++‬میتوانید استفاده کنید!‬
‫خروجی صحیح‬
‫مثال ورودی‬
‫‪5 8‬‬
‫‪2 6‬‬
‫‪2 2‬‬
‫‪8 5‬‬
‫‪2 6‬‬
‫‪2 5‬‬
‫‪8 6‬‬
‫خروجی صحیح‬
‫مثال ورودی‬
‫‪3‬‬
‫‪11‬‬
‫‪1‬‬
‫‪6‬‬
‫‪3‬‬
‫‪2‬‬
‫‪7‬‬
‫‪3‬‬
‫‪5‬‬
‫‪4‬‬
‫‪9‬‬
‫‪8‬‬
‫‪1‬‬
‫‪9‬‬
‫‪1‬‬
‫‪3‬‬
‫‪6‬‬
‫‪11‬‬
‫‪2‬‬
‫‪3‬‬
‫‪5‬‬
‫‪7‬‬
‫‪1‬‬
‫‪8‬‬
‫‪9‬‬
‫‪9‬‬
‫»موفق باشید!«‬
‫‪Space‬‬
‫‪4‬‬
‫تمرین سری دوم درس مبانی برنامهسازی‬
‫‪9‬‬
‫‪11‬‬
‫‪3‬‬
‫‪9‬‬
‫‪3‬‬
‫‪8‬‬
‫‪1‬‬
‫‪6‬‬
‫‪2‬‬
‫‪7‬‬
‫‪1‬‬
‫‪5‬‬
‫‪7‬‬