تمریه سری ديم درس بروامه وًیسی شیءگرا مًعد ارسال :ديشىبه 24آبان 1389 کاهیار اللَْردی تمریه سری ديم بروامه سازی شیءگرا مهلت تحًیل :ديشىبه 42آبان 8319 نکات کلی در ایي توزیي ضوا تزًاهِی قاتل اجزائی ًویًَیسیذ ٍ تٌْا کاری کِ اًجام هیدّیذ پیادُساسی چٌذ کالس است. هطخصات کلی توزیي ّا تِ ایي ضزح است: نام کالس نام فایل نمره توزیي 1 Date Date.java 33 توزیي 2 Vector Vector.java 15 توزیي 3 Path Path.java 15 توزیي 4 JobScheduler Job JobScheduler.java 43 ّ ذف اس ایي توزیي ،آسهایص درک ضوا اس هفَْم ضیءگزایی ٍ تکارگیزی ایي هفَْم در ػول است .پس اس ایي توزیي ضوا تایذ تزاحتی تتَاًیذ هذلْای سادُ جْاى ٍاقؼی را تصَرت ضیء گزا هذل کٌیذ. تزای ارسال توزیي تِ آدرس سیز هزاجؼِ کٌیذ: http://ce.sharif.edu/~shaikhha/java901 تَجِ ًواییذ کِ تایذ ّز کذام اس فایلْای .javaرا تغَر جذاگاًِ ارسال ًواییذ. هَػذ تحَیل ساػت ( 11:59ظْز) رٍس دٍضٌثِ 24آتاى 1389تَدُ ٍ تِ ّیچ ػٌَاى توذیذ ًخَاّذ ضذ. تأخیز تا 1ساػت ،تِ اسای ّز 3دقیقِ هَجة کسز ضذى ً %1وزُ ،اس 1ساػت تا 24ساػت هَجة کسز ضذى تا 48ساػت تاػث کسز ضذى ً %53وزُ هیضَد .تأخیز تیطتز اس 48ساػت قاتل قثَل ًیست. قغغ تَدى ایٌتزًت خَاتگاُ ،کٌذی پایگاُ ایٌتزًتی داًطکذُ ،توام ضذى کارت ایٌتزًت ٍ … ّیچکذام دلیل هَجْی تزای تأخیز ًیستٌذ .تٌاتزایي پیطٌْاد هیضَد جَابّای خَد را در دانشکده ارسال کٌیذ. تالش تزای استفادُ اس هٌاتغ سیستن هاًٌذ کارت صذا ٍ پزیٌتز ٍ ًَضتي تِ فایل ٍ ...هٌجز تِ دریافت ًوزُی صفز در ایي توزیي هیضَد. توزیي سزی دٍم تزًاهِ ساسی ضیءگزا ً %23وزُ ،اس 24ساػت تا 25ساػت ،تِ اسای ّز 2دقیقِ هَجة کسز ضذى ً %1وزُی دیگز ٍ تیي 25ساػت 1 کالسّا ٍ هتذّای گفتِ ضذُ در آىّا حذاقلّای السم ّستٌذ .یؼٌی ضوا هیتَاًیذ تزای راحتتز ضذى پیادُ- ساسیتاى یا ضیگزاتز ضذى کذتاى تِ ایي کالسّا هتذّای دیگزی اضافِ کٌیذ یا تِ کل توزیي کالسّای دیگزی اضافِ کٌیذٍ .لی دقت داضتِ تاضیذ کِ کالسّای گفتِ ضذُ ٍ هتذّای آًْا تایذ تِ ّویي ضکل ،هَجَد تاضٌذ. سَاالت خَد را تا فزستادى ایویل تِ آدرس [email protected]هغزح کٌیذ. ً حَُ تحَیل حضَری توزیي هتؼاقثاً اػالم خَاّذ ضذ. توزیي سزی دٍم تزًاهِ ساسی ضیءگزا 2 تمرین : 1تاریخ میالدی کالس Dateرا پیادُ ساسی کٌیذ. جْت اعالػات تیطتز در هَرد تاریخ هیالدی تِ آدرس سیز هزاجؼِ کٌیذ: http://en.wikipedia.org/wiki/Gregorian_calendar تَجِ داضتِ تاضیذ کِ تزخی اس سال ّا کثیسِ ّستٌذ ٍ هاُ دٍم تِ جای 28رٍس 29 ،رٍس خَاّذ داضت ،تزای اعالػات تیطتز ٍ یک ضثِ کذ تزای تزرسی کثیسِ تَدى یک سال هیالدی(لشٍهاً 4سال یکثار ًیست) تِ آدرس سیز هزاجؼِ کٌیذ: http://en.wikipedia.org/wiki/Leap_year class Date { ;)Date(int day,int month,int year ;)Date(String str ;)Date add(Date date ;)Date sub(Date date ;)int daysTo(Date date ;)(boolean isLeap ;)(String dateToString } رٍس ٍ هاُ ٍ سال را تا Constructorاٍل هقذار دّی کٌیذ. }{day}/{month}/{year تِ عَر هثال: 13/7/2003 14/8/2008 توزیي سزی دٍم تزًاهِ ساسی ضیءگزا تزای پیادُ ساسی Constructorدٍمٍ ،رٍدی را تِ فزهت سیز در ًظز تگیزیذ: 3 ضزٍع تاریخ را 1/1/0تگیزیذ. دٍ هتذ sub ٍ addتِ هقذار دادُ ضذُ تاریخ را جاتجا هی کٌٌذ ٍ یک ضیء جذیذ حاٍی تاریخ هحاسثِ ضذُ تز هی گزداًٌذ .دقت کٌیذ کِ ًثایذ ضیء کًٌَی را تغییز دّیذ. 28/2/2000 + 4/1/0 3/3/2000 2/5/2000 + 4/5/21 4/9/2021 2/5/2000 - 4/5/21 29/12/1978 هتذ daysToتؼذاد رٍسّای تاقیواًذُ تا تاریخ قیذ ضذُ را تز هی گزداًذ. هتذ isLeapدر صَرتی کِ سال کًٌَی کثیسِ تاضذ true ،تز هی گزداًذ. هتذ dateToStringتِ فزهت ٍرٍدی ساسًذُ دٍم تایذ تاریخ را تثذیل کٌذ: 18/5/2010 توزیي سزی دٍم تزًاهِ ساسی ضیءگزا 4 بردار: 2 تمرین . را پیادُ ساسی کٌیذVector کالس class Vector { Vector(double u, double v, double w, int coordination); Vector(Vector v); Vector add(Vector v); Vector sub(Vector v); double dotProduct(Vector v); Vector crossProduct(Vector v); String getCartesian(); String getCylindrical(); String getSpherical(); } توزیي سزی دٍم تزًاهِ ساسی ضیءگزا : پاراهتز سَم ساسًذُ اٍل ًَع هختصات تزدار را تؼییي هی کٌذ 5 Coordination Type 1 Cartesian 2 Cylindrical 3 Spherical : جْت اعالػات تیطتز در هَرد ًوایص ّای هختلف تزدار تِ آدرس سیز هزاجؼِ کٌیذ http://en.wikipedia.org/wiki/Vector_fields_in_cylindrical_and_spherical_co ordinates . ساسًذُ دٍم یک ضیء را تا هختصات ضیء دادُ ضذُ در پاراهتز هقذاردّی اٍلیِ هی کٌذ . ّیچ تغییزی ًثایذ در ضیء کًٌَی ایجاد ضَد. هجوَع ٍ تفاضل دٍ تزدار را تز هی گزداًٌذsub ٍ add دٍ هتذ دٍ هتذ crossProduct ٍ dotProductضزب ًقغِ ای ٍ ضزب تزداری را هحاسثِ هی کٌٌذ. سِ هتذ getSpherical ٍ getCylindrical ٍ getCartesianیک سِ تایی را تِ ػٌَاى خزٍجی ًوایص هی دٌّذ کِ ّز کذام ًوایطگز تزدار در دستگاُ هختصات هَرد ًظز ّستٌذ .تواهی اػذاد تایذ 4رقن اػطار دقت داضتِ تاضٌذ: )(24.0000,1200.1620,43.0261 در دستگاُ هختصات کزٍی ٍ استَاًِ ای ،توام ساٍیِ ّا را تثذیل تِ کَچکتزیي ساٍیِ هثثت کٌیذ. تحت ضزایغی کِ یک ساٍیِ ّز هقذار دلخَاّی هی تَاًذ تاضذ ،هقذار صفز را تزای آى در ًظز تگیزیذ. توزیي سزی دٍم تزًاهِ ساسی ضیءگزا 6 تمرین :3مسیر کالس Pathرا پیادُ ساسی کٌیذ. class Path { ;)(Path ;)Path addPoint(int x,int y,int z ;)boolean removePoint(int number ;)void addPath(Path p ;)(double getLength ;)(double getDistance ;)boolean isLonger(Path p } ساسًذُ ی ایي کالس یک هسیز خالی را ایجاد هی کٌذ( .عَل هسیز خالی صفز است) هتذ addPointیک ًقغِ را تِ ضیء کًٌَی اضافِ هی کٌذ ،سپس ّویي ضیء را تزهی گزداًذ. تا ایي تکٌیک هی تَاًیذ در یک خظ چٌذ ًقغِ تِ یک ضیء اضافِ کٌیذ: ;)myPath.addPoint(7,2,3).addPoint(2,6,4).addPoint(3,4,2 ;)myPath.addPoint(2,3,4 هتذ ً removePointقغِ numberام را اس هسیز حذف هی کٌذ( .تا ضزٍع اس اًذیس صفز) اگز چٌیي ًقغِ هتذ addPathیک ضیء Pathرا تِ ضیء کًٌَی اضافِ هی کٌذ ،تِ ایٌصَرت کِ ًقغِ اتتذایی آى را پس اس ًقغِ اًتْایی ایي ضیء اضافِ هی کٌین ٍ تِ تزتیة ًقاط تؼذی را ًیش اضافِ هی کٌین. هتذ getLengthهسافتی کِ تا ػثَر اس توام ًقاط عی هی ضَد را تز هی گزداًذ. هتذ getDistanceفاصلِ ًقغِ اتتذایی ٍ ًقغِ اًتْایی را تز هی گزداًذ. دٍ هتذ getDistance ٍ getLengthتایذ هقذار خَد را تا 4رقن اػطار تزگزداًٌذ. توزیي سزی دٍم تزًاهِ ساسی ضیءگزا ای ٍجَد ًذاضت فقظ هقذار falseرا تزهی گزداًذ ٍ در غیز ایٌصَرت trueتزهی گزداًذ. 7 ُ تز هی گزداًذ کِ هسافتی کِ ایي ضیء عی هی کٌذ تیطتز اس ضیء دادtrue در صَرتیisLonger هتذ .ضذُ در هتذ تاضذ مدیریت کارها:4تمرین ّز دٍ کالس تایذ در یک فایل تاضٌذ ٍ فقظ. را پیادُ ساسی کٌیذJobScheduler ٍ Job در ایي توزیي تایذ دٍ کالس . تاضذPublic تایذJobScheduler public class JobScheduler { JobScheduler(int hour, int weekday); void setTime(int hour, int weekday); boolean addJob(Job j); boolean isEmpty(); int cleanJobs(); int removeAllJobs(); int getTotalHours(); String doNextJob(); int getJobsRemaining(); } class Job { Job(String s, int hour, int weekday, int duration, int priority); void setName(String s); String getName(); توزیي سزی دٍم تزًاهِ ساسی ضیءگزا String jobSchedulerToString(); 8 ;)void setStart(int hour, int weekday ;)(int getStartHour ;)(int getStartDay ;)void setDuration(int hours ;)(int getDuration ;)void setPriority(int p ;)(int getPriority ;)(String jobToString } کالس :Job ساسًذُ Jobتوام هطخصاتی کِ تَسظ هتذّای دیگز تؼییي هی ضًَذ را یکجا در یک ضیء قزار هی دّذ. هتذ setNameیک رضتِ را تِ ػٌَاى ًام کار تؼییي هی کٌذ. هتذ ً getNameام کار را تز هی گزداًذ. هتذ setStartسهاى ضزٍع کار را تؼییي هی کٌذ .پاراهتز weekdayیک ػذد اس 3تا 6است کِ 3تِ هؼٌای ضٌثِ ٍ 6جوؼِ است. هتذ getStartHourساػت ضزٍع کار را تز هی گزداًذ. هتذ getStartDayػذدی ًوایطگز رٍس ّفتِ کِ کار در اًجام هی ضَد را تز هی گزداًذ. هتذ setDurationهذت سهاى کار را تؼییي هی کٌذ. هتذ getDurationهذت سهاى کار را تز هی گزداًذ. هتذ setPriorityاٍلَیت کار را تؼییي هی کٌذ .کاری هْن تز است کِ هقذار ػذدی اٍلَیت آى کوتز تاضذ. هتذ jobToStringیک رضتِ ًطاًگز کار کًٌَی را تز هی گزداًذ: {name}: from {weekday} {start}, for {duration} hours with #{priority} priority. هثال: Job1: from Wednesday 17, for 2 hours with #1 priority. تزای کارّای یک ساػتِ ،تِ جای hoursتایذ اس hourاستفادُ کٌیذ. weekdayیکی اس رٍسّای ّفتِ است کِ حزف اٍل آى تشرگ است: توزیي سزی دٍم تزًاهِ ساسی ضیءگزا هتذ getPriorityاٍلَیت کار را تز هی گزداًذ. 9 Weekday Code Saturday 0 Sunday 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 کالس :JobScheduler ساسًذٓ ایي کالس ،تِ ػٌَاى ٍرٍدی سهاى ضزٍع تِ کار را هیگیزد ٍ تا تَجِ تِ آى ضیء هغلَب را هیساسد. هتذ setTimeسهاى کًٌَی را تؼییي هی کٌذ .اس ایي سهاى تِ تؼذ کارّا اًجام خَاٌّذ ضذ .در ٍاقغ ،ایي هتذ ٍرٍدی ّای دادُ ضذُ تِ ساسًذُ را تزٍس هیکٌذ. هتذ addJobیک کار را اضافِ هی کٌذ .در صَرتی کِ تا یکی یا تؼذادی اس کارّای قثلی تذاخل داضت ،اگز اٍلَیت ایي کار اس تواهی آى کارّا کوتز یا هساٍی تَد ،کار را اضافِ ًوی کٌذ .در غیز ایٌصَرت کارّایی کِ تذاخل دارًذ را پاک هی کٌذ ٍ ایي کار را اضافِ هی کٌذ .در صَرتی کِ کار تِ لیست کارّای هَجَد اضافِ ضَد ،هقذار trueتز هی گزداًذ. تزای ًوًَِ در سیز 4کار هَجَد ًطاى دادُ ضذُ اًذ کِ اٍلَیت ّزکذام تؼذ اس ًَ #ضتِ ضذُ است .اگز در ایي حالت تخَاّین Job5را تِ لیست کارّا اضافِ کٌین ،تا Job3 ٍ Job2 ،Job1تذاخل دارد .چَى اٍلَیت آى اس تواهی کار ّای دیگز تیطتز است ،تواهی ایي کارّا را پاک هی کٌین سپس Job5اضافِ هی کٌین .در صَرتی توزیي سزی دٍم تزًاهِ ساسی ضیءگزا 13 کِ تخَاّین Job6را اضافِ کٌین ،تا Job4 ٍ Job3تذاخل دارد؛ ٍلی اٍلَیت Job6کوتز اس Job4است ،پس ایي کار را ًثایذ اضافِ کٌین. هتذ isEmptyدر صَرتی کِ ّیچ کاری هَجَد ًثاضذ ،هقذار trueرا تز هی گزداًذ. هتذ cleanJobsتوام کارّایی کِ سهاى ضزٍػطاى قثل اس سهاى کًٌَی تاضذ را پاک هی کٌذ .هقذاری کِ ایي هتذ تزهی گزداًذ ،تؼذاد کارّایی است کِ پاک ضذُ اًذ. هتذ ّ removeAllJobsوِ کارّا را پاک هی کٌذ ٍ تؼذاد کل کارّا را تزهی گزداًذ. هتذ getTotalHoursتؼذاد ساػات هجوَع کل کارّا را تز هی گزداًذ .کارّایی کِ سهاى ضزٍػطاى گذضتِ تاضذً ،ثایذ هحسَب ضًَذ. هتذ doNextJobاٍلیي کاری کِ تؼذ اس سهاى کًٌَی ٍجَد دارد را اًجام هی دّذ .تِ ایي صَرت کِ ایي کار اس لیست کارّا حذف هی ضَد سپس ػثارت سیز را تز هی گزداًذ: Doing {Job Name}... در صَرتی کِ کاری ٍجَد ًذاضت ػثارت سیز را تز هی گزداًذ: No job to do هتذ getJobsRemainingتؼذاد کارّایی کِ تؼذ اس سهاى کًٌَی ّستٌذ را تز هی گزداًذ. هتذ jobSchedulerToStringتواهی کارّا تؼذ اس سهاى کًٌَی را تِ تزتیة سهاى ضزٍع تِ صَرت یک رضتِ تز هی گزداًذّ .ز کار در یک خظ درج هی ضَد .اس هتذ jobToStringکالس Jobکوک تگیزیذ. هَفق تاضیذ توزیي سزی دٍم تزًاهِ ساسی ضیءگزا 11
© Copyright 2025 Paperzz