С Новым годом! Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
-7 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 49

Рулетка или счет по кругу, по диску

10.04.2024, 20:34. Показов 1017. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую уважаемое сообщество.
Такая задача. Есть диск рулетки, на котором нанесена шкала от $min до $max. Текущее положение указателя турели - $ch - какое-нибудь число в пределах от $min до $max, включительно. Крутнули турель и указатель сдвинулся в сторону увеличения шкалы на случайное число шагов $step. Итог - конечное показание число указателя. К примеру,

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$min = 65
$max = 90
$ch = 66
 
 
$step = 13
$result = $ch + $step; #66+13=79
$result
 
 
$ch = $result; #79
$step = 20
#79+20 = уже не 99, а что-то вроде ($min + ($ch + ($step % $max) - 1), то есть 73
$result = ($min + ($ch + $step%$max))%$max - 1
$result
 
 
$ch = $result; #73
$step = 161
#73+161 = конечно же не 234, а хрен его знает?
Итак, задание составить формулу-решение, выдающее правильный результат во всех случаях, но без использования if else (это будет очень просто).

Я когда-то уже находил это решенье, но забыл. А теперь стал старый...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2024, 20:34
Ответы с готовыми решениями:

Как открыть полный доступ к диску C(системному диску)?
Прошу помочь мне в открытии 100% доступа к диску "C". В системе я администратор, но на диск запрещена запись. Даже мои программы, которые...

Диску жить или на свалку?
Жесткому диску Western Digital - WDC WD5000AAKS-00UU3A0 около 4 лет... Начала жутко тормозить система. После недолгих поисков возможной...

Консольная игра "Русская рулетка" или уязвимости Log4j посвящается
Дело было вечером, делать было не чего: #include <clocale> #include <cstdlib> #include <iostream> using namespace std; void...

18
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 689
10.04.2024, 23:19
Т.е. значения повторяются по кругу?

PowerShell
1
2
3
4
5
6
7
8
9
10
$range = 65..90
$ch = 66
$steps = 13, 20, 161   
 
foreach ($step in $steps)
{
    $ind = ($range).IndexOf($ch)
    $result = ($ch = ($range * $step)[$ind + $step])
    $result
}
1
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
11.04.2024, 00:10
Цитата Сообщение от Gouru Посмотреть сообщение
теперь стал

обучающее видео
старым здесь не место можно посмотреть онлайн
там правда все на пневматике - более современные технологию не упоминается
0
-7 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 49
11.04.2024, 02:47  [ТС]
Да. Вы правильно решили задачу. А если без массива?
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
11.04.2024, 18:45
Gouru,
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Disk {
    [int]$capacity
    [int]$point
    [int]$shift
 
    Disk ([int]$min, [int]$max, [int]$ch) {
        $this.capacity = $max - $min + 1
        $this.point = $ch - $min 
        $this.shift = $min
    }
 
    [int] TurnRight ([int]$step) {
        $this.point = ($step + $this.point) % $this.capacity
        return $this.point + $this.shift
    }
 
    [int] TurnLeft ([int]$step) {
        $this.point = $this.capacity - 1 - ($step + ($this.capacity - 1 - $this.point )) % $this.capacity 
        return $this.point + $this.shift
    }
}
 
$diskInstance = [Disk]::new(70, 74, 72)
 
$diskInstance.TurnLeft(1)
$diskInstance.TurnLeft(1)
$diskInstance.TurnLeft(1)
$diskInstance.TurnLeft(1)
$diskInstance.TurnLeft(1)
 
$diskInstance.TurnRight(1)
$diskInstance.TurnRight(1)
$diskInstance.TurnRight(1)
$diskInstance.TurnRight(1)
$diskInstance.TurnRight(1)
Code
1
2
3
4
5
6
7
8
9
10
71
70
74
73
72
73
74
70
71
72
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,829
11.04.2024, 22:47
GetEnumerator() ʔ
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
12.04.2024, 05:26
volodin661,
Цитата Сообщение от Gouru Посмотреть сообщение
А если без массива?
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,829
12.04.2024, 09:19
я прочитал таки первый пост;
такое впечатление, что ТС хочет для себя открыть понятие ФУНКЦИИ
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
12.04.2024, 10:24
PowerShell
1
2
3
4
5
$diskRangeBorders = 65, 90
while($true){
    "Текущее положение указателя: "+(Get-Random -Min $diskRangeBorders[0] -Max ($diskRangeBorders[1]+1))
    Sleep 1
}
Добавлено через 5 минут
Gouru, это задача для универа? Скажите, если будет нужно пояснить решение.
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,829
12.04.2024, 11:56
Какая-то ерунда со скрипучим блоком.

PowerShell
1
function generator { param($min,$max);     { echo "**", $min, $max, "**" }    }
PowerShell
1
2
3
$sb = generator 10 20
 
&$sb
скриптблок не видит переданные в функцию параметры $min, $max.

Как тебе такое, Илон Маск ?

Добавлено через 5 минут
добавление:

PowerShell
1
$MIN=1000; $MAX=5000; function generator { param($min,$max); { echo "**", $min, $max, "**" } }
PowerShell
1
2
3
$sb = generator 10 20
 
&$sb
а внешние видит

Добавлено через 4 минуты
будет ещё добавление #2, но позже.
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
12.04.2024, 12:49
volodin661, что именно удивляет в описанном поведении?)

Какая задача у представленного кода?
В $sb параметры (10 и 20) должны попадать в момент генерации скрипт-блока? Или в момент его вызова?

При генерации:
PowerShell
1
2
3
4
5
6
7
function generator {
    param ($min, $max)
    [ScriptBlock]:: Create ("echo '**', $min, $max, '**'"}
 
$sb = generator 10 20
&$sb
При вызове:
PowerShell
1
2
3
4
function generator { {param($min, $max); echo '**', $min, $max, '**'}
 
$sb = generator
&$sb 10 20
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
12.04.2024, 12:50
[del]
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,829
12.04.2024, 17:17
нет.
там всё плохо


PowerShell
1
2
3
4
5
6
7
8
$min = 100; $max = 200;
function generator {
    param ($min, $max)
    [ScriptBlock]::Create('  echo "**", $min, $max, "**"  ')
}
 
$sb = generator
&$sb 1 2
Output:
**
100
200
**

И весьма интересный момент ещё;
Если в функции-генератор перед определением скриптблока будет что-то, гадящее в output-стрим,
то воду можно совсем сливать.
вот такое, например:
PowerShell
1
2
3
4
5
function generator {
    param ($min, $max)
    echo "TEST"
    [ScriptBlock]::Create('    echo "**", $min, $max, "**"  ')
}
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
12.04.2024, 18:13
Цитата Сообщение от volodin661 Посмотреть сообщение
там всё плохо
Ты оба приведенных мною кода свалил в одну кучу)
Плюс кавычки перепутал
И аргументы при таком способе передаются в функцию, а не в скрипт-блок, так как в скрипт-блоке параметры не заданы
Правильно так:
PowerShell
1
2
3
4
5
6
7
8
$min = 100; $max = 200;
function generator {
    param ($min, $max)
    [ScriptBlock]::Create("  echo '**', $min, $max, '**'  ")
}
 
$sb = generator 1 2
&$sb
Цитата Сообщение от volodin661 Посмотреть сообщение
И весьма интересный момент ещё
Здесь так же всё сработало верно. Для понимания происходящего можно выполнить gcm echo = Write-Output
Write-Output = Отправь-На-Выход
Соответственно, на выход из функции отправится и "TEST" и скрипт-блок.
Если требуется просто печать в консоль, то это выполняет команда Write-Host.

Добавлено через 2 минуты
echo - это вроде как в cmd Write-Host. Наверное это спутало.
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,829
12.04.2024, 18:24
Fors1k,
хоть я и перманентно пьян и давно уже не юн,
но кавычки я не путаю; зачем же мне строковая интерполяция при создании тела скрипт-блока?

что такое echo в pwsh я тоже знаю; и даже так: return [ScriptBlock]::Create() - тоже не спасает, если до этого что-то падает в output-stream. увы.
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
12.04.2024, 18:57
Цитата Сообщение от volodin661 Посмотреть сообщение
но кавычки я не путаю; зачем же мне строковая интерполяция при создании тела скрипт-блока?
Затем, что при создании скрипт-блока, переменные внутри него не раскрываются, и не должны раскрываться.
Создается код, который будет выполнен в будущем, не сейчас.
Здесь
Цитата Сообщение от volodin661 Посмотреть сообщение
PowerShell
1
2
3
$MIN=1000; $MAX=5000; function generator { param($min,$max); { echo "**", $min, $max, "**" } }
$sb = generator 10 20
&$sb
код выполняется в такой последовательности:
Вызывается функция generate ; в неё поступило 10 и 20 ; ничего с этими переменными в функции никто не делает ; возвращается скрипт-блок, в коде которого присутствуют $min и $max, которые будут раскрыты в момент запроса на выполнение скрипт-блока ; вызывается выполнение скрипт-блока, который должен "вывести в консоль" то, что находится в переменных $min и $max ; данное действие происходит в 3 строке кода, и на данный момент, само собой, существуют только две переменные $min и $max(мы уже давно вышли из функции), содержащие в себе 1000 и 5000, что и было выведено в консоль.
Вот я и спросил какой конкретно момент удивляет в поведении кода)
Переменные можно передать в скрипт-блок либо в момент его генерации, но только интерполяцией, либо при вызове скрипт-блока, но только задав скрипт-блоку параметры, которые эти аргументы будут принимать в момент самого исполнения.
Эти два варианта я и написал в 11 сообщении.
Цитата Сообщение от volodin661 Посмотреть сообщение
и даже так: return [ScriptBlock]::Create() - тоже не спасает, если до этого что-то падает в output-stream. увы.
return в пш можно понимать как "прерывающий Write-Output":
PowerShell
1
2
3
4
function Get-Smth{
    Write-Output 5
    return 6
}
=
PowerShell
1
2
3
4
function Get-Smth{
    Write-Output 5
    Write-Output 6; return
}
Здесь сработает 2 раза Write-Output, но до семерки дело не дойдет
PowerShell
1
2
3
4
5
function Get-Smth{
    Write-Output 5
    return 6
    Write-Output 7
}
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
12.04.2024, 21:31
Цитата Сообщение от volodin661 Посмотреть сообщение
скриптблок не видит переданные в функцию параметры $min, $max.
Цитата Сообщение от Fors1k Посмотреть сообщение
при создании скрипт-блока, переменные внутри него не раскрываются
Пояснение от микрософт:
В блоке скрипта, в отличие от функции, нельзя указывать параметры за пределами фигурных скобок.
PowerShell
1
2
$var = { param($par1, $par2) "p1: $par1";"p2: $par2"}
&$var -par1 'One' -par2 'Two'
Цитата Сообщение от volodin661 Посмотреть сообщение
тоже не спасает, если до этого что-то падает в output-stream. увы.
но это уже не проблема скрипт блока же... тут целая функция в скрипт-блок утрамбована ($sb = generator 10 20, здесь $sb - скрипт-блок), а что она там рожает из своих внутренностей, хоть ещё стотысячпятьсот скрипт-блоков - самому, запускаемому скрипт-блоку &$sb фиолетово.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
13.04.2024, 09:39
только увидел...
Цитата Сообщение от Fors1k Посмотреть сообщение
return в пш можно понимать как "прерывающий Write-Output"
Да, но не только прерывание Write-Output, а в принципе, выход после какой-либо инструкции...
return надо понимать буквально, как обычно, это возврат, но при этом он не обязан возвращать значение. В скрипт-блоках также его можно применять, кстати, как и в функциях, как и в switch, и в других инструкциях. В PS возврат значения, выполняется неявно в любой инструкции, в отличие от C или C#, например, поэтому те, кто привык в других ЯП использовать для возврата именно return, может его обозначать.
Ключевое слово return завершает работу функции, скрипта или скрипт блока. Его можно использовать для выхода из область в определенной точке, для возврата значения или для указания того, что конец области достигнут.

Пользователи, знакомые с языками, такими как C или C#, могут использовать return ключевое слово, чтобы сделать логику выхода область явным образом.
Но, при этом:
Примечание
Начиная с PowerShell 5.0, в язык PowerShell добавлены определения классов с помощью формального синтаксиса. В контексте класса PowerShell ничего не выводится из метода, за исключением того, что вы указываете с помощью инструкции return . Дополнительные сведения о классах PowerShell см. в about_Classes.
Как-то так...

В общем, автоматическая типизация - зло, по сути, но так уж её реализовали в PS
Пример в контексте топика:

- т.е. аналогичные инструкции, могут иметь различный тип на выходе и при записи в переменные, это наглядно видно на скрине.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
13.04.2024, 09:45
ну, т.е. если тот же генератор, записать так:
PowerShell
1
function generator { param($min,$max); { echo "**", $min, $max, "**" }; return @(1,2,3) }
то это:
PowerShell
1
$sb = generator 10 20
- это $sb, уже не будет скрипт-блоком, а станет просто объектом, имеющим определенные свойства...

и попытка его запуска как &$sb, приведет ко вполне ожидаемым последствиям
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.04.2024, 09:45
Помогаю со студенческими работами здесь

Перезапуск процедуры или кнопки по кругу
Уважаемые Участники форума, а также его Гости! У меня появилась проблема из-за которой немогу идти дальше! Есть код: procedure...

N серых и M белых мышей сидят по кругу. Кошка ходит по кругу по часовой стрелке и съедает каждую S -тую мышку
N серых и M белых мышей сидят по кругу. Кошка ходит по кругу по часовой стрелке и съедает каждую S -тую мышку. В первый раз счет начинается...

Движение кораблика по кругу(или по sin/cos)
В этой программе корабль движется вправо по циклу, Помогите пожалуйста заменить движение кораблика на движение по кругу(или по sin/cos) ...

Принадлежит ли круг целому кругу или наоборот
Проверить принадлежит ли кругцелому кругуили наоборот. По принципу истина и ложь Добавлено через 22 часа 26 минут Я уже 2 день её...

P2P Серых IP или Мессенджер в узком кругу друзей
Всем Бобра! Пишу свой ПК мессенджер (Win/Linux) чисто для своих для друзей. У всех ествественно серые приватные ip. Существует ли в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru