Определить номер дня недели по заданной дате

W910

Задание: Определить № дня недели по заданной дате. 1/1/1 был понедельник.Нужно консольное решение! Без textbox и прочего!Проблемы: При обычном считывании Read() считывает совсем другие числа (если вводить DD/MM/YYYY).
D = Read()
C = ChrW(Read())
M = Read()
C = ChrW(Read())
Y = Read()
При обработке типа данных Date не получается ввести с клавиатуры свою дату. При обработке типа Variant не могу придумать что дальше делать.Код, который я написал:
Imports System.Console  'Для записи методов ввода-вывода без указания имени класса Console
Module Main_p11 'Разное 11
    Sub Main()
        Dim D, M, Y, a, y1, m1, R As Integer
        Dim F As Boolean = False
        Dim Data As Object
        Dim S(7) As Integer
        S(0) = 7
        S(1) = 1
        S(2) = 2
        S(3) = 3
        S(4) = 4
        S(5) = 5
        S(6) = 6
        WriteLine("Enter the date in the format: DD/MM/YY")
        WriteLine("For example: 31/12/2015")
        Write("Your input: ")
        Data = ReadLine()
        If IsDate(Data) Then
            WriteLine(Data)
        Else : WriteLine("Wrong")
        End If
        ReadLine()
    End Sub
End Module
Код на С++ работает исправно, но что делать с Basic?:
Кликните здесь для просмотра всего текста
MAIN.CPP
#include <solution.сpp>                                    // Подключение вспомогательного заголовка
#include <string>
#include <iostream>
 
using namespace std;
 
// прототип формулы вычисления дня недели
int Date (int,                                              // день
          int,                                              // месяц
          int)                                              // год
 
// прототип проверки високосного года
bool Leap (int)                                             // год
 
// прототип проверки введённой даты
bool Right_Date (int,                                       // день
                 int,                                       // месяц
                 int)                                       // год
 
int main() {
    int D,                                                  // день
        M,                                                  // месяц
        Y;                                                  // год
    bool f=false;                                           // флаг для проверки ввода
    char C;                                                 // вспомгательный символ для ввода
    string S[7]={"7", "1", "2", "3", "4", "5", "6"};        // номера дней недели
    while (!f) {                                            // проверка ввода
        cout << "Enter the date in the format DD/MM/YY."    // Введите дату в формате ДД/ММ/ГГ.
             << endl;
        cout << "For example: 31/12/2015."                  // Например: 31/12/2015
             << endl;
        cout << "Your input: ";                             // Ваш ввод:
        cin >> D >> C >> M >> C >> Y;                       // Ввод даты
        if (Right_Date(D, M, Y)==true) {                    // Проверка даты
            cout << "Weekday number: "                      // Номер дня недели:
                 << S[Date(D, M, Y)]                        // Рассчёт дня недели
                 << "."
                 << endl;
            f = true;                                       // Выход из цикла
        }
        else cout << "Error! Invalid input!"                // Ошибка! Неверный ввод!
                  << endl << endl;
    }
    return 0;
}
SOLUTION.CPP
// формула вычисления дня недели
int Date (int D,                                // день
          int M,                                // месяц
          int Y)                                // год
{
    int a, y, m, R;                             // вспомогательные переменные для формулы
    a=(14-M)/12;
    y=Y-a;
    m=M+12*a-2;
    R=7000+(D+y+y/4-y/100+y/400+(31*m)/12);
    return R%7;                                 // результат формулы
}
 
// проверка високосного года
bool Leap (int Y)                               // год
{
    if (Y%4==0 && Y%100!=0 || Y%400==0)
        return true;
    else return false;
}
 
// проверка введённой даты
bool Right_Date (int D,                         // день
                 int M,                         // месяц
                 int Y)                         // год
{
    if(D > 0 && D < 32 &&                       // диапазон максимальных значений дня
       M > 0 && M < 13 &&                       // диапазон максимальных значений месяца
       Y > 0 && Y < 32767)                      // диапазон максимальных значений года
        if ((M == 2 || M == 4 ||
             M == 6 || M == 9 ||
             M == 11) && D < 31)                // проверка месяцев, в которых максимальное значение = 30
            if (Leap(Y)==true &&
                M == 2 && D < 30);              // проверка февраля для високосного года
            else if (Leap(Y)==false &&
                     M == 2 && D < 29)          // проверка февраля для невисокосного года
                    return true;
                 else return false;
        else;
    else return false;
}
2 ответа

W910

Попробуйте так:
Sub Main()
        Dim data As Date
        WriteLine("Enter the date in the format: DD/MM/YY")
        WriteLine("For example: 31/12/2015")
        Write("Your input: ")
        data = ReadLine()
        If IsDate(data) Then
            WriteLine("Day of the week: " & data.DayOfWeek)
        Else : WriteLine("Wrong")
        End If
        ReadLine()
    End Sub


W910

Благодарю, но я сделал так:
Module Main_p11
    Sub Main()
        Dim Дата As Date
        Dim Data As Object
        Dim F As Boolean
        While F = False
            WriteLine("Enter the date in the format: DD/MM/YY")
            WriteLine("For example: 31/12/2015")
            WriteLine("Your input:")
            Data = ReadLine()
            If IsDate(Data) Then
                Дата = Data
                Write("Weekday number: ")
                Write(Дата.DayOfWeek)
                F = True
            Else : WriteLine("Incorrect input!")
                WriteLine()
            End If
        End While
        ReadLine()
    End Sub
End Module