我该如何将这段BASIC编程重写为PHP


How do I re-write this piece of BASIC programming to PHP?

请原谅我缺乏专业知识,但我真的需要好好想想这个PHP代码的正确公式。

我有两行BASIC:

100 PITCHHOR=(LSLATHOR/(NRSLATVER+1)):LSLATHOR=PITCHHOR*(NRSLATVER+1)
110 IF PITCHHOR>72 THEN NRSLATVER=NRSLATVER+1:GOTO 100

我只需要把它放在PHP代码中,我知道这是断章取义的,但我只需要逻辑。它对线路100上的PITCHHOR进行调整,并对LSLATHOR进行调整。然后,如果PITCHHOR > 72,它调整NRSLATVER并返回到第100行,并且它似乎循环直到满足PITCHHOR小于值72的条件。我说的对吗?

这两行的PHP会是什么样子,我会使用while循环吗?

我的尝试(可能会出错)

<?php
    $pitchhor = (floatval($lslathor) / (floatval($nrslatver) + 1));
    $lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));
        while ($pitchhor > 72) {                    
            $nrslatver += 1;
            $pitchhor = (floatval($lslathor) / (floatval($nrslatver) + 1));
            $lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));               
        }
?>

我非常感谢你的帮助。

编辑1:

我做了一个小小的改变,尝试使用goto,因为它是在PHP 5.3.0中引入的。

这个逻辑是否反映BASIC代码?

recalc:
$pitchhor = (floatval($lslathor) / (floatval($nrslatver) + 1));
$lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));
if ($pitchhor > 72) {
    $nrslatver += 1;
    goto recalc;
}

编辑2:

我最终使用了这个,多亏了Richard Chambers(我添加了一个动态公差,而不是72的固定螺距公差,这与旧BASIC程序中列出的规范有关):

do {
        $pitch = ($length / ($slat_qty + 1));
        $length = $pitch * ($slat_qty + 1); 
        if($pitch > $tolerance) { 
            ++$slat_qty;
        }
} while($pitch > $tolerance); 

BASIC源代码可以分解如下。这假设THEN子句的同一行上的多个语句是块的一部分,这似乎是旧式BASIC的标准。

100 PITCHHOR=(LSLATHOR/(NRSLATVER+1))
102 LSLATHOR=PITCHHOR*(NRSLATVER+1)
110 IF PITCHHOR>72 THEN
112 NRSLATVER=NRSLATVER+1
114 GOTO 100
116 END

我认为以下内容接近BASIC源代码。将其放入一个循环中,只要满足if语句条件,该循环就会继续。goto语句并没有什么真正的错误,只是可能是错误的来源。坦率地说,如果$pitchhor没有收敛到小于72的值,那么以下也可能是一个错误,因此线程最终会进入无限循环。

<?php
    do {
        $pitchhor = (floatval($lslathor) / (floatval($nrslatver) + 1));
        $lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));
        if($pitchhor > 72) {                    
            $nrslatver += 1;
        }
    } while ($pitchhor > 72);
?>