C#

Помогите написать программу на C# По задачнику PascalABC Case20

Вывести знак Зодиака, соответствующий этой дате: "Водолей" (20.1-18.2), "Рыбы" (19.2-20.3), "Овен" (21.3-19.4), "Телец" (20.4-20.5), "Близнецы" (21.5-21.6), "Рак" (22.6-22.7), "Лев" (23.7-22.8), "Дева" (23.8-22.9), "Весы" (23.9-22.10), "Скорпион" (23.10-22.11), "Стрелец", (23.11-21.12), "Козерог" (22.12-19.1)
using System;
using System.Globalization;
namespace Answer {
class Program {
static void Main() {
var zodiac = new Zodiac();
while (true) Console.WriteLine(zodiac.Find(SetDate()));
}
public struct Sign {
public string name;
public DateTime begin;
public DateTime last;
public Sign(string name, DateTime begin, DateTime last) {
this.name = name;
this.begin = begin;
this.last = last;
}
public bool Contains(DateTime dt) {
return dt >= begin && dt <= last;
}
}
static public DateTime SetDate() {
var date = new DateTime();
bool flag;
do {
flag = false;
var day = InputInt32("Число: ");
var month = InputInt32("Месяц: ");
try {
date = new DateTime(2020, month, day);
} catch (ArgumentOutOfRangeException e) {
Console.WriteLine(e.Message);
flag = !flag;
}
} while (flag);
return date;
}
public struct Zodiac {
public string Find(DateTime dt) {
var signs = new Sign[] {
new Sign( "Водолей", new DateTime(2020, 1, 20), new DateTime(2020, 2, 18)),
new Sign( "Рыбы", new DateTime(2020, 2, 19), new DateTime(2020, 3, 20)),
new Sign( "Овен", new DateTime(2020, 3, 21), new DateTime(2020, 4, 19)),
new Sign( "Телец", new DateTime(2020, 4, 20), new DateTime(2020, 5, 20)),
new Sign( "Близнецы", new DateTime(2020, 5, 21), new DateTime(2020, 6, 21)),
new Sign( "Рак", new DateTime(2020, 6, 22), new DateTime(2020, 7, 22)),
new Sign( "Лев", new DateTime(2020, 7, 23), new DateTime(2020, 8, 22)),
new Sign( "Дева", new DateTime(2020, 8, 23), new DateTime(2020, 9, 22)),
new Sign( "Весы", new DateTime(2020, 9, 23), new DateTime(2020, 10, 22)),
new Sign( "Скорпион", new DateTime(2020, 10, 23), new DateTime(2020, 11, 22)),
new Sign( "Стрелец", new DateTime(2020, 11, 23), new DateTime(2020, 12, 21)),
new Sign( "Козерог", new DateTime(2020, 12, 22), new DateTime(2020, 12, 31)),
new Sign( "Козерог", new DateTime(2020, 1, 1), new DateTime(2020, 1, 19))
};
foreach (var sign in signs) if (sign.Contains(dt)) return sign.name;
return "Неизвестная ошибка!";
}
}
static private int InputInt32(string message) {
int value;
do {
Console.Write(message);
} while (!int.TryParse(Console.ReadLine(), NumberStyles.Integer, new CultureInfo("ru-RU"), out value));
return value;
}
}
}
АМ
Азамат Мухамедрахим
95 622
Лучший ответ
sing System;
using System.Linq;

class Program
{
static void Main()
{
var zodiacs = new object[][] {
new object[] { "Водолей", 120},
new object[] { "Рыбы", 219 },
new object[] { "Овен", 321 },
new object[] { "Телец", 420 },
new object[] { "Близнецы", 521 },
new object[] { "Рак", 622 },
new object[] { "Лев", 723 },
new object[] { "Дева", 823 },
new object[] { "Весы", 923 },
new object[] { "Скорпион", 1023 },
new object[] { "Стрелец", 1123 },
new object[] { "Козерог", 1222 },
};

Console.Write("Введите месяц: ");
var code = int.Parse(Console.ReadLine());
Console.Write("Введите день: ");
code = code * 100 + int.Parse(Console.ReadLine());

Console.WriteLine("Выбраный знак: " + (zodiacs.LastOrDefault(x => (int)x[1] <= code)?[0] ?? zodiacs.Last()[0]));
Console.ReadKey(true);
}
}