


Помогите решить задачи. Нужно составить программы на языке C#.
1) Разработайте программу, которая запрашивает у пользователя, сколько в среднем часов в день он спит, сколько ест и сколько валяет дурака, а затем вычисляет, сколько часов пользователь спит, ест и валяет дурака за год (номер года также вводится с клавиатуры, год может быть високосным).
2) Для студента Иванова счастливыми оказываются экзаменационные билеты, номера которых делятся на 7 или содержат цифру 7. Разработайте программу, которая получает с консоли номер билета, и определяет, станет ли он для Иванова счастливым. Будем считать, что максимальный номер билета не превышает 99.
3) Разработать программу, выводящую все числа от 10 000 до 0 (именно так, в обратном порядке), делящиеся на 2 и на 3 одновременно.
я не балбес, решить могу и сам, но сейчас поджимает время. А потому буду благодарен за помощь.
Я написал код только для второго и третьего задания. Здесь лучше использовать async, чтобы числа и рассчеты делась одновременно, и это не нагружало систему (код я прокомментировал, так что не переживай)
Код для третьего задания. Вообще, тут было немного сложвато из-за асинка:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// инициализируем список делителей в divisors
var divisors = new List<int> { 2, 3 };
// запускаем асинхронный метод получения чисел в диапазоне от 10000 до 0,
// делящихся на все элементы списка divisors, и сохраняем результат в переменной numbers.
var numbers = GetNumbersAsync(10000, 0, divisors);
// объединяем числа выведеенные через GetNumbersAsync в одну строку и разделяем их запятыми
var result = await numbers.JoinAsync(", ");
Console.WriteLine(result);
}
static async IAsyncEnumerable<int> GetNumbersAsync(int start, int end, List<int> divisors)
{
// метод формирует асинхронную последовательность целых чисел, делящихся на все элементы списка "divisors"
for (int i = start; i >= end; i--)
{
if (divisors.TrueForAll(divisor => i % divisor == 0))
{
// метод работает в режиме генератора элементов (yield return)
// возвращаем текущее значение "i" последовательности
yield return i;
}
}
await Task.CompletedTask; // вообще, необязательная команда, но она выполняет завершение асинхронной операции
}
}
// расширенный класс для асинка, позволяющий асинхронно обработать все элементы последовательности и объединить их в строку,
// разделяя элементы заданными через separator
public static class AsyncExtensions
{
// расширяем асинк в JoinAsync при помощи генерика (generics)
public static async Task<string> JoinAsync<T>(this IAsyncEnumerable<T> source, string separator)
{
string result = null;
await foreach (var item in source)
{
// добавляем в строку separator и текущий элемент последовательности
if (result == null) result = item.ToString();
else result += separator + item.ToString();
}
return result;
}
}
Код второго задания выброшу по частям в комменты. Если нужно - могу сделать так же и для первого.