برنامه سازی پیشرفته نیمسال اول 94-93 دانشکده مهندسی کامپیوتر تمرین سوم پ پیمان دودانگه زمان تحویل 21:دی .1موعد ارسال تمرین ساعت 95:32روز جمعه مورخ 1525/11/19است. .9تمرین باید به صورت حضوری تحویل داده شود و استفاده از کامنت ،و ساختار کد نمره خواهد داشت. .5در صورت داشتن هرگونه مشکل ،سوال خود را با تگ مناسب در Piazzaمطرح کنید. .4با هر گونه تقلب برخورد جدی خواهد شد. .3برای تحویل تمرین ،آن را بر روی سامانه ی داوری آپلود نمایید .بعد از آپلود ،شما از سامانه داوری نمره ای دریافت نمی کنید .آپلود تنها به منزله ی ارسال تمرین شما می باشد. CECollection تیم تخصّصی بررسی کنندهی کاراییهای ساختی ابزارهای تسهیلکنندهی زبانهای برنامه نویسی ساختیافتهی دانشکدهی مهندسی کامپیوتر دانشگاه صنعتی شریف پس از پژوهشهای فراوان در حوزهی ابزارهای درونی جاوا و کاربردهای آن به این نتیجه رسید که کالسهایی که به عنوان Collectionدر جاوا از آنها یاد میشود آنچنان که شایسته نام جاواست ،پیادهسازی نشدهاند و نیاز به بازبینی فراوان دارند! بس از بررسیهای کارشناسی بیشتر در کمیتههای تخصصی ت ر ،این تیم (که دیگر از ذکر نام آن خودداری میکنیم!) به این نتیجه رسید که مشکالت این کالسها بن یادی تر از آن است که بتوان با اصالحاتی جزئی آنها را رفع رجوع کرد .بنابر این تصمیم بر این گرفته شد که Collectionو زیر مجموعه های آن توسط خود بچه های دانشکده به خصوص دانشجویان درس برنامهنویسی پیشرفته با عنوان CECollectionبازنویسی شود تا این ایرادات اصالح شده و جامعه جهانی بتواند با آرامش غیر قابل وصفی از این ابزارهای بینقص استفاده کند و دانشجویان این درس هم تمرینی روی مفاهیم آن انجام داده باشند! از آن جایی که این تیم به هیچ یک از دیگر ابزارهای درونی نوشته شدهی جاوا اعتماد ندارد ،ابزارهای جدید صرفا باید از امکانات مقدماتی جاوا مثل آرایه و تابع و ...استفاده کنند و از هیچ یک از کالسهای آماده جاوا در این برنامهها نباید استفاده کرد. توجه :در صورت استفاده از هر کالس از پیش نوشته شده هیچ نمرهای به این سوال تعلق نمیگیرد! شما باید در این برنامه همه classها و interfaceها و توابع خواسته شده را پیادهسازی کنید. ;>public interface CEComparable<T همه کالسهایی که اعضای آن با اعضای کالس جنریکی مانند Tقابل مقایسه اند ،این interfaceرا implementمیکنند .توجه کنید که در مثالهای ما Tهمان کالسی است که CEComparableرا implementکرده است .به طور مثال >class Student implement CECoparable<Student یعنی Studentبا خودش قابل مقایسه است. *صرفا جهت اطالع T :از آن جهت به CEComparableداده شده که در تابع ComparetToکه در خط بعد تعری ف شده بتواند به عنوان تایپ قرار بگیرد! این interfaceتنها تابع زیر را داراست: ;)public int CompareTo(T a خروجی این تابع ،در صورتی که شیئی که این تابع روی آن صدا زده شده از aکوچکتر باشد برابر ،-1در صورتی که هر دو مساوی باشند 0و در صورتی که aاز شیئی که این تابع روی آن صدا زده شده کوچکتر باشد برابر 1خواهد شد. در مثال Studentکه در باال زده شد ،تابع CompareToبه شکل زیر در میآید: ;)public int CompareTo(Student a که اگر sو rدو نمونه از کالس studentباشند میتوان تابع را این گونه صدا کرد: ;)s.CompareTo(r در صورتی که از لحاظ معیار در نظر گرفتهشده در تابع s ،compareToکوچکتر از rباشد حاصل -1اگر sو rمساوی باشند حاصل 0و اگر sبزرگتر از rباشد حاصل 1خواهد شد. >public interface CECollection<E همه کالسهایی که در ادامه می آیند به شکل مستقیم یا غیر مستقیم باید این interfaceرا implementکنند .در واقع همه کالس - هایی که مجموعهای از instanceهای یک کالس جنریک ( ) Eرا قرار است نگهداری کنند ،این interfaceرا implementمیکنند. (همان طور که همه کالسهایی مثل Arraylistیا Setکه مجموعهای از نمونههای یک کالس را نگه داری میکنند کالس Collection جاوا را implementمیکنند). این interfaceتوابع زیر را داراست: ;)public void add(E a این تابع aرا به CECollectionمربوطه اضافه میکند. ;)public void add(E… a این تابع تعداد نامعلومی نمونه از کالس Eرا به CECollectionمربوطه اضافه میکند. ;)public void add(E[] a یک آرایه از نمونههای Eرا به CECollectionمربوطه اضافه میکند. ;)(public void clear CECollectionمربوطه را خالی میکند. ;)public boolean containRef(E a در صورتی که refrenceنمونه aدر CECollectionمربوطه وجود داشته باشد trueو در غیر این صورت falseبرمیگرداند. ;)public boolean contain(E a در صورتی که نمونهای برابر ( aاز لحاظ تابع )( )equalsدرون CECollectionمربوطه وجود داشته باشد trueو در غیر این صورت falseبرمیگرداند. ;)public E remove(E a در صورتی که نمونهای برابر ( aاز لحاظ تابع )( )equalsدرون CECollectionوجود داشته باشد آن را از CECollectionپاک میکند و به عنوان خروجی تابع برمیگرداند (اگر چند نمونه وجود داشت همه آنها را پاک میکند و یکی را به دلخواه برمیگرداند). ;)(public boolean isEmpty اگر CECollectionمربوطه خالی بود trueو در غی ر این صورت falseبرمیگرداند. ;)(public int size تعداد نمونههای موجود در CECollectionمربوطه را برمیگرداند. ;)(public E[] toArray همه نمونههای درون CECollectionمربوطه را به شکل آرایهای از کالس Eبرمیگرداند. ;>public class CEArrayList<E> implement CECollection<E این کالس در واقع همان CEArrayListجاواست که شما باید آن را پیاده سازی کنید .عالوه بر پیاده سازی کالسهایی که به خاطر implementکردن ،CECollectionاین کالس باید پیاده سازی کند ،توابع زیر را نیز برای این کالس باید تعریف کنید. توجه کنید که CEArrayListدر واقع یک آرایه با طول متغیر است و هر تعداد عنصر دلخواه از نوع جنریک Eرا باید بتوان در آن جا داد. بنابراین در صورتی که در پیادهسازی از آرایه جاوا استفاده میکنید چون طول آرایه ثابت است باید تمهید الزم هنگامی که آرایه پر میشود را بیندیشید. درصورتی که برای این کار از روش های بهینه مصرف حافظه و زمان استفاده کنید نمره امتیازی دریافت خواهید کرد. توابع: ;public E get(int index) throws CEArrayListIndexOutOfBoundException این تابع عضو indexام از CEArrayListمربوطه را برمیگرداند .در صورتی که indexاز اندازه CEArrayListمربوطه بزرگتر بود یک نمونه Exceptionاز نوع ( CEArrayListIndexOutOfBoundExceptionاین خطا را نیز شما باید تعریف کنید) باید throw شود. ;)public int indexOf(E a این تابع جایگاه (اندیس) اولین حضور عضو برابر ( aاز لحاظ تابع )equalدر CEArrayListرا برمیگرداند .در صورتی که aدرون CEArrayListمربوطه وجود نداشت -1برمیگرداند. ;public void swap(int i, int j) throws CEArrayListIndexOutOfBoundException عضو iام و jام CEArrayListرا بایکدیگر تعویض میکند .دی صورتی که iیا jبزرگتر از sizeآرایه بودند یک Exceptionاز نوع CEArrayListIndexOutOfBoundExceptionباید throwشود. (کنجکاوی :مستقل از این سوال و تمرین!!!! به این فکر کنید که در جاوا چگونه میتوانیم تابع swapبرای دو متغیر از نوع primitive typeبنویسیم!) ;>public class CESortedArrayList<E extends CEComparable> implement CECollection<E این کالس همه ویژگیهای کالس CEArrayListرا داراست با این تفاوت همیشه نمونه ها به ترتیب sortشده در آن نگهداری میشوند. بنابر این CESortedArrayListتنها میتواند محتوی کالسهایی باشد که interfaceمقایسه پذیری یعنی comparableرا implementکرده باشند (تا ترتیب روی اعضا معنی پیدا کند!) همچنین به همین دلیل تابع swapبرای آن معنی ندارد و بقیه توابع CEArrayListباید برای آن پیادهسازی شود. public class CESet<E> implement CECollection این کالس باز نوع دیگری از CECollectionاست که همان طور که از نام آن مشخص است نمایشگر یک مجموعه است که به این معنی خواهد بود که عضو تکراری (از لحاظ تابع )equalرا در خود نمیپذیرد و از هر عضو تنها یک نمونه نگه می دارد .بنابر این در صورتی که عضوی قبال در CESetوجود داشت و باز به آن اض افه شد نباید تغییری در محتویات آن ایجاد شود. این کالس تنها همان توابع کالس CECollectionرا پیادهسازی میکند و نیازی به پیادهسازی دیگر توابع نیست. در صورتی که در پیادهسازی CESetاز ساختارهای درختی و یا درهمسازی استفاده کنید نمره اضافی دریافت خواهید کرد. شهر شکالتی کندی بچه ی خیال بافی است که شکالت را خیلی دوست دارد .او همیشه در این آرزو بود که در مخفی شهر شکالتی را پیدا کند . او بعد از کنجکاوی فراوان باالخره به آرزوی خود رسید و در شهر را پیدا کرد .در شه ر شکالتی بازی ای وجود داشت و هر فردی که در رقابت این شهر بیشترین امتیاز را کسب می کرد ،میتوانست شکالت دریافت کند .برای این که کندی بتواند در رقابت پیروز شود از تیم جاوا ی دانشکده در خواست کرد که این بازی را برای او پیدا سازی کنند تا قبل از رقابت بتواند تمرین کند. بازی درخواست شده شامل یک جدول 9*9بوده که در ردیف ها و ستون های آن ،شکالت قرار دارد .هرگاه که 3یا بیشتر شکالت در این بازی در کنار هم قرار گرفتند ،این شکالت ها از خانه های جدول بازی حذف شده به کاربر امتیازی داده میشود و شکالت های جدید از باالی جدول ،جایگزین آن می شوند .باز ی تا زمانی ادامه خواهد داشت که دیگر در جدول نتوان با جا به جا کردن شکالت ها ،امتیازی کسب کرد. جدول بازی به صورت زیر خواهد بود : )2در این بازی 6نوع شکالت وجود دارد و امتیاز همه ی شکالت ها باهم برابر می باشد. برای حذف xشکالت امتیاز 3 4 5 6 7 8 9 21 11 31 41 01 61 01 )1حذف شکالت ها زمانی امکان پذیر است که ،همه شکالت ها از یک نوع باشند. ) 3جایگزینی به این شکالت ها زمانی که حذف می شوند به صورت زیر است : فراموش نکنید که شکالت هایی که از باالی جدول وارد می شوند ،به صورت رندم تولید می گردند. )4زمانی که شکالت های جدید جایگزین قبلی ها خواهد شد ،باید درون جدول تمام خانه هایی که 3یا بیشتر شکالت هم نوع در کنار هم قرار گرفته اند را حذف کرد. ) 0زمانی که جا به جایی یک شکالت ،منجر به حذف شکالت های هم نوع خود می شود ،قبل از جایگزینی باید در جدول بررسی شود تا تمام خانه هایی که 3یا بیشتر شکالت هم نوع در کنار هم قرار گرفته اند ،حذف گردند. ) 6در ابتدای بازی باید نام کاربر از او گرفته شده و نامش در زمان بازی در کنار صفحه نمایش داده شود. ) 0جمع امتیازات کاربر باید در صفحه ی بازی نمایش داده شود. )8زمانی ک ه بازی تمام شود ،صفحه ی بازی بسته شده و در صفحه ی دیگر نام و میزان امتیاز کاربر را نمایش دهد. )9چنان چه در زمان جا به جایی یک شکالت ،عمل حذفی رخ ندهد ،شکالت به جای اول خود باز می گردد. ) 21هر شکالت فقط می تواند با 4خانه ی جدول جا به جا شود :باالیی ،پایینی ،سمت راست و سمت چپ (.خانه ی عالمت گذاری شده با Oبا خانه هایی که عالمت × دارند م یتواند جا به جا شود و در صورتی که عمل حذف رخ ندهد به جای خود باز می گردد) . ) 22جدول ابتدای بازی را میتوانید با الگوی دلخواه مورد نظر خود پر کنید .فقط یادتان باشد که در جدول ابتدایی نباید 3یا بیشتر عنصر یکسان کنار هم باشند (یعنی در سطر یا ستون که منجر به حذف گردد. ). جدول ابتدای بازی نباید به گونه ای باشد که امکان بازی برای کاربر وجود نداشته باشد. )21اگر شکالت های همنوع هم در سطر و هم در ستون مشترک باشند ،باید سطر و ستون آن حذف گردد. مانند : )23برای راحتی در امتیاز دهی ،در هنگام حذف خانه ها ،تعداد خانه هایی که حذف میشوند را شمرده و مانند جدول امتیاز دهید. )24آپشن های اضافه بر روی این بازی ،نمره ی اضافی خواهد داشت .برای ایده گرفتن نیز می توانید از سایت زیر استفاده کند: Candy Crush saga
© Copyright 2025 Paperzz