dpokatski 1c21483e31 lab6 10 months ago
..
readme.md 1c21483e31 lab6 10 months ago
task01.cs 1c21483e31 lab6 10 months ago
task02.cs 1c21483e31 lab6 10 months ago
task03.cs 1c21483e31 lab6 10 months ago
task04.cs 1c21483e31 lab6 10 months ago
task05.cs 1c21483e31 lab6 10 months ago
task06.cs 1c21483e31 lab6 10 months ago
task07.cs 1c21483e31 lab6 10 months ago
task08.cs 1c21483e31 lab6 10 months ago
task09.cs 1c21483e31 lab6 10 months ago
task10.cs 1c21483e31 lab6 10 months ago
task11.cs 1c21483e31 lab6 10 months ago
task12.cs 1c21483e31 lab6 10 months ago
task13.cs 1c21483e31 lab6 10 months ago
task14.cs 1c21483e31 lab6 10 months ago
task15.cs 1c21483e31 lab6 10 months ago
task16.cs 1c21483e31 lab6 10 months ago

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;
}