оставь комп включенным и подожди
PascalABC.NET
begin
var a := ArrRandom(4, -10, 20);
a.Println;
// ищем j - позицию первого неотрицательного элемента
var j := -1;
for var i := 0 to a.High do
if a[i] >= 0 then // нашли
begin
j := i;
break
end;
if j > -1 then
begin
for var i := j + 1 to a.High do
if a[i] < 0 then
begin
for var k := i downto j + 1 do
Swap(a[k], a[k-1]);
j += 1;
if j >= a.High then break;
end;
a.Println
end
else
Println('Нет положительных элементов')
end.
ответ: -y
Объяснение:
Оговоримся с синтаксисом.
"НЕ А" - "-А"
"дизъюнкция" (веточки вверх) - "+"
"конънкция" (веточки вниз) - "*"
-y + -[(x + y) * -y] * x * -y
Обратим внимание на -[(x + y) * -y]. Воспользуемся законом де Моргана для И (конъюнкции):
-[(x + y) * -y] = -(x + y) + --y
по закону двойного отрицания:
-(x + y) + y
Теперь воспользуемся законом де Моргана для ИЛИ:
-x * -y + y
Вернём это в исходное выражение:
-y + -[(x + y) * -y] * x * -y = -y + [-x * -y + y] * x * -y
Воспользуемся распределительным законом для ИЛИ:
-y + [-x * -y + y] * x * -y = -y + (-x * x * -y + x * y) * -y
по закону исключения третьего для И:
-y + (-x * x * -y + x * y) * -y = -y + (0 * -y + x * y) * -y = -y + (0 + x * y) * -y (операция с константой)
по закону операций с константами:
-y + (0 + x * y) * -y = -y + x * y * -y
теперь так же закон исключения третьего для И и закон операций с константами:
-y + x * y * -y = -y + x * 0 = -y + 0 = -y