Ctrl + Z

فرصتی دوباره

بســــم الله الرحمــــن الرحیـــــــم

Ctrl + Z

فرصتی دوباره

سلام

در این نوبت ۲ تمرین آمده که به شرح زیر هستند.

این تمرینات با فرمت اسم گذاری زیر فشرده کرده(ZIP ویا RAR) و به آدرس mail و با شیوه زیر(هم email و هم فایل های ضمیمه شده به ایمیل) اسم گزاری کنید:

hw3_<class number>_firstName_lastName.zip<or rar>

برای مثال کسی بانام مهدی مظاهری که در کلاس ۲۰۳ می باشد و با فرمت RAR  می فرستد به شکل زیر است:

hw3_203_mahdi_mazaheri.rar

توجه:هر گونه عدم رعایت درست نام گزاری  فایل ها و توابع و کلاس های خواسته شده امکان از دست دادن کل نمره را موجب می شود.

شما باید دو فایل Date.java و Path.java که در package ای با نام hw3 قرار دارد با فرمت بالا فشرده کنید!

تمرین ۱) کلاس Date را پیاده سازی کنید:

جهت اطلاعات بیشتر در مورد تاریخ شمسی به زیر مراجعه کنید:

تاریخ شمسی در ویکی پدیا

اسفند را ۲۹ روزه در نظر بگیرید و سال کبیسه نداریم.

class Date{
    Date(int day, int month, int year){...}
    Date(String){...}
    Date add(Date date){...}
    Date sub(Date date){...}
    int daysTo(Date date){...}
    String dateToString(){...}
}

روز و ماه سال را با Constructor اول مقداردهی کنید.

برای پیاده سازی Constructor دوم ورودی را به فرمت زیر در نظر بگیرید:

{day}/{month}/{year} example: 21/9/1392

شروع تاریخ را تاریخ زیر در نظر بگیرید:

1/1/0

دو متد add و sub به مقدار داده شده تاریخ را جابجا می کند و یک شی جدید حاوی تاریخ محاسبه شده بر میگرداند. دقت کنید نباید شی کنونی تغییر کند:

28/2/1372 + 4/3/0 -> 1/5/1372
example:
Date d = new Date(28/2/1372);
d.add(new Date(4/3/0));

متد daysTo تعداد روزهای باقیمانده تا تارخ قید شده را برمی گرداند.

متد daysToString به فرمت ورودی سازنده دوم باید تاریخ را تبدیل کند.


تمرین ۲)  کلاس Path را پیاده سازی کنید:

class Path{
    Path(){...}
    Path addPoint(int x, int y){...}
    Boolean removePoint(int number){...}
    void addPath(Path p){...}
    double getLength(){...}
    double getDistance(){...}
    boolean isLonger(Path p){...}
}

سازنده ی کلاس یک مسیر خالی را ایجاد می کند.(طول مسیر خالی صفر است!)(ما در صفحه ی xy  کار می کنیم!)

توضیحات تکمیلی: فرض کنید هر Path حداکثر ۱۰۰ نقطه دارد.

متد addPoint یک نقطه به شی کنونی اضافه می کند. سپس شی ای جدید برمیگرداند.

متد removePoint نقطه ی numberام را از مسیر حذف می کند. (برای اولین نقطه number را ۱ در نظر گرفته شود.) اگر نقطه وجود نداشت false برمی گرداند و در غیر این صورت true.

متد addPath یک شی Path را به شی کنونی اضافه می کند. به این صورت که نقطه ی ابتدایی آن را به نقطه انتهایی این شی اضافه می کند و به ترتیب نقاط بعدی را اظافه می کند.

متد getLength مسافتی که با عبور از تمام نقاط طی می شود بر می گرداند.

متد getDistance فاصله ی نقطه ی ابتدایی و انتهایی برمی گرداند.

دو متد getLength و getDistance تا دقت ۴ رقم اعشار برمی گردانند. بدون گرد کردن.

متد isLonger در صورتی  true برمی گرداند که مسافتی که این شی طی می کند بیشتر از شی داده شده به متد است. 

  • مهدی مظاهری

سوالات  (۱۹)

آقای مظاهری ,اسلاید هایی که سر کلاس گذاشتید را روی  سایت بزارید
پاسخ:
سلام
اسلاید ها کاملا آماده نیستند.
در صورت نیاز به جزوه از این پست استفاده کنید:
سلام

 *چرا متد های add و sub ورودی ندارند؟ چه چیزی را با تاریخ جمع کنند؟

پاسخ:
سلام
اصلاح شد.
با احترام فراوان
فرق متد sub با add چیه؟
constructor اول را از چه چیزی مقدار دهی کنیم؟
کار متد dateToString چیه؟
پاسخ:
سلام
۱) فرق در کم و زیاد کردن تاریخ است add زیاد می کند و sub کم می کند.
۲) اگر به داخل پرانتز ها نگاه کنید متوجه می شوید. ۳تا عدد مربوط به تاریخ.
۳) یک محتویات تاریخ را به فرمت گفته شده بر می گرداند.

با احترام
سلام
خروجی متد add date چرا از جنس date است ؟
یعنی چه؟
پاسخ:
توضیحات سوال کامل است:
دو متد add و sub به مقدار داده شده تاریخ را جابجا می کند و یک شی جدید حاوی تاریخ محاسبه شده بر میگرداند
  • مگه فرق می کنه؟!
  • سلام

      لطفا متد  addpoint  را بیشتر توضیح بدید.
    پاسخ:
    هر Path از لیست مرتبی از نقطه ها ساخته است. این تابع باید نقطه ای به انتهای این لیست اضافه کند.
    متد dateToString کدام تاریخ را به رشته تبدیل می کند.
    پاسخ:
    سلام
    تاریخ همان Object ای که این متد را صدا میزند.
    سلام ببخشید برای سوال دوم خودمان هم می توانیم constractor اضافه کنیم یا نه؟
    پاسخ:
    هر چه بخواهید می تنید علاوه بر موارد خوسته شده اضافه کنید اما فکر کنم کانستراکتور اضافه فقط کارتون را بیشتر می کند...
    سلام.برای فرستادن کد فقط سورس را بنوسیم یا کل پوشه را بنوسیم؟
    پاسخ:
    سلام
    پکیج دو کلاس را بفرستید! در بالا توضیحات آمده است!
    سلام تا دقت بیشتر از 4 رقم اعشار موردی ندارد.
    پاسخ:
    سلام
    این الان سواله یا دستوره و یا خبره؟
    در مورد این سوال:
    برای تابع addpoint یک نقطه را که اضافه کردیم چه طوری دوباره یک شیئ بسازیم؟
    شما دارید جواب مساله را می پرسید! تمام چیزی که می تونم بگم:
    باید یک شی جدید بسازید و تمام نقطه های شی قبلی و نقطه جدید را شامل شود.
    در مثال متد add وقتی جمع روز ها از  1 ماه بیشتر شد چرا ماه بدست آمده را 1 واحد بیشتر نکردید؟
    پاسخ:
    سلام
    بسیار ممنونم و آفرین!
    اصلاح شد.
    با احترام
    با عرض سلام ...
    در مثالی که برای add و sub زدید ماه رو اشتباه حساب کردید یعنی بجای: 1/6/1372 <- 4/3/0 + 28/2/1372
    نوشتید:      1/5/1372 <- 4/3/0 + 28/2/1372
    با تشکر
    پاسخ:
    سلام
    بسیار ممنونم و آفرین!
    اصلاح شد.
    با احترام
    سلام تو constructor دوم قسمت ورودی دقیقا چجوری به تابع پاس داده شده است؟
    (شما فقط یه string نوشتید)
    پاسخ:
    سلام
    نمی فهمم منظورتونو!
    مثل اینه که شما داری سی پلاس پلاس کد می زنید و فانکشن می نویسید بیرون main بعد بگید که چه جوری بهش ورودی داده میشه!
    خب ورودی داده میشه دیگه! یک string بهش میدید! اینجا فقط شما همه چیز را تعریف می کنید! می تونید یک main خودتون درست کنید و امتحان کنید!
    با عرض سلام دوباره...
    در ادامه کامنت بالا باید بگم اشتباه کردم!!
    مثال شما درست بود و تاریخ 1/5/1372 درست است . برای فهمیدن این موضوع دو تاریخ زیر را با هم جمع کنید:
     31/1/0 + 1/1/0
    متوجه شدید؟ مجموع این دو عبارت 1/2/0 است نه 1/3/0
    با تشکر.
    پاسخ:
    سلام
    شما درست میگید و تقصیر من بود.
    این بار در تصحیح تمرین ها کمی ارفاق میشه.
    الان برای اصلاح کمی دیره!
    خیلی خوبه که حواستون جمعه! من هم اولش با حواس جمعی طرح کردم اما با حواس پرتی تغییر دادم!
                               به نام او
    با عرض سلام
    آقای مظاهری! چرا جواب درست را به جواب غلط تغییر دادید؟
    آیا واقعا  1/6/1372 <- 4/3/0 + 28/2/1372 می شود ؟
    28/2/1372 یعنی 1 ماه کامل 31 روزه + 28 روز و
    4/3/0 یعنی 2 ماه کامل 31 روزه + 4روز
    پس  4/3/0+ 28/2/1372 یعنی 3 ماه کامل 31 روزه + 32 روز
    یعنی 4 ماه کامل 31 روزه + 1 روز که این «1 روز» در ماه 5 ام قرار دارد
    یعنی 1/5/1372 !       ------------------------------------------------->
    پس نتیجه می گیریم که جواب قبلی شما درست و جواب کنونی نادرست می باشد.
    لطفا اصلاح فرمایید.
                                                                                       با تشکّر
    پاسخ:
    سلام
    شما درست میگید و تقصیر من بود.
    این بار در تصحیح تمرین ها کمی ارفاق میشه.
    الان برای اصلاح کمی دیره!
    خیلی خوبه که حواستون جمعه! من هم اولش با حواس جمعی طرح کردم اما با حواس پرتی تغییر دادم!
    اگر می شود جزوه آموزش زبان جاوا را بگذارید چون اکثریت بچه ها مشکل اساسی دارند
    پاسخ:
    سلام
    اگر ممکن است به پست جزوه ی جاوا مراجعه کنید و مشکلاتی که بنظر میاد را در آنجا مطرح کنید.
    با احترام
    اگر کسی سوال را بلد نباشد با او چه کار می کنید اگر هم از دوستمان بپرسیم او روش خود را می گوید و اگر از روش او استفاده کنم کپ محسوب می شود چه کار کنم؟
    پاسخ:
    سلام
    معمولا اگر خودتان نوشته باشید مشکل کپی شدن به وجود نمی آید!
    اگر هم احتمال کپی کردن در مورد افرادی برود از آن ها امتحانکی می گیریم که این مساله دقیق تر بررسی شود! فقط برای اطمینان از این که خود فرد حل کرده و به مساله اشراف دارد.
  • محب حضرت علی (ع)
  • آقایی که به سوالات جواب می دهید یه کم املای فارسی را خوب یاد بگیریید چون ارفاغ غلط است و با ق دو نقطه نوشته می شود یعنی ارفاق درست است  یه کم دانستن املا برای حفظ آبرویتان بد نیست
    پاسخ:
    سلام
    خیلی ممنون از لطف شما.
    بالاخره موقع تایپ ذهن اشتباه می کند! شما به بزرگی خودتون ببخشید و از اینکه متواضعانه گوشزد می کنید ممنونم.
    اگر باز هم مشاهده کردید لطفا اعلام کنید.
    با احترام فراوان
    مهدی
  • محمدامین کرباسفروشان
  • 28/2/1372 + 4/3/0 -> 1/6/1372
    نه؟
    پاسخ:
    به ۴ ۵ تا نظر بالاتر رجوع کن!:)
    سلام اشکالی داره اگه دونفری با هم تو سایت کد تکلیف رو زده باشیم و هردو فهمیده باشیم و کد یکسان بفرستیم (البته در متن ایمیل به شما اطلاع بدیم)
    پاسخ:
    سلام
    خیر اجازه ی این کار را ندارید.
    در کامنت های بالا توضیحاتی در مورد کمک گرفتن و تقلب آمده است. در هر صورت هر کس باید یک بار email جدا گانه بفرستد. باید ما بفهمیم وقعا هر کس خودش تمرین را فهمیده است.
    این را هم درک می کنیم ۷۰ جور راه پاسخگویی برای این تمرین نیست!

    ارسال سوال

    نظر دادن تنها برای اعضای بیان ممکن است.
    اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.