structهای C# با classها رابطهی نزدیکی دارند. آنها حالت و رفتار دارند. سازندههایی دارند که آرگومان میگیرند، میتوان نمونهها را به متغیرها تخصیص داد، برابری آنها را بررسی کرد و در مجموعهها ذخیره کرد.
enum Unit
{
Kg,
Lb
}
struct Weight
{
private double count;
private Unit unit;
public Weight(double count, Unit unit)
{
this.count = count;
this.unit = unit;
}
public override string ToString()
{
return count.ToString() + unit.ToString();
}
}
new Weight(77.5, Unit.Kg).ToString();
// => "77.6Kg"
بخش ادعاهای شرکت Isaacs Asteroid Exploration Co. به شما مأموریت داده است که عملکرد سیستم ثبت ادعای زمین آنها را بهبود ببخشید.
هر بار که سیارکی جدید آمادهی بهرهبرداری میشود، از سوداگران دعوت میشود تا ادعای خود را نسبت به قطعهای زمین ثبت کنند. زمین سیارک به قطعههای چهارضلعی تقسیم میشود. سوداگران زمین را با مشخص کردن ابعاد آن ادعا میکنند.
هدف شما توسعهی سیستمی کارآمد برای مدیریت هجوم ثبت زمین است. این هجوم در گذشته باعث از کار افتادن وبسایت شده بود.
واحد اندازهگیری ۱۰۰ متر است، اما در این وظیفهها میتوانید آن را نادیده بگیرید.
پیادهسازی struct Plot را کامل کنید. این struct از ۴ struct مختصات تشکیل شده است که در سازندهی خود آنها را میپذیرد.
متد ClaimsHandler.StakeClaim() را پیادهسازی کنید تا بتوان یک ادعا را ثبت کرد.
متد ClaimsHandler.IsClaimStaked() را پیادهسازی کنید تا مشخص شود ادعایی ثبت شده است یا نه.
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.IsClaimStaked(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
// => true
متد ClaimsHandler.IsLastClaim() را پیادهسازی کنید تا ادعای فعلی را با ادعای قبلی مقایسه کنید.
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.IsLastClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
// => true
متد ClaimsHandler.GetClaimWithLongestSide() را پیادهسازی کنید تا همهی ادعاهای ثبتشده را بررسی کند و قطعهای با بلندترین ضلع را برگرداند. تضمین شده است که دادههای مختصات هر قطعه به شکل مستطیلی پیوسته است.
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.StakeClaim(new Plot(new Coord(10,1), new Coord(20,1), new Coord(10,2), new Coord(20,2)));
ch.GetClaimWithLongestSide();
// => new Plot(new Coord(1,1), new Coord(20,1), new Coord(1,2), new Coord(2,2))