Заданное натуральное число n и 2 одномерные массивы X и Y, содержащие n элемент по каждому. Сформировать и вывести массив, каждый элемент которого, взятый из массива Х, не принадлежит множеству, образованному из элементов массива Y.

Ответы

Ответ дал: Аноним
0
// PascalABC.NET 3.2, сборка 1457 от 29.05.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var n:=ReadInteger('n=');
  var x:=ArrRandom(n,-50,50); Write('x: '); x.Println;
  var y:=ArrRandom(n,-50,50); Write('y: '); y.Println;
  var z:=x.Where(p->not y.Any(q->p=q)).ToArray;
  Write('z: '); z.Println
end.

Пример
n= 17
x: -29 16 -20 -14 47 37 29 4 50 42 -30 38 -7 6 32 -11 -33
y: -26 32 24 18 -39 38 -18 -8 -42 -7 46 38 -4 -43 47 -27 -13
z: -29 16 -20 -14 37 29 4 50 42 -30 6 -11 -33
Ответ дал: Аноним
0
x.Where() - это фильтр. Он выбирает из массива х только те элементы, которые удовлетворяют условию фильтрации. В данном случае условие выглядит как p->not y.Any(q->p=q). Это так называемое лямбда-выражение, т.е. функция, которая создается "на лету", а не описывается заранее. Условие сложное. Читается так: для каждого элемента p (это параметр, на место которого по очереди подставляются элементы со входа фильтра, т.е. в нашем случае как бы x[i]) не должно выполняться условие y.Any(q->p=q)
Ответ дал: Аноним
0
Это условие говорит о том, что хотя бы один элемент в y равен параметру p, т.е. x[i]
Ответ дал: Аноним
0
Спасибо вам большое за помощь!!!
Ответ дал: Аноним
0
В целом получается, что через фильтр проходят только те элементы из x, которые отсутствуют среди элементов y. Оставшаяся часть цепочки .ToArray служит для превращения последовательности элементов, прошедших через фильтр, в массив.
Ответ дал: Аноним
0
В левой части стоит var z:=, т.е. полученный массив помещается в переменную z, которая создается динамически и автоматически получает необходимый тип и размер. Поэтому z - это нужный нам массив. Остальные операторы просто выводят 'z=' и элементы массива z соответственнo.
Вас заинтересует