Объясните вкратце работу программы, не догоняю в какой строке что происходит и задается
Ответы на вопрос:
Linq используется для генерации последовательности
using System.Linq;
Длина последовательности задаётся тут.
private static int Size => 7
Разберём главный код.
По умолчанию Rand имеет большой разброс. Поэтому мы хотим его ограничить, но так, чтобы мы точно не знали значения max и min. (чтобы искать по-честному). Этого можно не делать, но будут страшные значения генерироваться.
Для этого генерируем случайно крайние значения диапазона генерации.
int seedMin = new Random().Next(1, 40);
int seedMax = new Random().Next(seedMin + 5, seedMin + 40);
Далее генерируем саму последовательность.
var arr = Enumerable //Класс из Linq для работы с перечислениями
.Repeat(0, Size) // Задаём количество
.Select(_ => new Random().Next(seedMin, seedMax)) // Для каждого элемента генерируем случайное значение
.ToArray(); // Делаем массивом
Ну а теперь, можно заняться поиском и вычислением.
int max = arr[0], min = arr[0]; // Предполагаем max и min первым элементом
foreach (var el in arr) {
max = Math.Max(el, max); // Если очередной больше - заменяем max
min = Math.Min(el, min); // Если очередной меньше - заменяем min
}
Теперь мы нашли минимальным и максимальный элементы. Нам надо убрать их из последовательности ровно по одному разу. Для этого создаём переменные-флаги типа bool. Если наткнёмся на max или min при расчете, то пропустим их и отметим, что уже встречали.
Создадим переменную для произведения и приравняем к 1 (если 0, то произведение будет 0).
int product = 1;
bool maxIsCatched = false, minIsCatched = false;
Ищем произведение.
foreach (var el in arr)
{
if (!maxIsCatched && el == max) // Если не встречали до этого и встретили сейчас
{
maxIsCatched = true; //Запоминаем факт встречи
continue; // Пропускаем шаг
}
if (!minIsCatched && el == min) // По аналогии но с min
{
minIsCatched = true;
continue;
}
product *= el; // Это всё равно, что написать product = product * el
}
Далее просто выводим результаты.
Сначала выводим сгенерированную последовательность.
Затем найденные max, min и product.
PrintArr(arr);
Console.WriteLine($"Max: {max}; Min: {min}; Product: {product}.");
Метод для печати последовательности написан самостоятельно и выглядит так.
private static void PrintArr<T>(IEnumerable<T> arr)
{
foreach (var el in arr) // Перебираем
{
Console.Write(el); // Печатаем
Console.Write(" ");
}
Console.WriteLine();
}
<T> используется для того, чтобы не зависеть от значений последовательности. Туда можно запихнуть любой массив или список.
IEnumerable<T> - обобщение для любой перечислимой коллекции.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
Anna6966626.06.2023 00:58
-
maksimsavelev128.04.2021 07:15
-
4EJLOBEK22817.02.2022 11:47
-
28060527.02.2021 04:57
-
LadyK1513.08.2021 22:57
-
7936607.10.2022 01:12
-
NastyaVelly27.06.2021 23:52
-
folaelena119.01.2022 09:32
-
anna1834119.01.2020 09:50
-
palamarchk18120.02.2022 21:11
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.