A4.pdf

‫بسماهللالرحمنالرحیم‬
‫برنامهسازی پیشرفته‬
‫‪Advanced Programming‬‬
‫دانشکده مهندسی کامپیوتر‬
‫مدرس‪ :‬آرش توکل‬
‫تمرین شماره ‪4‬‬
‫تاریخ تحویل‪ 13 :‬اردیبهشت‬
‫قبل از انجام تمرینها موارد زیر را به دقت مطالعه کنید‪:‬‬
‫‪ ‬در خط اوّل هر یک از برنامهها شمارهي دانشجویی خود را به صورت زیر بنویسید‪:‬‬
‫‪// ID: your Student ID‬‬
‫‪ ‬بعد از نوشتن همهي برنامهها فایل مربوطه را در یک پوشه با نام ‪ assignment#4_stdID‬قرار دهید‬
‫(که در آن ‪ stdID‬شمارهي دانشجویی شما میباشد) و سپس این پوشه را فشرده کنید‪ .‬فایل فشرده شده‬
‫را به آدرس ‪ ap.2013.spring@gmail.com‬ارسال نمایید‪.‬‬
‫‪ ‬عنوان ایمیل باید به صورت ‪ assignment#4_stdID‬باشد‪ ،‬که در آن ‪ stdID‬شماره دانشجویی شما‬
‫است‪.‬‬
‫‪ ‬اشتباه در نامگذاري فایل برنامهها و فایل فشرده شده و یا عنوان ایمیل فرستاده شده‪ ،‬موجب عدم تصحیح‬
‫تمرین شما میشود‪.‬‬
‫‪ ‬نحوهي ورودي گرفتن و خروجی دادن برنامههاي شما باید دقیقاً به صورت گفته شده در مسئله باشد‪.‬‬
‫‪ ‬به هر یک از برنامههاي شما تعدادي تست داده خواهد شد‪ .‬توصیه میشود که حتماً یک بار تستهاي نمونه‬
‫را به برنامههایتان بدهید‪.‬‬
‫‪ ‬گذاشتن کامنت براي قسمتهاي مختلف برنامههایتان و نامگذاري مناسب متغیرها را فراموش نکنید‪ .‬به‬
‫خصوص توابع و متغییرهاي اصلی برنامهتان‪ .‬کامنتگذاري جزو نمرهاي از هر سؤال است‪.‬‬
‫‪ ‬به ازاي هر روز تأخیر در ارسال برنامهها‪ %02 ،‬از نمرهي این تمرین کاسته خواهد شد‪.‬‬
‫‪ ‬به برنامههاي مشابه به میزان نمرهي سؤال‪ ،‬نمرهي منفی تعلق خواهد گرفت‪.‬‬
‫‪ ‬هرگونه سؤال در مورد تمرینات را با عنوان ]‪ assignment#4_question[x‬که ]‪ [x‬شمارهي مسئلهي‬
‫مورد نظر است‪ ،‬به آدرس ‪ ap_2013_spring@googlegroups.com‬ارسال کنید‪.‬‬
‫‪ .1‬مرتبسازی سریع (‪)quickSort.cpp‬‬
‫در این تمرین شما باید الگوریتم مرتبسازي سریع را با استفاده از کتابخانه ‪ pthread‬پیادهسازي کنید‪ .‬در هر گام از‬
‫مرتبسازي براي مرتب کردن دو زیر آرایه جدید از دو ‪ Thread‬استفاده کنید‪ .‬در خروجی برنامه کافی است تا آرایه‬
‫مرتب شده را نمایش دهید‪.‬‬
‫نکته ‪ :3‬نوشتن این برنامه بدون استفاده از کتابخانه ‪ pthread‬هیچ نمرهاي در بر نخواهد داشت‪.‬‬
‫نکته ‪ :0‬فایل ‪ quicksort.cpp‬را بفرستید‪.‬‬
‫نمونه ورودي و خروجی ‪:‬‬
‫در خط اول اندازه آرایه و در خط بعدي عناصر آرایه داده میشود‪.‬‬
‫‪Input‬‬
‫‪12‬‬
‫‪3 9 15 17 2 14 19 8 4 3 16 5‬‬
‫‪Output‬‬
‫‪2 3 3 4 5 8 9 14 15 16 17 19‬‬
‫‪)elementary_set.h( Template .2‬‬
‫در این سوال باید داده ساختار زیر را به صورت ‪ Template‬پیادهسازي کنید‪.‬‬
‫‪class elementary_set‬‬
‫این داده ساختار باید شبیه مجموعه رفتار کند‪ .‬براي این کالس توابعی با نام‪ ،‬ورودي و خروجیهاي زیر پیادهسازي‬
‫کنید‪:‬‬
‫)( ‪elementary_set‬‬
‫این ‪ constructor‬باید یک مجموعه تهی ایجاد کند‪.‬‬
‫)& ‪elementary_set (const elementary_set‬‬
‫یک ‪ copy constructor‬است‪.‬‬
‫)(‪~ elementary_set‬‬
‫یک ‪ destructor‬است‪.‬‬
‫)(‪clear‬‬
‫باید همه اعضاي مجموعه را حذف کند‪ ( .‬یعنی آن مجموعه به مجموعه تهی تبدیل میشود‪) .‬‬
‫) & ‪elementary_set & operator = ( const elementary_set‬‬
‫تنها توضیح الزم این است که این تابع باید ‪ refrence‬به خود همان ‪ object‬را برگرداند‪.‬‬
‫‪bool operator == ( const elementary_set & ) const‬‬
‫بررسی میکند که دو مجموعه دقیقا یکی هستند یا خیر‪.‬‬
‫‪unsigned int size ( ) const‬‬
‫تعداد عناصر دورن مجموعه را باز میگرداند‪.‬‬
‫‪type_of_data get_min () const‬‬
‫کوچکترین عنصر درون مجموعه را باز میگرداند‪ ( .‬با فرض ناتهی بودن مجموعه )‬
‫‪type_of_data get_max () const‬‬
‫کوچکترین عنصر درون مجموعه را باز میگرداند‪ ( .‬با فرض ناتهی بودن مجموعه )‬
‫) & ‪bool insert (const type_of_data‬‬
‫این تابع باید عنصر جدید را به مجموعه اضافه کند‪ ،‬البته به شرطی که آن داده قبال در مجموعه نبوده باشد‪ .‬در‬
‫صورتیکه داده به مجموعه اضافه شد ‪ true‬و در غیر این صورت ‪ false‬بر میگرداند‪.‬‬
‫‪bool find (const type_of_data & ) const‬‬
‫بررسی می کند که داده موردنظر در مجموعه هست یا نه‪ ( .‬اگر باشد‪ true ،‬و در غیر این صورت ‪ false‬برمیگرداند‪).‬‬
‫) & ‪bool erase (const type_of_data‬‬
‫داده مورد نظر را اگر مجموعه باشد‪ ،‬پاک میکند و ‪ true‬برمیگرداند‪ .‬در غیر این صورت ‪ false‬برمیگرداند‪.‬‬
‫‪type_of_data upper_bound (const type_of_data &) const‬‬
‫کوچک ترین عنصر بزرگتر از داده مورد نظر را برمیگرداند‪ ( .‬با فرض وجود چنین عضوي در مجموعه )‬
‫‪type_of_data lower_bound (const type_of_data &) const‬‬
‫بزرگترین عنصر کوچکتر از داده مورد نظر را برمیگرداند‪ ( .‬با فرض وجود چنین عضوي در مجموعه )‬
‫‪unsigned int range (const type_of_data & , const type_of_data & ) const‬‬
‫تعداد عناصر بزرگتر یا مساوي داده اول و کوچکتر از داده دوم را باز میگرداند‪.‬‬
‫‪void get_all ( type_of_data* ) const‬‬
‫همه عناصر دورن مجموعه را به صورت مرتب شده از کوچک به بزرگ در آرایه داده شده میریزد‪.‬‬
‫نکته ‪ :3‬براي این سوال اصال نباید از ‪ STL‬استفاده کنید‪.‬‬
‫نکته ‪ :0‬براي مقایسه دادهها فقط از عملگر کوچکتري استفاده کنید‪ ( .‬ممکن است عمگر هاي بزرگتري یا == براي‬
‫داده ها تعریف نشده باشد‪ ،‬به همین دلیل در داده ساختارهایتان از این ‪ operator‬ها راي مقایسه داده ها استفاده‬
‫نکنید‪) .‬‬
‫نکته ‪ : 1‬داده ساختارهایتان را به گونه اي بنویسید که حافظه مصرفی هر لحظه متناسب با تعداد داده هاي دورن‬
‫مجموعه باشد‪ ( .‬مثال نباید فرض کنید که تعداد داده هاي درون مجموعه از فالن عدد بیشتر نمیشود و ظرفیتی‬
‫محدود و ثابت به داده ساختارهایتان نسبت دهید‪) .‬‬
‫نکته ‪ :4‬فایل ‪ elementary_set.h‬را بفرستید‪.‬‬