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

时间:2013-12-09 13:19:45

标签: php while-loop basic

请原谅我缺乏专业知识,但我确实需要根据这个PHP代码的正确表述来选择你的大脑。

我有两行BASIC:

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

我只需要把它放到PHP代码中,我理解它是脱离上下文但我只需要逻辑。发生了什么事情,它会调整第100行的PITCHHORLSLATHOR的调整。然后,如果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); 

1 个答案:

答案 0 :(得分:1)

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);
?>