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

dpokatski 1c21483e31 lab6 10 months ago
lab1 1c21483e31 lab6 10 months ago
lab2 030b5c7a7d lab2 11 months ago
lab3 b095883763 lab3 11 months ago
lab4 ae1ca97f06 lab4 11 months ago
lab5 80dcdc3d8c lab5 11 months ago
lab6 1c21483e31 lab6 10 months ago
readme.md 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;
}