![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Условие - любые два из всех |
|
|
PowerShell - [решено] Условие - любые два из всех
|
fascinating rhythm Сообщения: 6705 |
Привет!
Подскажите, пожалуйста, что-то я торможу. Есть несколько переменных. Понадобилось написать условие, в котором любые две переменные из набора должны быть равны 2, иначе тревога. Можно, конечно, и так написать: $1 = 4 $2 = 4 $3 = 2 if (($1 -ne 2 -and $2 -ne 2) -or ($2 -ne 2 -and $3 -ne 2) -or ($1 -ne 2 -and $3 -ne 2)) { "Тревога!" } else { "ОК" } Как грамотно написать условие? |
|
------- Отправлено: 09:28, 19-01-2022 |
Ветеран Сообщения: 4635
|
Профиль | Отправить PM | Цитировать Массив, после его сортировка, после сравнение двух соседних элементов, если они равны, то прерывание и выход с "OK", при достижении конца массива выход с "Тревога!".
UPD: А Вам же только ДВОЙКИ считать? Тогда количество двоек в массиве и подсчитать. Читая тему "PowerShell - Условие - любые два из всех" подумалось, что любые две переменные имели бы одинаковые значения. |
Последний раз редактировалось NickM, 19-01-2022 в 09:59. Отправлено: 09:51, 19-01-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
fascinating rhythm Сообщения: 6705
|
Профиль | Отправить PM | Цитировать Цитата NickM:
Я вообще про Zabbix спрашиваю, как там теперь реализовать. |
|
------- Отправлено: 10:11, 19-01-2022 | #3 |
Ветеран Сообщения: 4635
|
Профиль | Отправить PM | Цитировать Офф-топ кончено, но на Паскале это могло бы выглядеть, например, так:
Скрытый текст
const n=15; var v:array[1..n] of real; k:integer; procedure qSort(l,r:integer); var i,j:integer; w,q:real; begin i := l; j := r; q := v[(l+r) div 2]; repeat while (v[i] < q) do inc(i); while (q < v[j]) do dec(j); if (i <= j) then begin w:=v[i]; v[i]:=v[j]; v[j]:=w; inc(i); dec(j); end; until (i > j); if (l < j) then qSort(l,j); if (i < r) then qSort(i,r); end; begin randomize; for k:=1 to n do begin //Получаем массив значений v[k]:=random(100); writeln(round(v[k])); end; writeln('---'); qSort(1, n); //Сортируем массив for k:=1 to n do begin writeln(round(v[k])); end; writeln('---'); for k:=1 to n do if v[k]=v[k+1] then begin //Сравниваем два соседних элемента, при совпадении выходим и сообщаем, что нашли writeln(round(v[k]), ' , OK!'); break; end; if k=n then writeln('Nothing'); //Двух одинаковых не нашли - сообщаем об этом end. Осталось только на Powershell переложить ![]() |
Отправлено: 10:45, 19-01-2022 | #4 |
fascinating rhythm Сообщения: 6705
|
Профиль | Отправить PM | Цитировать Цитата NickM:
Да, видать, только поиск в массиве. В Заббиксе тупо решил суммой... |
||
------- Отправлено: 11:08, 19-01-2022 | #5 |
Ветеран Сообщения: 4635
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Выше приведённый пример на Паскале демонстрирует это. |
|
Отправлено: 12:05, 19-01-2022 | #6 |
fascinating rhythm Сообщения: 6705
|
Профиль | Отправить PM | Цитировать Ну любых не подойдёт же. Если массив, например, 4444444211111, то это не сработает.
|
------- Отправлено: 13:03, 19-01-2022 | #7 |
Ветеран Сообщения: 4635
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Скрытый текст
const n=15; const f=2; var v:array[1..n] of real; k:integer; procedure qSort(l,r:integer); var i,j:integer; w,q:real; begin i := l; j := r; q := v[(l+r) div 2]; repeat while (v[i] < q) do inc(i); while (q < v[j]) do dec(j); if (i <= j) then begin w:=v[i]; v[i]:=v[j]; v[j]:=w; inc(i); dec(j); end; until (i > j); if (l < j) then qSort(l,j); if (i < r) then qSort(i,r); end; begin randomize; for k:=1 to n do begin //Получаем массив значений v[k]:=random(10)+1; writeln(round(v[k])); end; writeln('---'); qSort(1, n); //Сортируем массив for k:=1 to n do begin writeln(round(v[k])); end; writeln('---'); for k:=1 to n do if (v[k]=f) and (v[k]=v[k+1]) then begin //Сравниваем два соседних элемента, при совпадении выходим и сообщаем, что нашли writeln(round(v[k]), ', Ok, found!'); break; end; if k=n then writeln('Nothing found.'); //Двух одинаковых не нашли - сообщаем об этом end. Некоторые результаты: |
|
Отправлено: 13:25, 19-01-2022 | #8 |
Deadooshka Сообщения: 2566
|
Профиль | Отправить PM | Цитировать Можно использовать делегата сортировки массива (List), но там сравнение может быть не по порядку, в зависимости от алгоритма сортировки.
$1 = 4 $2 = 4 $3 = 2 [Comparison[object]]$func = { param($i, $j) if ($i -eq $j) { return } $v1 = gv $i -ValueOnly; $v2 = gv $j -ValueOnly if ($v1 -ne 2 -and $v2 -ne 2) { Write-Host "`$$i = $v1; `$$j = $v2"; throw 'тревога' } } $list = [Collections.Generic.List[object]]( get-variable | where Name -match '\d+').Name if ($list.Length) { try { $list.Sort($func); 'OK' } catch { $Error[1].FullyQualifiedErrorId } } |
Отправлено: 13:51, 19-01-2022 | #9 |
fascinating rhythm Сообщения: 6705
|
Профиль | Отправить PM | Цитировать Я так понимаю, что эффективнее всего выцеплять из массива нужные значения и потом подсчитывать их количество. Или нет?
|
------- Отправлено: 15:17, 19-01-2022 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Удаление всех файлов с заданными разрешениями из указанной папки и всех ее подпапок | Alexander_88 | Скриптовые языки администрирования Windows | 5 | 30-11-2015 00:59 | |
CMD/BAT - [решено] Удаление всех файлов (всех типов) из всех подпапок, кроме расширений txt | kot318 | Скриптовые языки администрирования Windows | 10 | 12-02-2015 15:48 | |
CMD/BAT - Удаление всех файлов из подпапок | Scumtron | Скриптовые языки администрирования Windows | 2 | 17-10-2013 16:15 | |
Win32 API - Копирование всех файлов из директории | DaRiYs | Программирование и базы данных | 4 | 03-09-2009 23:36 | |
Условие кодировки. Редактирование файла из cmd. | Mss | Автоматическая установка Windows 2000/XP/2003 | 4 | 19-05-2005 23:25 |
|