Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab5aip

.txt
Скачиваний:
7
Добавлен:
18.10.2022
Размер:
6.35 Кб
Скачать
using System;
using System.Collections.Generic;
using System.IO;

namespace lab5voytenko
{


abstract class ASpaceship
{
public string Name { get; protected set; }
public int Capacity { get; protected set; }


public ASpaceship(string name, int capacity)
{
Name = name;
Capacity = capacity;
}

public static bool CanParse(string input)
{
if (string.IsNullOrEmpty(input))
return false;


var chunks = input.Split(new[] { "\t", " " },
StringSplitOptions.RemoveEmptyEntries);
int capacity;

if (chunks.Length != 3)
return false;
if (!int.TryParse(chunks[1], out capacity) || capacity < 0)
return false;
return true;
}

public static ASpaceship Parse(string input)
{
if (string.IsNullOrEmpty(input))
throw new Exception("Входные данные пусты");


var chunks = input.Split(new[] { "\t", " " },
StringSplitOptions.RemoveEmptyEntries);
int capacity;


// Проверяем данные.
if (chunks.Length != 3)
throw new Exception("Формат некорректный");
if (!int.TryParse(chunks[1], out capacity) || capacity < 0)
throw new Exception("Вместимость корабля неверная");


var shipType = chunks[0];
var name = chunks[2];


// Выясняем тип корабля.
if (shipType.Equals("LongRange",
StringComparison.InvariantCultureIgnoreCase))
return new LongRangeShip(name, capacity);
if (shipType.Equals("MiddleRange",
StringComparison.InvariantCultureIgnoreCase))
return new MiddleRangeShip(name, capacity);
if (shipType.Equals("NearRange",
StringComparison.InvariantCultureIgnoreCase))
return new NearRangeShip(name, capacity);


throw new Exception($"Тип {shipType} не поддерживается");
}


public override string ToString()
{
return $"Корабль \"{Name}\", "
+ $"вместимость: {Capacity}, "
+ $"дальность хода: {GetRange()}";
}


public abstract double GetRange();
}


class LongRangeShip : ASpaceship
{
public LongRangeShip(string name, int capacity)
: base(name, capacity) { }


public override double GetRange()
{
return 0.001;
}
}


class MiddleRangeShip : ASpaceship
{
public MiddleRangeShip(string name, int capacity)
: base(name, capacity) { }


public override double GetRange()
{
return 0.0001;
}
}


class NearRangeShip : ASpaceship
{
public NearRangeShip(string name, int capacity)
: base(name, capacity) { }


public override double GetRange()
{
return 0.00003;
}
}

class APlanet
{
public APlanet(string name, (double x, double y) position, int cargo)
{
Name = name;
Position = position;
Cargo = cargo;
}
public string Name { get; protected set; }
public (double x, double y) Position { get; protected set; }
public int Cargo { get; protected set; }

public static bool CanParse(string input)
{
if (string.IsNullOrEmpty(input))
return false;


var chunks = input.Split(new[] { "\t", " " },
StringSplitOptions.RemoveEmptyEntries);
int cargo;


// Проверяем данные.
if (chunks.Length != 4)
return false;
if (!int.TryParse(chunks[3], out cargo) || cargo < 0)
return false;
return true;

}
public static APlanet Parse(string input)
{
if (string.IsNullOrEmpty(input))
throw new Exception("Входные данные пусты");


var chunks = input.Split(new[] { "\t", " " },
StringSplitOptions.RemoveEmptyEntries);
int cargo;


// Проверяем данные.
if (chunks.Length != 4)
throw new Exception("Формат некорректный");
if (!int.TryParse(chunks[3], out cargo) || cargo < 0)
throw new Exception("Вместимость корабля неверная");

(double x, double y) position;
position.x = double.Parse(chunks[1].Replace(".", ","));
position.y = double.Parse(chunks[2].Replace(".", ","));
var name = chunks[0];


return new APlanet(name, position, cargo);
}

public override string ToString()
{
return $"Планета: \"{Name}\", "
+ $"Позиция: {Position}, "
+ $"Нужно груза: {Cargo}";
}

}
class Program
{
static void Main(string[] args)
{
List<APlanet> planets = new List<APlanet>();

var fileName = @"data.txt";
var dataAsString = File.ReadAllText(fileName);
dataAsString.Replace('.', ',');
var dataAsArray = File.ReadAllLines(fileName);

//Console.WriteLine(dataAsString);


foreach (var line in dataAsArray)
Console.WriteLine(line);

foreach (var line in dataAsArray)
if (ASpaceship.CanParse(line))
Console.WriteLine(ASpaceship.Parse(line));
else if (APlanet.CanParse(line))
{
line.Replace('.', ',');
Console.WriteLine(APlanet.Parse(line));
}

}
}

}
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]