Ошибка в вечном календаре: все правильно работает до 28.02.0100 года - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. У меня такой вопрос. Делаю вечный календарь с 1.1.1 Получился такой кусок кода.
string temp = null;
                    s = Console.ReadLine();
                    int day = 0;
                    int month = 0;
                    int year = 0;
                    int a = 0;
                    for (int i = 0; i < s.Length; i++)
                    {
                        if (s[i] == '.' || i == s.Length - 1)
                        {
                            switch (a)
                            {
                                case (0):
                                    {
                                        day = int.Parse(temp);
                                    }
                                    break;
                                case (1):
                                    {
                                        month = int.Parse(temp);
                                    }
                                    break;
                                case (2):
                                    {
                                        temp += s[i];
                                        year = int.Parse(temp);
                                    }
                                    break;
                            }
                            a++;
                            temp = null;
                        }
                        else
                        {
                            temp += s[i];
                        }
 
                    }
                    if (day < 0 || day > 31)
                        throw new Exception();
                    if (month < 0 || month > 12)
                        throw new Exception();
                    if (year < 0 || year > 9999)
                        throw new Exception();
                    // int af=(int)( (year - 1) * 12 * 31 + (month - 1) * 31 + day ) % 7;
                    long af = 0;
                    short aa = 1;
                    for (int i = 1; i < year; i++)
                    {
                        if (aa == 4 && i != 1)
                        {
                            aa = 0;
                            af += 366;
                        }
                        else
                        {
                            af += 365;
                        }
                        aa++;
 
                    }
                  
                    for (int i = 1; i < month; i++)
                    {
                        switch (i)
                        {
                            case (1):
                                af += 31;
                                break;
                            case (2):
                                if (aa == 4 )
                                    af += 29;
                                else
                                    af += 28;
                                break;
                            case (3):
                                af += 31;
                                break;
                            case (4):
                                af += 30;
                                break;
                            case (5):
                                af += 31;
                                break;
                            case (6):
                                af += 30;
                                break;
                            case (7):
                                af += 31;
                                break;
                            case (8):
                                af += 31;
                                break;
                            case (9):
                                af += 30;
                                break;
                            case (10):
                                af += 31;
                                break;
                            case (11):
                                af += 30;
                                break;
                            case (12):
                                af += 31;
                                break;
                        }
                    }
                    for (int i = 1; i < day; i++)
                    {
                        af++;
                    }
                    int fas = (int) af%7;
                    switch (fas)
                    {
                        case (6):
                            Console.WriteLine("Введенная дата Воскресенье.");
                            break;
                        case (0):
                            Console.WriteLine("Введенная дата Понедельник.");
                            break;
                        case (1):
                            Console.WriteLine("Введенная дата Вторник.");
                            break;
                        case (2):
                            Console.WriteLine("Введенная дата Среда.");
                            break;
                        case (3):
                            Console.WriteLine("Введенная дата Четверг.");
                            break;
                        case (4):
                            Console.WriteLine("Введенная дата Пятница.");
                            break;
                        case (5):
                            Console.WriteLine("Введенная дата Суббота.");
                            break;
                    }
У меня все правильно до 28.02.0100 года. Ну по логике вещей, сотый год ведь високосный, он кратен 4. Почему тогда во всех календарях он не високосный (т.е. имеет 28 дней). Даже пес с ним. Если не учитывать этот год, все равно современные дни недели не совпадают. Помогите найти ошибку.

Решение задачи: «Ошибка в вечном календаре: все правильно работает до 28.02.0100 года»

textual
Листинг программы
if (i!=1 && (i%400==0 || (i%4==0 && i%100!=0)))

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы