Поиск среднего числа в PowerShell - PullRequest
0 голосов
/ 04 января 2019

Я практикуюсь в PowerShell и делаю ввод ответа пользователя, где один из вариантов - ввести 3 числа, и программа вернет среднее число.Я делал это миллион раз, и, похоже, я не могу заставить его последовательно возвращать среднее число.

Например, когда мои числа 1, 23452342 и 3, он говорит, что 3 - это среднее число.

Вот мой код:

if ($response -eq 1) {
    $a = Read-Host "Enter a number "
    $b = Read-Host "Enter a second number "
    $c = Read-Host "Enter a third number "

    if (($a -gt $b -and $a -lt $c) -or ($a -lt $b -and $a -gt $c)) {
        Write-Host "$a is the middle number"
    }
    if (($b -gt $a -and $b -lt $c) -or ($b -gt $c -and $b -lt $a)) {
        Write-Host "$b is the middle number"
    }
    if (($c -gt $a -and $c -lt $b) -or ($c -gt $b -and $c -lt $a)) {
        Write-Host "$c is the middle number"
    }
}

Ответы [ 2 ]

0 голосов
/ 04 января 2019

В качестве дополнительного решения, которое будет работать с любым массивом, где вам нужен средний элемент, вы можете просто решить его следующим образом:

$arr = 1..50
($arr | Sort-Object)[[int](($arr.count -1) /2)]

Если ваш массив имеет формат, который не требует сортировки,просто пропустите эту часть.

edit: Очевидно, вам нужно будет вставить данные в массив на первом шаге.

С уважением

0 голосов
/ 04 января 2019

Вместо нескольких отдельных сравнений, просто сортируя три значения и выбирая второй элемент, вы сразу получите медиану.Но я подозреваю, что на самом деле все портит результаты: Read-Host возвращает строки, когда вам нужно, чтобы они были числовыми значениями.Порядок сортировки строк ("1" <"20" <"3") отличается от порядка сортировки чисел (1 <3 <20), поскольку сравниваются символы в соответствующих позициях, а не целое число. </p>

Преобразование введенных значений в целые числа (или удвоения, если вы ожидаете числа с плавающей запятой) должно решить проблему:

if ($response -eq 1) {
    [int]$a = Read-Host 'Enter a number'
    [int]$b = Read-Host 'Enter a second number'
    [int]$c = Read-Host 'Enter a third number'

    $n = ($a, $b, $c | Sort-Object)[1]

    Write-Host "$n is the median."
}
...