2012-05-02 4 views
0

В PHP, если я создаю заводскую программу контроля с конвейерной лентой, где всплывающий список на форме 100% (не проверяйте ничего - пусть все проходит) до 0% (проверяйте все), какова функция вычисления, когда один из виджетов должен быть проверен?Вычисление коэффициентов дросселей в PHP

Немного дополнительной информации - этикетка говорит: «Пусть виджеты [x%] проходят без проверки».

Более того, как мы можем протестировать ваш алгоритм, чтобы доказать его правильность? Например, значение 100%, запускаемое 99999 раз, не должно показывать никаких проверок. Значение 99%, запустившееся 99999 раз, должно показывать одну проверку в синей луне, если она повторяется повторно. Значение 0%, запускаемое 99999 раз, должно показывать все виджеты 99999, отправляемые на проверку.

EDIT: Сотрудник говорит, что меня путают и путают здесь. Она думает, что я описываю вероятность?

В любом случае, я пробовал этот код в качестве теста, но он ничего не делает, кроме как на отметках 100 и 50 на 1. Тем не менее, 1-49 действуют как 50, в то время как 51 через 100 уподобляться 100.

<?php 

$nChance = @ $argv[1]; 
$nChance = intval($nChance); 

for ($i = 1; $i <= 999999; $i++) { 
    $nTest = rand(1,floor(100/$nChance)); 
    if (!($nTest == 1)) { 
    die("INSPECT! i($i) rand($nTest) chance($nChance)\n"); 
    } 
} 

Затем я попробовал этот вариант, и тоже не получилось, потому что он просто сказал ПРОВЕРЬТЕ все время.

<?php 

$nChance = @ $argv[1]; 
$nChance = intval($nChance); 

for ($i = 1; $i <= 999999; $i++) { 
    $nTest = rand(0,100); 
    if (!($nTest < $nChance)) { 
    die("INSPECT! i($i) rand($nTest) chance($nChance)\n"); 
    } 
} 
+1

Исправьте меня, если я ошибаюсь, но вы просите кого-нибудь создать рабочий сценарий и протестировать его для вас. Может быть, это лучше будет размещаться на сайте, где вы платите за проделанную работу? –

+0

Нет, совсем нет. Один лайнер почти сработал, но трудно доказать, что кто-то делает что-то вроде: «Ответ: (mt_rand (1,100) <$ nChance»), но потом не показывает, как это доказать. – Volomike

ответ

1
$nChance = 5; // % chance of inspection 
$x  = 1; // number of seconds between products passing inspection point 
while (isLineRunning()) 
{ 
    if(mt_rand(1,100) <= $nChance) 
    { 
     echo "INSPECT ITEM!"; 
    } 
    sleep($x); 
}; 

это будет проверять секунды каждый «х» в то время как линия работает.

Ваш коллега корректен, но для ваших целей вы принимаете решение, основанное на том, что случайное число меньше или равно (в данном случае) 5, которое, если оно действительно случайное (которое не было сгенерировано таким образом) должен предоставить шанс 1 из 20, если вы выберете любой предмет.

+0

Разве это не отличается от этой формулы? 'if ($ nChance == 0) {$ bLetThrough = FALSE;} else {$ bLetThrough = rand (1, round (100/$ nChance)) == 1);}' – Volomike

+0

действительно должно быть, если (mt_rand (0,100) <$ nChance), вам действительно не нужно другое, вы просто хотите нарушить действие по умолчанию, не проверяя –