Fără Descriere

akapralov 4e30361100 lab 10 luni în urmă
kapralov9 4e30361100 lab 10 luni în urmă
kapralov9.sln 4e30361100 lab 10 luni în urmă
readme.md 4e30361100 lab 10 luni în urmă

readme.md

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

Индивидуальное задание номер 12 "100!-2^100"

class Program
{
    static void Main()
    {
        // Вычисление 100!
        BigInteger factorial = Factorial(100);

        // Вычисление 2^100
        BigInteger powerOf2 = BigInteger.Pow(2, 100);

        // Вычисление разности
        BigInteger result = factorial - powerOf2;

        Console.WriteLine(result);
    }

    // Метод для вычисления факториала
    static BigInteger Factorial(int n)
    {
        if (n == 0 || n == 1)
        {
            return 1;
        }
        else
        {
            return n * Factorial(n - 1);
        }
    }
}

Общие задания с датами.

1. Ввести с консоли строку в формате ДД.ММ.ГГГГ. Проверьте является ли введенная строка валидной датой.

Console.WriteLine("Введите дату: ");
string date1 = Console.ReadLine();
DateTime date;
if (DateTime.TryParse(date1, out date))
{
    Console.WriteLine("Введённая дата соответствует валидной дате. ");
}
else
{
    Console.WriteLine("Введённая дата не соответствует валидной дате. ");
}

2. Найти количество дней между двумя датами.

DateTime date1 = new DateTime(2025, 10, 20);
DateTime date2 = new DateTime(2024, 9, 30);

TimeSpan difference = date1 - date2;

int s = difference.Days;

Console.WriteLine("Разница между датами в днях: " + s);

3. Найти количество часов между двумя датами.

DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25);
DateTime date2 = new DateTime(2010, 5, 10, 13, 25, 45);
TimeSpan difference = date1 - date2;

int s = difference.Hours;

Console.WriteLine("Разность между двумя датами в часах: " + s);

4. Найти количество минут между двумя датами.

DateTime date1 = new DateTime(1998, 6, 9, 15, 45, 4);
DateTime date2 = new DateTime(1961, 2, 1, 13, 13, 5);
TimeSpan difference = date1 - date2;

int s = difference.Minutes;

Console.WriteLine("Разность между двумя датами в минутах: " + s);

5. Найти "день программиста" (256-й день в году) для указанного года (ввести с консоли). Вывести дату и день недели.

Console.Write("Введите год: ");
int year = Convert.ToInt16(Console.ReadLine());
DateTime date1 = new DateTime(year, 1, 1).AddDays(255);
Console.WriteLine("День программиста: " + date1.ToShortDateString() + " (" + date1.DayOfWeek + ")");

6. Известен номер n некоторого дня года (1 ≤ n ≤ 365). Определить номер и название дня недели, на который

  выпадает данный день года.
Console.Write("Введите номер дня в году: ");
int n = int.Parse(Console.ReadLine());
DateTime date = new DateTime(DateTime.Now.Year, 1, 1).AddDays(n - 1);
Console.WriteLine("День недели: " + date.DayOfWeek + ", номер дня в году: " + date.DayOfYear);

7. Задана дата экзамена. С клавиатуры надо вводить другую дату, в случае, если дата раньше даты экзамена, вывести "осталось n дней", если уже прошел экзамен "прошло n дней", и если экзамен сегодня "сегодня экзамен!"

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("Сегодня экзамен!");
}

8. Вывести дату в формате ДД.ММ.ГГГГ для "завтра"

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

9. Задан день и месяц рождения в формате dd.mm. Определите, сколько дней осталось/прошло с дня рождения. Если сегодня - день рождения, то вывести поздравление.

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 s = difference.Days;
    Console.WriteLine("Осталось " + s + " до дня рождения.");
}
else if (date1 < date2)
{
    TimeSpan difference = date2 - date1;
    int s = difference.Days;
    Console.WriteLine("Прошло " + s + " дней со дня рождения.");
}
else
{
    Console.WriteLine("Сегодня день рождения!");
}

10. Часы показывают время в формате hh:mm:ss. Определите количество секунд, которое прошло с начала суток.

List<DateTime> Dates = new List<DateTime>
{
    new DateTime(2017, 12,1),
    new DateTime(2018,1,2),
    new DateTime(2019,2,3),
    new DateTime(2020,3,4),
    new DateTime(2021,4,5),
    new DateTime(2022,5,6),
    new DateTime(2023,6,22),
    new DateTime(2023,12,31)
};

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());

11. Задан неупорядоченный список дат в формате ДД.ММ.ГГГГ, найти ближайшую (к сегодняшнему дню) дату из списка.

List<DateTime> Dates = new List<DateTime>
{
    new DateTime(2017, 12,1),
    new DateTime(2018,1,2),
    new DateTime(2019,2,3),
    new DateTime(2020,3,4),
    new DateTime(2021,4,5),
    new DateTime(2022,5,6),
    new DateTime(2023,6,22),
    new DateTime(2023,12,31)
};

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());

12. Задан неупорядоченный список дней рождений в формате ДД.ММ.ГГГГ. Вывести упорядоченный список месяцев с количеством дней рождений в этом месяце.

List<DateTime> Dates = new List<DateTime>
{
    new DateTime(1980, 4, 15),
    new DateTime(2022, 9, 22),
    new DateTime(2023, 1, 8),
    new DateTime(2000, 12, 31)
};
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];
}

13. Поиск наиболее популярного месяца: объявите массив произвольных дат в формате ДД.ММ.ГГГГ. Найдите самый популярный месяц.

string[] Dates = { "15.04.1980", "16.08.2006", "22.12.2023", "19.02.1861", "01.01.2000" };
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);

14. Пятница, 13-е. Докажите, что 13-е число месяца чаще всего приходится на пятницу. Напишите программу, которая выводит на экран 7 чисел: вероятности выпадения 13 числа каждого месяца на понедельник, вторник, среду, четверг, пятницу, субботу, воскресенье.

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

15. На одном из московских вокзалов билеты продают N касс. Каждая касса работает без перерыва определенный промежуток времени по фиксированному расписанию. Требуется определить, в какой промежуток времени работает наибольшее количество касс. (на входе в программу строка вида 00:00-01:00,00:30-02:30,...)

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

16. Для заданного года посчитайте количество выходных дней в этом году (то есть количество суббот и воскресений).

int years = 2006;
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;
}