По номеру года вывести его название - C#
Формулировка задачи:
Здравствуйте, умы
В чем вопрос, можно ли оптимизировать данный код и исправить его на "нормальный", потому что этот работает на костылях
Там я отнимаю:
Есть вот такая вот задача:
В восточном календаре принят 60-летний цикл, состоящий из 12- летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года вывести его название, если 1984 год был началом цикла — годом зеленой крысы. Написать программу с использованием оператора switch/case.using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Третее_задание
{
class Program
{
static void Main(string[] args)
{
int raschet, year;
string year_name;
Console.Write("Input year -> ");
year = Convert.ToInt32(Console.ReadLine());
raschet = (year % 12) + 1;
switch (raschet)
{
case 0: Console.ForegroundColor = ConsoleColor.Green; break;
case 1: Console.ForegroundColor = ConsoleColor.Red; break;
case 2: Console.ForegroundColor = ConsoleColor.Yellow; break;
case 3: Console.ForegroundColor = ConsoleColor.White; break;
case 4: Console.ForegroundColor = ConsoleColor.Cyan; break;
case 5: Console.ForegroundColor = ConsoleColor.Green; break;
case 6: Console.ForegroundColor = ConsoleColor.Red; break;
case 7: Console.ForegroundColor = ConsoleColor.Yellow; break;
case 8: Console.ForegroundColor = ConsoleColor.White; break;
case 9: Console.ForegroundColor = ConsoleColor.Cyan; break;
case 10: Console.ForegroundColor = ConsoleColor.Green; break;
case 11: Console.ForegroundColor = ConsoleColor.Red; break;
default: Console.ForegroundColor = ConsoleColor.Gray; break;
}
Console.WriteLine("Остаток от деления --> " + raschet);
// Обратно меняем цвет на серый
Console.ForegroundColor = ConsoleColor.Gray;
raschet = 0;
raschet = (year % 12) - 4;
year_name = "Ошибочка вышла [2].";
switch (raschet)
{
case 0: year_name = "Год крысы"; break;
case 1: year_name = "Год быка"; break;
case 2: year_name = "Год тигра"; break;
case 3: year_name = "Год кролика"; break;
case 4: year_name = "Год дракона"; break;
case 5: year_name = "Год змеи"; break;
case 6: year_name = "Год лошади"; break;
case 7: year_name = "Год козы"; break;
case 8: year_name = "Год обезьяны"; break;
case 9: year_name = "Год петуха"; break;
case 10: year_name = "Год собаки"; break;
case 11: year_name = "Год кабана"; break;
default: Console.WriteLine("Ошибочка вышла."); break;
}
Console.WriteLine("Название года -- > " + year_name);
}
}
}(year % 12) - 4;
Тут я прибавляю:(year % 12) + 1;
Но это же не правильно, но все же... как-то с натяжкой работает. Прошу Вас, кто читает это помочь мне в реализации моей просьбыРешение задачи: «По номеру года вывести его название»
textual
Листинг программы
using System;
namespace YearColor
{
class Program
{
private static readonly string[] _yearNames = new[]
{ "обезьяны", "петуха", "собаки", "кабана", "крысы", "быка",
"тигра", "кролика", "дракона", "змеи", "лошади", "козы" };
private static void Main()
{
Console.Write("Input year -> ");
int year = Convert.ToInt32(Console.ReadLine());
int raschet;
Console.ForegroundColor = GetYearColor(year, out raschet);
Console.WriteLine("Остаток от деления --> " + raschet);
// Обратно меняем цвет на серый
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Название года -- > " + GetYearName(raschet));
Console.ReadKey();
}
private static string GetYearName(int year)
{
if (year < 1 || year > 12) throw new ArgumentOutOfRangeException(year.ToString());
return "Год " + _yearNames[year - 1];
}
private static ConsoleColor GetYearColor(int year, out int yearNumber)
{
yearNumber = year % 12 + 1;
switch (yearNumber % 5)
{
case 0: return ConsoleColor.Green;
case 1: return ConsoleColor.Red;
case 2: return ConsoleColor.Yellow;
case 3: return ConsoleColor.White;
}
return ConsoleColor.Cyan;
}
}
}