Untitled
unknown
plain_text
2 years ago
4.2 kB
13
Indexable
class Checkpoint
{
public string Name { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public double? Penalty { get; set; }
}
abstract class CheckpointBuilder
{
public abstract void SetName(string name);
public abstract void SetCoordinates(double latitude, double longitude);
public abstract void SetPenalty(double? penalty);
public abstract Checkpoint Build();
}
class CheckpointConcreteBuilder : CheckpointBuilder
{
private string _name;
private double _latitude;
private double _longitude;
private double? _penalty;
public override void SetName(string name)
{
_name = name;
}
public override void SetCoordinates(double latitude, double longitude)
{
if (latitude < -90 || latitude > 90)
{
throw new ArgumentOutOfRangeException(nameof(latitude), "Широта должна быть в диапазоне от -90 до 90.");
}
if (longitude < -180 || longitude > 180)
{
throw new ArgumentOutOfRangeException(nameof(longitude), "Долгота должна быть в диапазоне от -180 до 180.");
}
_latitude = latitude;
_longitude = longitude;
}
public override void SetPenalty(double? penalty)
{
_penalty = penalty;
}
public override Checkpoint Build()
{
return new Checkpoint
{
Name = _name,
Latitude = _latitude,
Longitude = _longitude,
Penalty = _penalty
};
}
}
class TotalPenaltyCheckpointBuilder : CheckpointBuilder
{
private double totalPenalty = 0.0;
public override void SetName(string name)
{
}
public override void SetCoordinates(double latitude, double longitude)
{
}
public override void SetPenalty(double? penalty)
{
if (penalty != null)
{
totalPenalty += penalty.Value;
}
}
public override Checkpoint Build()
{
return null;
}
public double GetTotalPenalty()
{
return totalPenalty;
}
}
class Trip
{
private List<Checkpoint> checkpoints = new List<Checkpoint>();
public void AddCheckpoint(CheckpointBuilder builder)
{
var checkpoint = builder.Build();
checkpoints.Add(checkpoint);
}
public void ProcessCheckpoints()
{
foreach (var checkpoint in checkpoints)
{
Console.WriteLine($"Имя: {checkpoint.Name}");
Console.WriteLine($"Координаты: ({checkpoint.Latitude}, {checkpoint.Longitude})");
if (checkpoint.Penalty == null)
{
Console.WriteLine("Штраф: незачёт СУ");
}
else
{
Console.WriteLine($"Штраф: {checkpoint.Penalty} ч");
}
}
var totalPenaltyBuilder = new TotalPenaltyCheckpointBuilder();
foreach (var checkpoint in checkpoints)
{
totalPenaltyBuilder.SetPenalty(checkpoint.Penalty);
}
var totalPenalty = totalPenaltyBuilder.GetTotalPenalty();
Console.WriteLine($"Суммарный штраф: {totalPenalty} ч");
}
}
class Program3
{
public static void program3()
{
var trip = new Trip();
var checkpointBuilder = new CheckpointConcreteBuilder();
checkpointBuilder.SetName("Обязательный КП 1");
checkpointBuilder.SetCoordinates(55.1234, 95.6789);
checkpointBuilder.SetPenalty(null);
trip.AddCheckpoint(checkpointBuilder);
checkpointBuilder.SetName("Необязательный КП 2");
checkpointBuilder.SetCoordinates(-55.1234, -95.6789);
checkpointBuilder.SetPenalty(2.5);
trip.AddCheckpoint(checkpointBuilder);
checkpointBuilder.SetName("Необязательный КП 3");
checkpointBuilder.SetCoordinates(12.3456, 32.6177);
checkpointBuilder.SetPenalty(5);
trip.AddCheckpoint(checkpointBuilder);
trip.ProcessCheckpoints();
}
}
Editor is loading...