Чернов Данил И-21

dpokatski 1c21483e31 lab6 hace 8 meses
lab1 1c21483e31 lab6 hace 8 meses
lab2 030b5c7a7d lab2 hace 9 meses
lab3 b095883763 lab3 hace 9 meses
lab4 ae1ca97f06 lab4 hace 9 meses
lab5 80dcdc3d8c lab5 hace 9 meses
lab6 1c21483e31 lab6 hace 8 meses
readme.md 1c21483e31 lab6 hace 8 meses

readme.md

Lab 6. Работа с данными типа: множество, дата, кортежи.

Task 1

solution:

static void Main(string[] args)
{
    Console.WriteLine("Введите дату в формате ДД.ММ.ГГГГ:");
    string date = Console.ReadLine();

    if (IsValidDate(date))
    {
        Console.WriteLine("Правильная дата.");
    }
    else
    {
        Console.WriteLine("Что-то не так попробуй ещё раз. Пример: 11.11.2011");
    }
}

static bool IsValidDate(string date)
{
    try
    {
        DateTime.ParseExact(date, "dd.MM.yyyy", null);
        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

Task 2

solution:

static void Main(string[] args)
{
    Console.WriteLine("Введите первую дату в формате ДД.ММ.ГГГГ:");
    DateTime A = DateTime.ParseExact(Console.ReadLine(), "dd.MM.yyyy", null);

    Console.WriteLine("Введите вторую дату в формате ДД.ММ.ГГГГ:");
    DateTime B = DateTime.ParseExact(Console.ReadLine(), "dd.MM.yyyy", null);

    TimeSpan timeSpan = B - A;

    Console.WriteLine($"Количество дней между {A} и {B}: {timeSpan.Days}");
}

Task 3

solution:

static void Main(string[] args)
{
    Console.WriteLine("Введите первую дату и вермя в формате ДД.ММ.ГГГГ ЧЧ:");
    DateTime A = DateTime.ParseExact(Console.ReadLine(), "dd.MM.yyyy HH", null);

    Console.WriteLine("Введите вторую дату и вермя в формате ДД.ММ.ГГГГ ЧЧ:");
    DateTime B = DateTime.ParseExact(Console.ReadLine(), "dd.MM.yyyy HH", null);

    TimeSpan timeSpan = B - A;

    Console.WriteLine($"Количество часов между {A} и {B}: {timeSpan.TotalHours}");
}

Task 4

solution:

static void Main(string[] args)
{
    Console.WriteLine("Введите первую дату и вермя с минутами в формате ДД.ММ.ГГГГ ЧЧ:ММ:");
    DateTime A = DateTime.ParseExact(Console.ReadLine(), "dd.MM.yyyy HH:mm", null);

    Console.WriteLine("Введите вторую дату и вермя с минутами в формате ДД.ММ.ГГГГ ЧЧ:ММ:");
    DateTime B = DateTime.ParseExact(Console.ReadLine(), "dd.MM.yyyy HH:mm", null);

    TimeSpan timeSpan = B - A;

    Console.WriteLine($"Количество минут между {A} и {B}: {timeSpan.TotalMinutes}");
}

Task 5

solution:

static void Main(string[] args)
{
    Console.WriteLine("Введите год:");
    int year = int.Parse(Console.ReadLine());

    DateTime progday = new DateTime(year, 9, 13).AddDays(255);

    Console.WriteLine($"День программиста в {year} году: {progday.ToString("dd.MM.yyyy")} ({progday.DayOfWeek})");
}

Task 6

solution:

static void Main()
{
    Console.WriteLine("Введите год");
    int year = int.Parse(Console.ReadLine());
    Console.WriteLine("Введите число от 1 до 365");
    int day = int.Parse(Console.ReadLine());
    if (day >= 1 || day<=365)
    {
        DateTime den = new DateTime(year, 1, 1).AddDays(day-1);
        Console.WriteLine(($"В {year} году день {day} является: {den.ToString("dd.MM.yyyy")} ({den.DayOfWeek})")); 
    }
    else
    {
        Console.WriteLine("Введите число от 1 до 365");
    }
}

Task 7

solution:

Console.Write("Введите дату: ");
DateTime date = new DateTime(2024,4, 30);
DateTime date1 = DateTime.Parse(Console.ReadLine());
if (date > date1)
{
    TimeSpan difference = date - date1;
    int s = difference.Days;
    Console.WriteLine("Осталось " + s + " дней до экзамена.");
}

else if (date < date1)
{
    TimeSpan difference = date1 - date;
    int s = difference.Days;
    Console.WriteLine("Прошло " + s + " дней после экзамена.");
}

else
{
    Console.WriteLine("Сегодня экзамен!");
}

Task 8

solution:

Console.Write("Введите дату: ");
DateTime date1 = DateTime.Parse(Console.ReadLine());
date1 = date1.AddDays(1);
Console.WriteLine("Завтра будет: " + date1.ToString("dd.MM.yyyy"));

Task 9

solution:

Console.Write("Введите день и месяц рождения: ");
DateTime date1 = DateTime.ParseExact(Console.ReadLine(), "dd.MM", null);
DateTime date2 = DateTime.ParseExact(Console.ReadLine(), "dd.MM", null);
if (date1 > date2)
{
    TimeSpan difference = date1 - date2;
    int day = difference.Days;
    Console.WriteLine("Осталось " + day + " до дня рождения.");
}
else if (date1 < date2)
{
    TimeSpan difference = date2 - date1;
    int day = difference.Days;
    Console.WriteLine("Прошло " + day + " дней со дня рождения.");
}
else
{
    Console.WriteLine("С днём рождения!");
}

Task 10

solution:

Console.Write("Введите время: ");
string time1 = Console.ReadLine();

if (TimeSpan.TryParse(time1, out TimeSpan time))
{
    int seconds = (time.Hours * 3600) + (time.Minutes * 60) + time.Seconds;
    Console.WriteLine("С начала суток прошло: " + seconds);
}
else
{
    Console.WriteLine("Неккоректный формат времени!");
}

Task 11

solution:

List<DateTime> Dates = new List<DateTime>
{
    new DateTime(2011, 09,07),
    new DateTime(2018,03,15),
    new DateTime(2015,05,19),
    new DateTime(2022,07,15),
    new DateTime(2009,02,25),
    new DateTime(2021,09,16),
    new DateTime(2001,06,29),
    new DateTime(2024,03,04)
};

DateTime today = DateTime.Today;
DateTime date1 = Dates[0];
TimeSpan date2 = today - date1;

foreach (DateTime date in Dates)
{
    TimeSpan difference = today - date;
    if (Math.Abs(difference.Days) < Math.Abs(date2.Days))
    {
        date2 = difference;
        date1 = date;
    }
}

Console.WriteLine("Ближайшая дата: " + date1.ToShortDateString());

Task 12

solution:

List<DateTime> Dates = new List<DateTime>
{
    new DateTime(2011, 09,07),
    new DateTime(2018,03,15),
    new DateTime(2015,05,19),
    new DateTime(2022,07,15),
    new DateTime(2009,02,25),
    new DateTime(2021,09,16),
    new DateTime(2001,06,29),
    new DateTime(2024,03,04)
};

DateTime date1 = GetNearestDate(Dates);
Console.WriteLine($"Ближайшая дата рождения: {date1:dd.MM.yyyy}");

static DateTime GetNearestDate(List<DateTime> dates)
{
    DateTime today = DateTime.Today;
    dates.Sort((d1, d2) => Math.Abs((d1 - today).Days).CompareTo(Math.Abs((d2 - today).Days)));
    return dates[0];
}

Task 13

solution:

string[] Dates = { "19.06.1999", "16.03.2003", "29.10.2007", "16.03.2021", "12.03.2007" };
Dictionary<string, int> month1 = new Dictionary<string, int>();

foreach (var date in Dates)
{
    DateTime date1 = DateTime.ParseExact(date, "dd.MM.yyyy", null);
    string month = date1.ToString("MMMM");

    if (month1.ContainsKey(month))
    {
        month1[month]++;
    }
    else
    {
        month1.Add(month, 1);
    }
}

var popul = month1.Aggregate((l, r) => l.Value > r.Value ? l : r).Key;
Console.WriteLine("Самый популярный месяц: " + popul);

Task 14

solution:

int years1 = 10;
int count1 = 0;
int count2 = 0;
        
for (int year = 1; year <= years1; year++)
{
    for (int month = 1; month <= 12; month++)
    {
        DateTime date1 = new DateTime(year, month, 13);
        if (date1.DayOfWeek == DayOfWeek.Friday)
        {
            count1++;
        }
        count2++;
    }
}

Console.WriteLine("Вероятности выпадения 13 числа каждого месяца на:");
Console.WriteLine("Понедельник: " + (double)CountOfThirteenths(DayOfWeek.Monday) / count2);
Console.WriteLine("Вторник: " + (double)CountOfThirteenths(DayOfWeek.Tuesday) / count2);
Console.WriteLine("Среда: " + (double)CountOfThirteenths(DayOfWeek.Wednesday) / count2);
Console.WriteLine("Четверг: " + (double)CountOfThirteenths(DayOfWeek.Thursday) / count2);
Console.WriteLine("Пятницу: " + (double)count1 / count2);
Console.WriteLine("Субботу: " + (double)CountOfThirteenths(DayOfWeek.Saturday) / count2);
Console.WriteLine("Воскресенье: " + (double)CountOfThirteenths(DayOfWeek.Sunday) / count2);

static int CountOfThirteenths(DayOfWeek day)
{
    int count3 = 0;
    for (int year = 1; year <= 10; year++)
    {
        for (int month = 1; month <= 12; month++)
        {
            DateTime date1 = new DateTime(year, month, 13);
            if (date1.DayOfWeek == day)
            {
                count3++;
            }
        }
    }
    return count3;
}

Task 15

solution:

string wod = "00:00-01:00,00:30-02:30,01:30-03:00,02:00-04:00,02:30-05:00";

string[] schel = wod.Split(',');
int[] time1 = new int[24];

foreach (string schedule in schel)
{
    string[] times = schedule.Split('-');
    string[] startTime = times[0].Split(':');
    string[] endTime = times[1].Split(':');

    int hour1 = int.Parse(startTime[0]);
    int hour2 = int.Parse(endTime[0]);

    for (int i = hour1; i < hour2; i++)
    {
        time1[i]++;
    }
}

int maxTime = 0;
for (int i = 0; i < 24; i++)
{
    if (time1[i] > maxTime)
    {
        maxTime = time1[i];
    }
}

Console.WriteLine("Максимальное количество касс работает в интервале: ");
for (int i = 0; i < 24; i++)
{
    if (time1[i] == maxTime)
    {
        Console.WriteLine("{0:00}:00 - {1:00}:00", i, i + 1);
    }
}

Task 16

solution:

int years = 2003;
int weeks = CalculateWeekends(years);
Console.WriteLine($"Количество выходных дней в {years} году: {weeks}");

static int CalculateWeekends(int year)
{
    DateTime date1 = new DateTime(year, 1, 1);
    DateTime date2 = new DateTime(year, 12, 31);
    int c = 0;
    for (var date = date1; date <= date2; date = date.AddDays(1))
    {
        if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
        {
            c++;
        }
    }
    return c;
}