М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации

Объясните вкратце работу программы, не догоняю в какой строке что происходит и задается


Объясните вкратце работу программы, не догоняю в какой строке что происходит и задается

👇
Ответ:
Selebruty1
Selebruty1
06.07.2022

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> - обобщение для любой перечислимой коллекции.

4,4(28 оценок)
Открыть все ответы
Ответ:
Var
    n, k, i, imax, j: integer;
    a: array[1..100]of integer;

begin
    randomize;
    n := random(30) + 10;
    for i := 1 to n do
    begin
        a[i] := Random(30);
        write(a[i], ' ');
    end;
    writeln();
   
    {сортировочка}
    for i := 1 to n - 1 do
    begin
        imax := i;
        for j := i + 1 to n do
            if a[j] > a[imax] then
                imax := j;
        k := a[i];
        a[i] := a[imax];
        a[imax] := k;
    end;
   
    for i := 1 to n do
        write(a[i], ' ');
   
    k := 0;
    for i := 2 to n - 1 do
        if (a[i] <> a[i - 1]) and (a[i] <> a[i + 1]) then
            k := k + 1;
   
    if a[1] <> a[2] then k := k + 1;
    if a[n] <> a[n - 1] then k := k + 1;
   
    writeln();
    writeln('No doubles - ', k);
end.
4,8(54 оценок)
Ответ:
ankateren
ankateren
06.07.2022

const n=20;

var a:array [1..n] of integer;

i,max,maxi,min,mini:integer;

begin

write('Массив: ');

for i:= 1 to n do

begin

a[i]:=random(101)+50;

write (a[i],'  ')

end;

max:=a[1];

maxi:=1;

min:=a[1];

mini:=1;

for i:= 1 to n do

begin

if a[i]>max then

begin

max:=a[i];

maxi:=i

end;

if a[i]<min then

begin

min:=a[i];

mini:=i

end

end;

writeln;

writeln('Максимальный элемент ',max,' и его номер ',maxi);

writeln('Минимальный элемент ',min,' и его номер ',mini)

end.

Или (если max или min элемент будет не один)

const n=20;

var a:array [1..n] of integer;

i,max,min:integer;

begin

write('Массив: ');

for i:= 1 to n do

begin

a[i]:=random(101)+50;

write (a[i],'  ')

end;

max:=a[1];

min:=a[1];

for i:= 1 to n do

begin

if a[i]>max then max:=a[i];

if a[i]<min then min:=a[i]

end;

writeln;

for i:= 1 to n do

begin

if a[i]=max then writeln('Максимальный элемент ',max,' и его номер ',i);

if a[i]=min then writeln('Минимальный элемент ',min,' и его номер ',i)

end

end.

4,5(92 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ