Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Помогите решить задачи. Нужно составить программы на языке C#.

1) Разработайте программу, которая запрашивает у пользователя, сколько в среднем часов в день он спит, сколько ест и сколько валяет дурака, а затем вычисляет, сколько часов пользователь спит, ест и валяет дурака за год (номер года также вводится с клавиатуры, год может быть високосным).

2) Для студента Иванова счастливыми оказываются экзаменационные билеты, номера которых делятся на 7 или содержат цифру 7. Разработайте программу, которая получает с консоли номер билета, и определяет, станет ли он для Иванова счастливым. Будем считать, что максимальный номер билета не превышает 99.

3) Разработать программу, выводящую все числа от 10 000 до 0 (именно так, в обратном порядке), делящиеся на 2 и на 3 одновременно.

Дополнен

я не балбес, решить могу и сам, но сейчас поджимает время. А потому буду благодарен за помощь.

По дате
По рейтингу
Аватар пользователя
Мыслитель

Я написал код только для второго и третьего задания. Здесь лучше использовать async, чтобы числа и рассчеты делась одновременно, и это не нагружало систему (код я прокомментировал, так что не переживай)

Код для третьего задания. Вообще, тут было немного сложвато из-за асинка:

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

Код второго задания выброшу по частям в комменты. Если нужно - могу сделать так же и для первого.